file-tree-root.test.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  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. docs: [{ _id: '456def', name: 'main.tex' }],
  22. folders: [],
  23. fileRefs: []
  24. }
  25. ]
  26. render(
  27. <FileTreeRoot
  28. rootFolder={rootFolder}
  29. projectId={'123abc'}
  30. hasWritePermissions={false}
  31. rootDocId="456def"
  32. onSelect={onSelect}
  33. onInit={onInit}
  34. />
  35. )
  36. screen.queryByRole('tree')
  37. screen.getByRole('treeitem')
  38. screen.getByRole('treeitem', { name: 'main.tex', selected: true })
  39. })
  40. it('fire onSelect', function() {
  41. const rootFolder = [
  42. {
  43. docs: [
  44. { _id: '456def', name: 'main.tex' },
  45. { _id: '789ghi', name: 'other.tex' }
  46. ],
  47. folders: [],
  48. fileRefs: []
  49. }
  50. ]
  51. render(
  52. <FileTreeRoot
  53. rootFolder={rootFolder}
  54. projectId="123abc"
  55. rootDocId="456def"
  56. hasWritePermissions={false}
  57. onSelect={onSelect}
  58. onInit={onInit}
  59. />
  60. )
  61. sinon.assert.calledOnce(onSelect)
  62. sinon.assert.calledWithMatch(onSelect, [
  63. sinon.match({
  64. entity: {
  65. _id: '456def',
  66. name: 'main.tex'
  67. }
  68. })
  69. ])
  70. onSelect.reset()
  71. screen.queryByRole('tree')
  72. const treeitem = screen.getByRole('treeitem', { name: 'other.tex' })
  73. fireEvent.click(treeitem)
  74. sinon.assert.calledOnce(onSelect)
  75. sinon.assert.calledWithMatch(onSelect, [
  76. sinon.match({
  77. entity: {
  78. _id: '789ghi',
  79. name: 'other.tex'
  80. }
  81. })
  82. ])
  83. })
  84. it('listen to editor.openDoc', function() {
  85. const rootFolder = [
  86. {
  87. docs: [
  88. { _id: '456def', name: 'main.tex' },
  89. { _id: '789ghi', name: 'other.tex' }
  90. ],
  91. folders: [],
  92. fileRefs: []
  93. }
  94. ]
  95. render(
  96. <FileTreeRoot
  97. rootFolder={rootFolder}
  98. projectId="123abc"
  99. rootDocId="456def"
  100. hasWritePermissions={false}
  101. onSelect={onSelect}
  102. onInit={onInit}
  103. />
  104. )
  105. screen.getByRole('treeitem', { name: 'main.tex', selected: true })
  106. window.dispatchEvent(
  107. new CustomEvent('editor.openDoc', { detail: '789ghi' })
  108. )
  109. screen.getByRole('treeitem', { name: 'main.tex', selected: false })
  110. screen.getByRole('treeitem', { name: 'other.tex', selected: true })
  111. })
  112. })