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

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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. beforeEach(function () {
  10. global.requestAnimationFrame = sinon.stub()
  11. })
  12. afterEach(function () {
  13. setContextMenuCoords.reset()
  14. delete global.requestAnimationFrame
  15. })
  16. describe('menu', function () {
  17. it('does not display if file is not selected', function () {
  18. renderWithContext(
  19. <FileTreeitemInner id="123abc" name="bar.tex" isSelected={false} />,
  20. {}
  21. )
  22. expect(screen.queryByRole('menu', { visible: false })).to.not.exist
  23. })
  24. })
  25. describe('context menu', function () {
  26. it('does not display without write permissions', function () {
  27. renderWithContext(
  28. <FileTreeitemInner id="123abc" name="bar.tex" isSelected />,
  29. { contextProps: { hasWritePermissions: false } }
  30. )
  31. expect(screen.queryByRole('menu', { visible: false })).to.not.exist
  32. })
  33. it('open / close', function () {
  34. const { container } = renderWithContext(
  35. <>
  36. <FileTreeitemInner id="123abc" name="bar.tex" isSelected />
  37. <FileTreeContextMenu />
  38. </>
  39. )
  40. expect(screen.queryByRole('menu')).to.be.null
  41. // open the context menu
  42. const entityElement = container.querySelector('div.entity')
  43. fireEvent.contextMenu(entityElement)
  44. screen.getByRole('menu', { visible: true })
  45. // close the context menu
  46. fireEvent.click(entityElement)
  47. expect(screen.queryByRole('menu')).to.be.null
  48. })
  49. })
  50. describe('name', function () {
  51. it('renders name', function () {
  52. renderWithContext(
  53. <FileTreeitemInner id="123abc" name="bar.tex" isSelected />
  54. )
  55. screen.getByRole('button', { name: 'bar.tex' })
  56. expect(screen.queryByRole('textbox')).to.not.exist
  57. })
  58. it('starts rename on menu item click', function () {
  59. renderWithContext(
  60. <FileTreeitemInner id="123abc" name="bar.tex" isSelected />,
  61. {
  62. contextProps: {
  63. rootDocId: '123abc',
  64. rootFolder: [
  65. {
  66. _id: 'root-folder-id',
  67. docs: [{ _id: '123abc', name: 'bar.tex' }],
  68. folders: [],
  69. fileRefs: [],
  70. },
  71. ],
  72. },
  73. }
  74. )
  75. const toggleButton = screen.getByRole('button', { name: 'Menu' })
  76. fireEvent.click(toggleButton)
  77. const renameButton = screen.getByRole('menuitem', { name: 'Rename' })
  78. fireEvent.click(renameButton)
  79. expect(screen.queryByRole('button', { name: 'bar.tex' })).to.not.exist
  80. screen.getByRole('textbox')
  81. })
  82. })
  83. })