new-project-button.test.tsx 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  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. describe('for every user (affiliated and non-affiliated)', function () {
  6. beforeEach(function () {
  7. window.metaAttributesCache.set('ol-ExposedSettings', {
  8. templateLinks: [
  9. {
  10. name: 'Academic Journal',
  11. url: '/gallery/tagged/academic-journal',
  12. },
  13. {
  14. name: 'View All',
  15. url: '/latex/templates',
  16. },
  17. ],
  18. })
  19. render(<NewProjectButton id="test" />)
  20. const newProjectButton = screen.getByRole('button', {
  21. name: 'New Project',
  22. })
  23. fireEvent.click(newProjectButton)
  24. })
  25. afterEach(function () {
  26. window.metaAttributesCache = new Map()
  27. })
  28. it('shows the correct dropdown menu', function () {
  29. // static menu
  30. screen.getByText('Blank Project')
  31. screen.getByText('Example Project')
  32. screen.getByText('Upload Project')
  33. screen.getByText('Import from GitHub')
  34. // static text
  35. screen.getByText('Templates')
  36. // dynamic menu based on templateLinks
  37. screen.getByText('Academic Journal')
  38. screen.getByText('View All')
  39. })
  40. it('open new project modal when clicking at Blank Project', function () {
  41. fireEvent.click(screen.getByRole('menuitem', { name: 'Blank Project' }))
  42. screen.getByPlaceholderText('Project Name')
  43. })
  44. it('open new project modal when clicking at Example Project', function () {
  45. fireEvent.click(screen.getByRole('menuitem', { name: 'Example Project' }))
  46. screen.getByPlaceholderText('Project Name')
  47. })
  48. it('close the new project modal when clicking at the top right "x" button', function () {
  49. fireEvent.click(screen.getByRole('menuitem', { name: 'Blank Project' }))
  50. fireEvent.click(screen.getByRole('button', { name: 'Close' }))
  51. expect(screen.queryByRole('dialog')).to.be.null
  52. })
  53. it('close the new project modal when clicking at the Cancel button', function () {
  54. fireEvent.click(screen.getByRole('menuitem', { name: 'Blank Project' }))
  55. fireEvent.click(screen.getByRole('button', { name: 'Cancel' }))
  56. expect(screen.queryByRole('dialog')).to.be.null
  57. })
  58. })
  59. describe('for affiliated user with custom templates', function () {
  60. beforeEach(function () {
  61. window.metaAttributesCache.set('ol-ExposedSettings', {
  62. templateLinks: [
  63. {
  64. name: 'Academic Journal',
  65. url: '/gallery/tagged/academic-journal',
  66. },
  67. {
  68. name: 'View All',
  69. url: '/latex/templates',
  70. },
  71. ],
  72. })
  73. window.metaAttributesCache.set('ol-portalTemplates', [
  74. {
  75. name: 'Affiliation 1',
  76. url: '/edu/test-new-template',
  77. },
  78. ])
  79. })
  80. afterEach(function () {
  81. window.metaAttributesCache = new Map()
  82. })
  83. it('shows the correct dropdown menu', function () {
  84. render(<NewProjectButton id="test" />)
  85. const newProjectButton = screen.getByRole('button', {
  86. name: 'New Project',
  87. })
  88. fireEvent.click(newProjectButton)
  89. // static menu
  90. screen.getByText('Blank Project')
  91. screen.getByText('Example Project')
  92. screen.getByText('Upload Project')
  93. screen.getByText('Import from GitHub')
  94. // static text for institution templates
  95. screen.getByText('Institution Templates')
  96. // dynamic menu based on portalTemplates
  97. const affiliationTemplate = screen.getByRole('menuitem', {
  98. name: 'Affiliation 1',
  99. })
  100. expect(affiliationTemplate.getAttribute('href')).to.equal(
  101. '/edu/test-new-template#templates'
  102. )
  103. // static text
  104. screen.getByText('Templates')
  105. // dynamic menu based on templateLinks
  106. screen.getByText('Academic Journal')
  107. screen.getByText('View All')
  108. })
  109. })
  110. })