welcome-message.test.tsx 4.5 KB

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