file-tree-item-inner.test.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import { expect } from 'chai'
  2. import sinon from 'sinon'
  3. import { screen, fireEvent } from '@testing-library/react'
  4. import renderWithContext from '../../helpers/render-with-context'
  5. import FileTreeitemInner from '../../../../../../frontend/js/features/file-tree/components/file-tree-item/file-tree-item-inner'
  6. import FileTreeContextMenu from '../../../../../../frontend/js/features/file-tree/components/file-tree-context-menu'
  7. describe('<FileTreeitemInner />', function () {
  8. const setContextMenuCoords = sinon.stub()
  9. afterEach(function () {
  10. setContextMenuCoords.reset()
  11. })
  12. describe('menu', function () {
  13. it('does not display if file is not selected', function () {
  14. renderWithContext(
  15. <FileTreeitemInner id="123abc" name="bar.tex" isSelected={false} />,
  16. {}
  17. )
  18. expect(screen.queryByRole('menu', { visible: false })).to.not.exist
  19. })
  20. })
  21. describe('context menu', function () {
  22. it('does not display without write permissions', function () {
  23. const { container } = renderWithContext(
  24. <>
  25. <FileTreeitemInner id="123abc" name="bar.tex" isSelected />
  26. <FileTreeContextMenu />
  27. </>,
  28. {
  29. contextProps: { permissionsLevel: 'readOnly' },
  30. }
  31. )
  32. const entityElement = container.querySelector('div.entity')
  33. fireEvent.contextMenu(entityElement)
  34. expect(screen.queryByRole('menu')).to.not.exist
  35. })
  36. it('open / close', function () {
  37. const { container } = renderWithContext(
  38. <>
  39. <FileTreeitemInner id="123abc" name="bar.tex" isSelected />
  40. <FileTreeContextMenu />
  41. </>
  42. )
  43. expect(screen.queryByRole('menu')).to.be.null
  44. // open the context menu
  45. const entityElement = container.querySelector('div.entity')
  46. fireEvent.contextMenu(entityElement)
  47. screen.getByRole('menu', { visible: true })
  48. // close the context menu
  49. fireEvent.click(entityElement)
  50. expect(screen.queryByRole('menu')).to.be.null
  51. })
  52. })
  53. describe('name', function () {
  54. it('renders name', function () {
  55. renderWithContext(
  56. <FileTreeitemInner id="123abc" name="bar.tex" isSelected />
  57. )
  58. screen.getByRole('button', { name: 'bar.tex' })
  59. expect(screen.queryByRole('textbox')).to.not.exist
  60. })
  61. it('starts rename on menu item click', function () {
  62. renderWithContext(
  63. <>
  64. <FileTreeitemInner id="123abc" name="bar.tex" isSelected />
  65. <FileTreeContextMenu />
  66. </>,
  67. {
  68. contextProps: {
  69. rootDocId: '123abc',
  70. rootFolder: [
  71. {
  72. _id: 'root-folder-id',
  73. name: 'rootFolder',
  74. docs: [{ _id: '123abc', name: 'bar.tex' }],
  75. folders: [],
  76. fileRefs: [],
  77. },
  78. ],
  79. },
  80. }
  81. )
  82. const toggleButton = screen.getByRole('button', { name: 'Menu' })
  83. fireEvent.click(toggleButton)
  84. const renameButton = screen.getByRole('menuitem', { name: 'Rename' })
  85. fireEvent.click(renameButton)
  86. expect(screen.queryByRole('button', { name: 'bar.tex' })).to.not.exist
  87. screen.getByRole('textbox')
  88. })
  89. })
  90. })