context-menu.test.jsx 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. import { expect } from 'chai'
  2. import sinon from 'sinon'
  3. import { screen, fireEvent } from '@testing-library/react'
  4. import {
  5. renderWithEditorContext,
  6. cleanUpContext,
  7. } from '../../../helpers/render-with-context'
  8. import FileTreeRoot from '../../../../../frontend/js/features/file-tree/components/file-tree-root'
  9. describe('FileTree Context Menu Flow', function () {
  10. const onSelect = sinon.stub()
  11. const onInit = sinon.stub()
  12. beforeEach(function () {
  13. window.metaAttributesCache = new Map()
  14. window.metaAttributesCache.set('ol-user', { id: 'user1' })
  15. })
  16. afterEach(function () {
  17. onSelect.reset()
  18. onInit.reset()
  19. cleanUpContext()
  20. window.metaAttributesCache = new Map()
  21. })
  22. it('opens on contextMenu event', async function () {
  23. const rootFolder = [
  24. {
  25. _id: 'root-folder-id',
  26. name: 'rootFolder',
  27. docs: [{ _id: '456def', name: 'main.tex' }],
  28. folders: [],
  29. fileRefs: [],
  30. },
  31. ]
  32. renderWithEditorContext(
  33. <FileTreeRoot
  34. refProviders={{}}
  35. reindexReferences={() => null}
  36. setRefProviderEnabled={() => null}
  37. setStartedFreeTrial={() => null}
  38. onSelect={onSelect}
  39. onInit={onInit}
  40. isConnected
  41. />,
  42. {
  43. rootFolder,
  44. projectId: '123abc',
  45. rootDocId: '456def',
  46. }
  47. )
  48. const treeitem = screen.getByRole('button', { name: 'main.tex' })
  49. expect(screen.queryByRole('menu')).to.be.null
  50. fireEvent.contextMenu(treeitem)
  51. screen.getByRole('menu')
  52. })
  53. it('closes when a new selection is started', async function () {
  54. const rootFolder = [
  55. {
  56. _id: 'root-folder-id',
  57. name: 'rootFolder',
  58. docs: [
  59. { _id: '456def', name: 'main.tex' },
  60. { _id: '456def', name: 'foo.tex' },
  61. ],
  62. folders: [],
  63. fileRefs: [],
  64. },
  65. ]
  66. renderWithEditorContext(
  67. <FileTreeRoot
  68. refProviders={{}}
  69. reindexReferences={() => null}
  70. setRefProviderEnabled={() => null}
  71. setStartedFreeTrial={() => null}
  72. onSelect={onSelect}
  73. onInit={onInit}
  74. isConnected
  75. />,
  76. {
  77. rootFolder,
  78. projectId: '123abc',
  79. rootDocId: '456def',
  80. }
  81. )
  82. const treeitem = screen.getByRole('button', { name: 'main.tex' })
  83. expect(screen.queryByRole('menu')).to.be.null
  84. fireEvent.contextMenu(treeitem)
  85. screen.getByRole('menu')
  86. screen.getByRole('button', { name: 'foo.tex' }).click()
  87. expect(screen.queryByRole('menu')).to.be.null
  88. })
  89. it("doesn't open in read only mode", async function () {
  90. const rootFolder = [
  91. {
  92. _id: 'root-folder-id',
  93. name: 'rootFolder',
  94. docs: [{ _id: '456def', name: 'main.tex' }],
  95. folders: [],
  96. fileRefs: [],
  97. },
  98. ]
  99. renderWithEditorContext(
  100. <FileTreeRoot
  101. refProviders={{}}
  102. reindexReferences={() => null}
  103. setRefProviderEnabled={() => null}
  104. setStartedFreeTrial={() => null}
  105. onSelect={onSelect}
  106. onInit={onInit}
  107. isConnected
  108. />,
  109. {
  110. rootFolder,
  111. projectId: '123abc',
  112. rootDocId: '456def',
  113. permissionsLevel: 'readOnly',
  114. }
  115. )
  116. const treeitem = screen.getByRole('button', { name: 'main.tex' })
  117. fireEvent.contextMenu(treeitem)
  118. expect(screen.queryByRole('menu')).to.not.exist
  119. })
  120. })