new-project-button.test.tsx 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import { render, fireEvent, screen } from '@testing-library/react'
  2. import { expect } from 'chai'
  3. import NewProjectButton from '../../../../../frontend/js/features/project-list/components/new-project-button'
  4. describe('<NewProjectButton />', function () {
  5. beforeEach(function () {
  6. window.metaAttributesCache.set('ol-ExposedSettings', {
  7. templateLinks: [
  8. {
  9. name: 'Academic Journal',
  10. url: '/gallery/tagged/academic-journal',
  11. },
  12. {
  13. name: 'View All',
  14. url: '/latex/templates',
  15. },
  16. ],
  17. })
  18. render(<NewProjectButton />)
  19. const newProjectButton = screen.getByRole('button', {
  20. name: 'New Project',
  21. })
  22. fireEvent.click(newProjectButton)
  23. })
  24. afterEach(function () {
  25. window.metaAttributesCache = new Map()
  26. })
  27. it('opens a dropdown', function () {
  28. // static menu
  29. screen.getByText('Blank Project')
  30. screen.getByText('Example Project')
  31. screen.getByText('Upload Project')
  32. screen.getByText('Import from GitHub')
  33. // static text
  34. screen.getByText('Templates')
  35. // dynamic menu based on templateLinks
  36. screen.getByText('Academic Journal')
  37. screen.getByText('View All')
  38. })
  39. it('open new project modal when clicking at Blank Project', function () {
  40. fireEvent.click(screen.getByRole('menuitem', { name: 'Blank Project' }))
  41. screen.getByPlaceholderText('Project Name')
  42. })
  43. it('open new project modal when clicking at Example Project', function () {
  44. fireEvent.click(screen.getByRole('menuitem', { name: 'Example Project' }))
  45. screen.getByPlaceholderText('Project Name')
  46. })
  47. it('close the new project modal when clicking at the top right "x" button', function () {
  48. fireEvent.click(screen.getByRole('menuitem', { name: 'Blank Project' }))
  49. fireEvent.click(screen.getByRole('button', { name: 'Close' }))
  50. expect(screen.queryByRole('dialog')).to.be.null
  51. })
  52. it('close the new project modal when clicking at the Cancel button', function () {
  53. fireEvent.click(screen.getByRole('menuitem', { name: 'Blank Project' }))
  54. fireEvent.click(screen.getByRole('button', { name: 'Cancel' }))
  55. expect(screen.queryByRole('dialog')).to.be.null
  56. })
  57. })