file-tree-folder-list.spec.tsx 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. import '../../../helpers/bootstrap-3'
  2. import FileTreeFolderList from '../../../../../frontend/js/features/file-tree/components/file-tree-folder-list'
  3. import { EditorProviders } from '../../../helpers/editor-providers'
  4. import { FileTreeProvider } from '../helpers/file-tree-provider'
  5. describe('<FileTreeFolderList/>', function () {
  6. it('renders empty', function () {
  7. cy.mount(
  8. <EditorProviders>
  9. <FileTreeProvider>
  10. <FileTreeFolderList folders={[]} docs={[]} files={[]} />
  11. </FileTreeProvider>
  12. </EditorProviders>
  13. )
  14. cy.findByRole('tree')
  15. cy.findByRole('treeitem').should('not.exist')
  16. })
  17. it('renders docs, files and folders', function () {
  18. cy.mount(
  19. <EditorProviders>
  20. <FileTreeProvider>
  21. <FileTreeFolderList
  22. folders={[
  23. {
  24. _id: '456def',
  25. name: 'A Folder',
  26. folders: [],
  27. docs: [],
  28. fileRefs: [],
  29. },
  30. ]}
  31. docs={[{ _id: '789ghi', name: 'doc.tex' }]}
  32. files={[
  33. {
  34. _id: '987jkl',
  35. name: 'file.bib',
  36. hash: 'some hash',
  37. linkedFileData: {},
  38. },
  39. ]}
  40. />
  41. </FileTreeProvider>
  42. </EditorProviders>
  43. )
  44. cy.findByRole('tree')
  45. cy.findByRole('treeitem', { name: 'A Folder' })
  46. cy.findByRole('treeitem', { name: 'doc.tex' })
  47. cy.findByRole('treeitem', { name: 'file.bib' })
  48. })
  49. describe('selection and multi-selection', function () {
  50. it('without write permissions', function () {
  51. const rootFolder = [
  52. {
  53. _id: 'root-folder-id',
  54. name: 'rootFolder',
  55. docs: [{ _id: '1' }, { _id: '2' }],
  56. fileRefs: [],
  57. folders: [],
  58. },
  59. ]
  60. cy.mount(
  61. <EditorProviders
  62. rootFolder={rootFolder as any}
  63. permissionsLevel="readOnly"
  64. >
  65. <FileTreeProvider>
  66. <FileTreeFolderList
  67. folders={[]}
  68. docs={[
  69. { _id: '1', name: '1.tex' },
  70. { _id: '2', name: '2.tex' },
  71. ]}
  72. files={[]}
  73. />
  74. </FileTreeProvider>
  75. </EditorProviders>
  76. )
  77. // click on item 1: it gets selected
  78. cy.findByRole('treeitem', { name: '1.tex' }).click()
  79. cy.findByRole('treeitem', { name: '1.tex', selected: true })
  80. cy.findByRole('treeitem', { name: '2.tex', selected: false })
  81. // meta-click on item 2: no changes
  82. cy.findByRole('treeitem', { name: '2.tex' }).click({
  83. ctrlKey: true,
  84. cmdKey: true,
  85. })
  86. cy.findByRole('treeitem', { name: '1.tex', selected: true })
  87. cy.findByRole('treeitem', { name: '2.tex', selected: false })
  88. })
  89. it('with write permissions', function () {
  90. const rootFolder = [
  91. {
  92. _id: 'root-folder-id',
  93. name: 'rootFolder',
  94. docs: [{ _id: '1' }, { _id: '2' }, { _id: '3' }],
  95. fileRefs: [],
  96. folders: [],
  97. },
  98. ]
  99. cy.mount(
  100. <EditorProviders rootFolder={rootFolder as any}>
  101. <FileTreeProvider>
  102. <FileTreeFolderList
  103. folders={[]}
  104. docs={[
  105. { _id: '1', name: '1.tex' },
  106. { _id: '2', name: '2.tex' },
  107. { _id: '3', name: '3.tex' },
  108. ]}
  109. files={[]}
  110. />
  111. </FileTreeProvider>
  112. </EditorProviders>
  113. )
  114. // click item 1: it gets selected
  115. cy.findByRole('treeitem', { name: '1.tex' }).click()
  116. cy.findByRole('treeitem', { name: '1.tex', selected: true })
  117. cy.findByRole('treeitem', { name: '2.tex', selected: false })
  118. cy.findByRole('treeitem', { name: '3.tex', selected: false })
  119. // click on item 2: it gets selected and item 1 is not selected anymore
  120. cy.findByRole('treeitem', { name: '2.tex' }).click()
  121. cy.findByRole('treeitem', { name: '1.tex', selected: false })
  122. cy.findByRole('treeitem', { name: '2.tex', selected: true })
  123. cy.findByRole('treeitem', { name: '3.tex', selected: false })
  124. // meta-click on item 3: it gets selected and item 2 as well
  125. cy.findByRole('treeitem', { name: '3.tex' }).click({
  126. ctrlKey: true,
  127. cmdKey: true,
  128. })
  129. cy.findByRole('treeitem', { name: '1.tex', selected: false })
  130. cy.findByRole('treeitem', { name: '2.tex', selected: true })
  131. cy.findByRole('treeitem', { name: '3.tex', selected: true })
  132. // meta-click on item 1: add to selection
  133. cy.findByRole('treeitem', { name: '1.tex' }).click({
  134. ctrlKey: true,
  135. cmdKey: true,
  136. })
  137. cy.findByRole('treeitem', { name: '1.tex', selected: true })
  138. cy.findByRole('treeitem', { name: '2.tex', selected: true })
  139. cy.findByRole('treeitem', { name: '3.tex', selected: true })
  140. // meta-click on item 1: remove from selection
  141. cy.findByRole('treeitem', { name: '1.tex' }).click({
  142. ctrlKey: true,
  143. cmdKey: true,
  144. })
  145. cy.findByRole('treeitem', { name: '1.tex', selected: false })
  146. cy.findByRole('treeitem', { name: '2.tex', selected: true })
  147. cy.findByRole('treeitem', { name: '3.tex', selected: true })
  148. // meta-click on item 3: remove from selection
  149. cy.findByRole('treeitem', { name: '3.tex' }).click({
  150. ctrlKey: true,
  151. cmdKey: true,
  152. })
  153. cy.findByRole('treeitem', { name: '1.tex', selected: false })
  154. cy.findByRole('treeitem', { name: '2.tex', selected: true })
  155. cy.findByRole('treeitem', { name: '3.tex', selected: false })
  156. // meta-click on item 2: cannot unselect
  157. cy.findByRole('treeitem', { name: '2.tex' }).click({
  158. ctrlKey: true,
  159. cmdKey: true,
  160. })
  161. cy.findByRole('treeitem', { name: '1.tex', selected: false })
  162. cy.findByRole('treeitem', { name: '2.tex', selected: true })
  163. cy.findByRole('treeitem', { name: '3.tex', selected: false })
  164. // meta-click on item 3: add back to selection
  165. cy.findByRole('treeitem', { name: '3.tex' }).click({
  166. ctrlKey: true,
  167. cmdKey: true,
  168. })
  169. cy.findByRole('treeitem', { name: '1.tex', selected: false })
  170. cy.findByRole('treeitem', { name: '2.tex', selected: true })
  171. cy.findByRole('treeitem', { name: '3.tex', selected: true })
  172. // click on item 3: unselect other items
  173. cy.findByRole('treeitem', { name: '3.tex' }).click()
  174. cy.findByRole('treeitem', { name: '1.tex', selected: false })
  175. cy.findByRole('treeitem', { name: '2.tex', selected: false })
  176. cy.findByRole('treeitem', { name: '3.tex', selected: true })
  177. })
  178. })
  179. })