path.test.ts 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. import { expect } from 'chai'
  2. import { Folder } from '../../../../../types/folder'
  3. import { docId } from '../../source-editor/helpers/mock-doc'
  4. import {
  5. findEntityByPath,
  6. pathInFolder,
  7. previewByPath,
  8. } from '@/features/file-tree/util/path'
  9. describe('Path utils', function () {
  10. let rootFolder: Folder
  11. beforeEach(function () {
  12. rootFolder = {
  13. _id: 'root-folder-id',
  14. name: 'rootFolder',
  15. docs: [
  16. {
  17. _id: docId,
  18. name: 'main.tex',
  19. },
  20. ],
  21. folders: [
  22. {
  23. _id: 'test-folder-id',
  24. name: 'test-folder',
  25. docs: [
  26. {
  27. _id: 'test-doc-in-folder',
  28. name: 'example.tex',
  29. },
  30. ],
  31. fileRefs: [
  32. {
  33. _id: 'test-file-in-folder',
  34. name: 'example.png',
  35. },
  36. ],
  37. folders: [
  38. {
  39. _id: 'test-subfolder-id',
  40. name: 'test-subfolder',
  41. docs: [
  42. {
  43. _id: 'test-doc-in-subfolder',
  44. name: 'nested-example.tex',
  45. },
  46. ],
  47. fileRefs: [
  48. {
  49. _id: 'test-file-in-subfolder',
  50. name: 'nested-example.png',
  51. },
  52. ],
  53. folders: [],
  54. },
  55. ],
  56. },
  57. ],
  58. fileRefs: [
  59. {
  60. _id: 'test-image-file',
  61. name: 'frog.jpg',
  62. },
  63. {
  64. _id: 'uppercase-extension-image-file',
  65. name: 'frog.JPG',
  66. },
  67. ],
  68. }
  69. })
  70. describe('pathInFolder', function () {
  71. it('gets null path for non-existent entity', function () {
  72. const retrieved = pathInFolder(rootFolder, 'non-existent.tex')
  73. expect(retrieved).to.be.null
  74. })
  75. it('gets correct path for document in the root', function () {
  76. const retrieved = pathInFolder(rootFolder, docId)
  77. expect(retrieved).to.equal('main.tex')
  78. })
  79. it('gets correct path for document in a folder', function () {
  80. const retrieved = pathInFolder(rootFolder, 'test-doc-in-folder')
  81. expect(retrieved).to.equal('test-folder/example.tex')
  82. })
  83. it('gets correct path for document in a nested folder', function () {
  84. const retrieved = pathInFolder(rootFolder, 'test-doc-in-subfolder')
  85. expect(retrieved).to.equal(
  86. 'test-folder/test-subfolder/nested-example.tex'
  87. )
  88. })
  89. it('gets correct path for file in a nested folder', function () {
  90. const retrieved = pathInFolder(rootFolder, 'test-file-in-subfolder')
  91. expect(retrieved).to.equal(
  92. 'test-folder/test-subfolder/nested-example.png'
  93. )
  94. })
  95. it('gets correct path for file in a nested folder relative to folder', function () {
  96. const retrieved = pathInFolder(
  97. rootFolder.folders[0],
  98. 'test-file-in-subfolder'
  99. )
  100. expect(retrieved).to.equal('test-subfolder/nested-example.png')
  101. })
  102. })
  103. describe('findEntityByPath', function () {
  104. it('returns null for a non-existent path', function () {
  105. const retrieved = findEntityByPath(rootFolder, 'not-a-real-document.tex')
  106. expect(retrieved).to.be.null
  107. })
  108. it('finds a document in the root', function () {
  109. const retrieved = findEntityByPath(rootFolder, 'main.tex')
  110. expect(retrieved?.entity._id).to.equal(docId)
  111. })
  112. it('finds a document in a folder', function () {
  113. const retrieved = findEntityByPath(rootFolder, 'test-folder/example.tex')
  114. expect(retrieved?.entity._id).to.equal('test-doc-in-folder')
  115. })
  116. it('finds a document in a nested folder', function () {
  117. const retrieved = findEntityByPath(
  118. rootFolder,
  119. 'test-folder/test-subfolder/nested-example.tex'
  120. )
  121. expect(retrieved?.entity._id).to.equal('test-doc-in-subfolder')
  122. })
  123. it('finds a file in a nested folder', function () {
  124. const retrieved = findEntityByPath(
  125. rootFolder,
  126. 'test-folder/test-subfolder/nested-example.png'
  127. )
  128. expect(retrieved?.entity._id).to.equal('test-file-in-subfolder')
  129. })
  130. })
  131. describe('previewByPath', function () {
  132. it('returns extension without preceding dot', function () {
  133. const preview = previewByPath(
  134. rootFolder,
  135. 'test-project-id',
  136. 'test-folder/example.png'
  137. )
  138. expect(preview).to.deep.equal({
  139. url: '/project/test-project-id/file/test-file-in-folder',
  140. extension: 'png',
  141. })
  142. })
  143. })
  144. })