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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  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', linkedFileData: {} }]}
  32. files={[{ _id: '987jkl', name: 'file.bib', linkedFileData: {} }]}
  33. />
  34. </FileTreeProvider>
  35. </EditorProviders>
  36. )
  37. cy.findByRole('tree')
  38. cy.findByRole('treeitem', { name: 'A Folder' })
  39. cy.findByRole('treeitem', { name: 'doc.tex' })
  40. cy.findByRole('treeitem', { name: 'file.bib' })
  41. })
  42. describe('selection and multi-selection', function () {
  43. it('without write permissions', function () {
  44. const rootFolder = [
  45. {
  46. _id: 'root-folder-id',
  47. name: 'rootFolder',
  48. docs: [{ _id: '1' }, { _id: '2' }],
  49. fileRefs: [],
  50. folders: [],
  51. },
  52. ]
  53. cy.mount(
  54. <EditorProviders
  55. rootFolder={rootFolder as any}
  56. permissionsLevel="readOnly"
  57. >
  58. <FileTreeProvider>
  59. <FileTreeFolderList
  60. folders={[]}
  61. docs={[
  62. { _id: '1', name: '1.tex' },
  63. { _id: '2', name: '2.tex' },
  64. ]}
  65. files={[]}
  66. />
  67. </FileTreeProvider>
  68. </EditorProviders>
  69. )
  70. // click on item 1: it gets selected
  71. cy.findByRole('treeitem', { name: '1.tex' }).click()
  72. cy.findByRole('treeitem', { name: '1.tex', selected: true })
  73. cy.findByRole('treeitem', { name: '2.tex', selected: false })
  74. // meta-click on item 2: no changes
  75. cy.findByRole('treeitem', { name: '2.tex' }).click({
  76. ctrlKey: true,
  77. cmdKey: true,
  78. })
  79. cy.findByRole('treeitem', { name: '1.tex', selected: true })
  80. cy.findByRole('treeitem', { name: '2.tex', selected: false })
  81. })
  82. it('with write permissions', function () {
  83. const rootFolder = [
  84. {
  85. _id: 'root-folder-id',
  86. name: 'rootFolder',
  87. docs: [{ _id: '1' }, { _id: '2' }, { _id: '3' }],
  88. fileRefs: [],
  89. folders: [],
  90. },
  91. ]
  92. cy.mount(
  93. <EditorProviders rootFolder={rootFolder as any}>
  94. <FileTreeProvider>
  95. <FileTreeFolderList
  96. folders={[]}
  97. docs={[
  98. { _id: '1', name: '1.tex' },
  99. { _id: '2', name: '2.tex' },
  100. { _id: '3', name: '3.tex' },
  101. ]}
  102. files={[]}
  103. />
  104. </FileTreeProvider>
  105. </EditorProviders>
  106. )
  107. // click item 1: it gets selected
  108. cy.findByRole('treeitem', { name: '1.tex' }).click()
  109. cy.findByRole('treeitem', { name: '1.tex', selected: true })
  110. cy.findByRole('treeitem', { name: '2.tex', selected: false })
  111. cy.findByRole('treeitem', { name: '3.tex', selected: false })
  112. // click on item 2: it gets selected and item 1 is not selected anymore
  113. cy.findByRole('treeitem', { name: '2.tex' }).click()
  114. cy.findByRole('treeitem', { name: '1.tex', selected: false })
  115. cy.findByRole('treeitem', { name: '2.tex', selected: true })
  116. cy.findByRole('treeitem', { name: '3.tex', selected: false })
  117. // meta-click on item 3: it gets selected and item 2 as well
  118. cy.findByRole('treeitem', { name: '3.tex' }).click({
  119. ctrlKey: true,
  120. cmdKey: true,
  121. })
  122. cy.findByRole('treeitem', { name: '1.tex', selected: false })
  123. cy.findByRole('treeitem', { name: '2.tex', selected: true })
  124. cy.findByRole('treeitem', { name: '3.tex', selected: true })
  125. // meta-click on item 1: add to selection
  126. cy.findByRole('treeitem', { name: '1.tex' }).click({
  127. ctrlKey: true,
  128. cmdKey: true,
  129. })
  130. cy.findByRole('treeitem', { name: '1.tex', selected: true })
  131. cy.findByRole('treeitem', { name: '2.tex', selected: true })
  132. cy.findByRole('treeitem', { name: '3.tex', selected: true })
  133. // meta-click on item 1: remove from selection
  134. cy.findByRole('treeitem', { name: '1.tex' }).click({
  135. ctrlKey: true,
  136. cmdKey: true,
  137. })
  138. cy.findByRole('treeitem', { name: '1.tex', selected: false })
  139. cy.findByRole('treeitem', { name: '2.tex', selected: true })
  140. cy.findByRole('treeitem', { name: '3.tex', selected: true })
  141. // meta-click on item 3: remove from selection
  142. cy.findByRole('treeitem', { name: '3.tex' }).click({
  143. ctrlKey: true,
  144. cmdKey: true,
  145. })
  146. cy.findByRole('treeitem', { name: '1.tex', selected: false })
  147. cy.findByRole('treeitem', { name: '2.tex', selected: true })
  148. cy.findByRole('treeitem', { name: '3.tex', selected: false })
  149. // meta-click on item 2: cannot unselect
  150. cy.findByRole('treeitem', { name: '2.tex' }).click({
  151. ctrlKey: true,
  152. cmdKey: true,
  153. })
  154. cy.findByRole('treeitem', { name: '1.tex', selected: false })
  155. cy.findByRole('treeitem', { name: '2.tex', selected: true })
  156. cy.findByRole('treeitem', { name: '3.tex', selected: false })
  157. // meta-click on item 3: add back to selection
  158. cy.findByRole('treeitem', { name: '3.tex' }).click({
  159. ctrlKey: true,
  160. cmdKey: true,
  161. })
  162. cy.findByRole('treeitem', { name: '1.tex', selected: false })
  163. cy.findByRole('treeitem', { name: '2.tex', selected: true })
  164. cy.findByRole('treeitem', { name: '3.tex', selected: true })
  165. // click on item 3: unselect other items
  166. cy.findByRole('treeitem', { name: '3.tex' }).click()
  167. cy.findByRole('treeitem', { name: '1.tex', selected: false })
  168. cy.findByRole('treeitem', { name: '2.tex', selected: false })
  169. cy.findByRole('treeitem', { name: '3.tex', selected: true })
  170. })
  171. })
  172. })