welcome-message.test.tsx 5.1 KB

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