context-menu.test.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import { expect } from 'chai'
  2. import React from 'react'
  3. import sinon from 'sinon'
  4. import { screen, render, fireEvent } from '@testing-library/react'
  5. import FileTreeRoot from '../../../../../frontend/js/features/file-tree/components/file-tree-root'
  6. describe('FileTree Context Menu Flow', function() {
  7. const onSelect = sinon.stub()
  8. const onInit = sinon.stub()
  9. it('opens on contextMenu event', async function() {
  10. const rootFolder = [
  11. {
  12. _id: 'root-folder-id',
  13. docs: [{ _id: '456def', name: 'main.tex' }],
  14. folders: [],
  15. fileRefs: []
  16. }
  17. ]
  18. render(
  19. <FileTreeRoot
  20. rootFolder={rootFolder}
  21. projectId="123abc"
  22. hasWritePermissions
  23. rootDocId="456def"
  24. onSelect={onSelect}
  25. onInit={onInit}
  26. isConnected
  27. />
  28. )
  29. const treeitem = screen.getByRole('button', { name: 'main.tex' })
  30. expect(screen.getAllByRole('menu').length).to.equal(1) // toolbar
  31. fireEvent.contextMenu(treeitem)
  32. expect(screen.getAllByRole('menu').length).to.equal(2) // toolbar + menu
  33. })
  34. it("doesn't open in read only mode", async function() {
  35. const rootFolder = [
  36. {
  37. _id: 'root-folder-id',
  38. docs: [{ _id: '456def', name: 'main.tex' }],
  39. folders: [],
  40. fileRefs: []
  41. }
  42. ]
  43. render(
  44. <FileTreeRoot
  45. rootFolder={rootFolder}
  46. projectId="123abc"
  47. hasWritePermissions={false}
  48. rootDocId="456def"
  49. onSelect={onSelect}
  50. onInit={onInit}
  51. isConnected
  52. />
  53. )
  54. const treeitem = screen.getByRole('button', { name: 'main.tex' })
  55. fireEvent.contextMenu(treeitem)
  56. expect(screen.queryByRole('menu')).to.not.exist
  57. })
  58. })