file-tree-root.test.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. import React from 'react'
  2. import sinon from 'sinon'
  3. import { screen, render, fireEvent } from '@testing-library/react'
  4. import fetchMock from 'fetch-mock'
  5. import FileTreeRoot from '../../../../../frontend/js/features/file-tree/components/file-tree-root'
  6. describe('<FileTreeRoot/>', function() {
  7. const onSelect = sinon.stub()
  8. const onInit = sinon.stub()
  9. beforeEach(function() {
  10. global.requestAnimationFrame = sinon.stub()
  11. })
  12. afterEach(function() {
  13. delete global.requestAnimationFrame
  14. fetchMock.restore()
  15. onSelect.reset()
  16. onInit.reset()
  17. })
  18. it('renders', function() {
  19. const rootFolder = [
  20. {
  21. _id: 'root-folder-id',
  22. docs: [{ _id: '456def', name: 'main.tex' }],
  23. folders: [],
  24. fileRefs: []
  25. }
  26. ]
  27. render(
  28. <FileTreeRoot
  29. rootFolder={rootFolder}
  30. projectId="123abc"
  31. hasWritePermissions={false}
  32. rootDocId="456def"
  33. onSelect={onSelect}
  34. onInit={onInit}
  35. />
  36. )
  37. screen.queryByRole('tree')
  38. screen.getByRole('treeitem')
  39. screen.getByRole('treeitem', { name: 'main.tex', selected: true })
  40. })
  41. it('fire onSelect', function() {
  42. const rootFolder = [
  43. {
  44. _id: 'root-folder-id',
  45. docs: [
  46. { _id: '456def', name: 'main.tex' },
  47. { _id: '789ghi', name: 'other.tex' }
  48. ],
  49. folders: [],
  50. fileRefs: []
  51. }
  52. ]
  53. render(
  54. <FileTreeRoot
  55. rootFolder={rootFolder}
  56. projectId="123abc"
  57. rootDocId="456def"
  58. hasWritePermissions={false}
  59. onSelect={onSelect}
  60. onInit={onInit}
  61. />
  62. )
  63. sinon.assert.calledOnce(onSelect)
  64. sinon.assert.calledWithMatch(onSelect, [
  65. sinon.match({
  66. entity: {
  67. _id: '456def',
  68. name: 'main.tex'
  69. }
  70. })
  71. ])
  72. onSelect.reset()
  73. screen.queryByRole('tree')
  74. const treeitem = screen.getByRole('treeitem', { name: 'other.tex' })
  75. fireEvent.click(treeitem)
  76. sinon.assert.calledOnce(onSelect)
  77. sinon.assert.calledWithMatch(onSelect, [
  78. sinon.match({
  79. entity: {
  80. _id: '789ghi',
  81. name: 'other.tex'
  82. }
  83. })
  84. ])
  85. })
  86. it('listen to editor.openDoc', function() {
  87. const rootFolder = [
  88. {
  89. _id: 'root-folder-id',
  90. docs: [
  91. { _id: '456def', name: 'main.tex' },
  92. { _id: '789ghi', name: 'other.tex' }
  93. ],
  94. folders: [],
  95. fileRefs: []
  96. }
  97. ]
  98. render(
  99. <FileTreeRoot
  100. rootFolder={rootFolder}
  101. projectId="123abc"
  102. rootDocId="456def"
  103. hasWritePermissions={false}
  104. onSelect={onSelect}
  105. onInit={onInit}
  106. />
  107. )
  108. screen.getByRole('treeitem', { name: 'main.tex', selected: true })
  109. window.dispatchEvent(
  110. new CustomEvent('editor.openDoc', { detail: '789ghi' })
  111. )
  112. screen.getByRole('treeitem', { name: 'main.tex', selected: false })
  113. screen.getByRole('treeitem', { name: 'other.tex', selected: true })
  114. })
  115. })