welcome-message.test.tsx 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. import { fireEvent, render, screen } from '@testing-library/react'
  2. import WelcomeMessage from '../../../../../frontend/js/features/project-list/components/welcome-message'
  3. import { expect } from 'chai'
  4. import getMeta from '@/utils/meta'
  5. describe('<WelcomeMessage />', function () {
  6. beforeEach(function () {
  7. Object.assign(getMeta('ol-ExposedSettings'), {
  8. isOverleaf: true,
  9. wikiEnabled: true,
  10. templatesEnabled: true,
  11. })
  12. })
  13. it('renders welcome page correctly', function () {
  14. render(<WelcomeMessage />)
  15. screen.getByText('Welcome to Overleaf')
  16. screen.getByText('Create a new project')
  17. screen.getByText('Learn LaTeX with a tutorial')
  18. screen.getByText('Browse templates')
  19. })
  20. it('shows correct dropdown when clicking create a new project', function () {
  21. render(<WelcomeMessage />)
  22. const button = screen.getByRole('button', {
  23. name: 'Create a new project',
  24. })
  25. fireEvent.click(button)
  26. screen.getByText('Blank Project')
  27. screen.getByText('Example Project')
  28. screen.getByText('Upload Project')
  29. screen.getByText('Import from GitHub')
  30. })
  31. it('show the correct dropdown menu for affiliated users', function () {
  32. window.metaAttributesCache.set('ol-portalTemplates', [
  33. {
  34. name: 'Affiliation 1',
  35. url: '/edu/test-new-template',
  36. },
  37. ])
  38. render(<WelcomeMessage />)
  39. const button = screen.getByRole('button', {
  40. name: 'Create a new project',
  41. })
  42. fireEvent.click(button)
  43. // static menu
  44. screen.getByText('Blank Project')
  45. screen.getByText('Example Project')
  46. screen.getByText('Upload Project')
  47. screen.getByText('Import from GitHub')
  48. // static text for institution templates
  49. screen.getByText('Institution Templates')
  50. // dynamic menu based on portalTemplates
  51. const affiliationTemplate = screen.getByRole('menuitem', {
  52. name: 'Affiliation 1',
  53. })
  54. expect(affiliationTemplate.getAttribute('href')).to.equal(
  55. '/edu/test-new-template#templates'
  56. )
  57. })
  58. it('shows correct dropdown when clicking create a new project with a portal template', function () {
  59. render(<WelcomeMessage />)
  60. const button = screen.getByRole('button', {
  61. name: 'Create a new project',
  62. })
  63. fireEvent.click(button)
  64. screen.getByText('Blank Project')
  65. screen.getByText('Example Project')
  66. screen.getByText('Upload Project')
  67. screen.getByText('Import from GitHub')
  68. })
  69. it('shows correct link for latex tutorial menu', function () {
  70. render(<WelcomeMessage />)
  71. const link = screen.getByRole('link', {
  72. name: 'Learn LaTeX with a tutorial',
  73. })
  74. expect(link.getAttribute('href')).to.equal(
  75. '/learn/latex/Learn_LaTeX_in_30_minutes'
  76. )
  77. })
  78. it('shows correct link for browse templates menu', function () {
  79. render(<WelcomeMessage />)
  80. const link = screen.getByRole('link', {
  81. name: 'Browse templates',
  82. })
  83. expect(link.getAttribute('href')).to.equal('/templates')
  84. })
  85. describe('when not in SaaS', function () {
  86. beforeEach(function () {
  87. getMeta('ol-ExposedSettings').isOverleaf = false
  88. })
  89. it('renders welcome page correctly', function () {
  90. render(<WelcomeMessage />)
  91. screen.getByText('Welcome to Overleaf')
  92. screen.getByText('Create a new project')
  93. screen.getByText('Learn LaTeX with a tutorial')
  94. screen.getByText('Browse templates')
  95. })
  96. it("doesn't display github in the dropdown when clicking create a new project", function () {
  97. render(<WelcomeMessage />)
  98. const button = screen.getByRole('button', {
  99. name: 'Create a new project',
  100. })
  101. fireEvent.click(button)
  102. screen.getByText('Blank Project')
  103. screen.getByText('Example Project')
  104. screen.getByText('Upload Project')
  105. expect(screen.queryByText('Import from GitHub')).to.not.exist
  106. })
  107. it('does not render the tutorial link when the learn wiki is not configured', function () {
  108. getMeta('ol-ExposedSettings').wikiEnabled = false
  109. render(<WelcomeMessage />)
  110. expect(screen.queryByText('Learn LaTeX with a tutorial')).to.not.exist
  111. })
  112. it('does not render the templates link when templates are not configured', function () {
  113. getMeta('ol-ExposedSettings').templatesEnabled = false
  114. render(<WelcomeMessage />)
  115. expect(screen.queryByText('Browse templates')).to.not.exist
  116. })
  117. })
  118. })