welcome-message.test.tsx 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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. describe('<WelcomeMessage />', function () {
  5. afterEach(function () {
  6. window.metaAttributesCache = new Map()
  7. })
  8. it('renders welcome page correctly', function () {
  9. render(<WelcomeMessage />)
  10. screen.getByText('Welcome to Overleaf')
  11. screen.getByText('Create a new project')
  12. screen.getByText('Learn LaTeX with a tutorial')
  13. screen.getByText('Browse templates')
  14. })
  15. it('shows correct dropdown when clicking create a new project', function () {
  16. render(<WelcomeMessage />)
  17. const button = screen.getByRole('button', {
  18. name: 'Create a new project',
  19. })
  20. fireEvent.click(button)
  21. screen.getByText('Blank Project')
  22. screen.getByText('Example Project')
  23. screen.getByText('Upload Project')
  24. screen.getByText('Import from GitHub')
  25. })
  26. it('show the correct dropdown menu for affiliated users', function () {
  27. window.metaAttributesCache.set('ol-portalTemplates', [
  28. {
  29. name: 'Affiliation 1',
  30. url: '/edu/test-new-template',
  31. },
  32. ])
  33. render(<WelcomeMessage />)
  34. const button = screen.getByRole('button', {
  35. name: 'Create a new project',
  36. })
  37. fireEvent.click(button)
  38. // static menu
  39. screen.getByText('Blank Project')
  40. screen.getByText('Example Project')
  41. screen.getByText('Upload Project')
  42. screen.getByText('Import from GitHub')
  43. // static text for institution templates
  44. screen.getByText('Institution Templates')
  45. // dynamic menu based on portalTemplates
  46. const affiliationTemplate = screen.getByRole('link', {
  47. name: 'Affiliation 1',
  48. })
  49. expect(affiliationTemplate.getAttribute('href')).to.equal(
  50. '/edu/test-new-template#templates'
  51. )
  52. })
  53. it('shows correct dropdown when clicking create a new project with a portal template', function () {
  54. render(<WelcomeMessage />)
  55. const button = screen.getByRole('button', {
  56. name: 'Create a new project',
  57. })
  58. fireEvent.click(button)
  59. screen.getByText('Blank Project')
  60. screen.getByText('Example Project')
  61. screen.getByText('Upload Project')
  62. screen.getByText('Import from GitHub')
  63. })
  64. it('shows correct link for latex tutorial menu', function () {
  65. render(<WelcomeMessage />)
  66. const link = screen.getByRole('link', {
  67. name: 'Learn LaTeX with a tutorial',
  68. })
  69. expect(link.getAttribute('href')).to.equal(
  70. '/learn/latex/Learn_LaTeX_in_30_minutes'
  71. )
  72. })
  73. it('shows correct link for browse templates menu', function () {
  74. render(<WelcomeMessage />)
  75. const link = screen.getByRole('link', {
  76. name: 'Browse templates',
  77. })
  78. expect(link.getAttribute('href')).to.equal('/templates')
  79. })
  80. })