root.test.tsx 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import { expect } from 'chai'
  2. import sinon from 'sinon'
  3. import { screen, render, waitFor } from '@testing-library/react'
  4. import * as eventTracking from '@/infrastructure/event-tracking'
  5. import SettingsPageRoot from '../../../../../frontend/js/features/settings/components/root'
  6. import getMeta from '@/utils/meta'
  7. describe('<SettingsPageRoot />', function () {
  8. let sendMBSpy: sinon.SinonSpy
  9. beforeEach(function () {
  10. window.metaAttributesCache.set('ol-usersEmail', 'foo@bar.com')
  11. Object.assign(getMeta('ol-ExposedSettings'), { isOverleaf: true })
  12. window.metaAttributesCache.set('ol-hasPassword', true)
  13. Object.assign(getMeta('ol-ExposedSettings'), {
  14. hasAffiliationsFeature: true,
  15. isOverleaf: true,
  16. })
  17. window.metaAttributesCache.set('ol-user', {
  18. features: { github: true, dropbox: true, mendeley: true, zotero: true },
  19. refProviders: {
  20. mendeley: true,
  21. zotero: true,
  22. },
  23. })
  24. window.metaAttributesCache.set('ol-github', { enabled: true })
  25. window.metaAttributesCache.set('ol-dropbox', { registered: true })
  26. window.metaAttributesCache.set('ol-oauthProviders', {})
  27. sendMBSpy = sinon.spy(eventTracking, 'sendMB')
  28. })
  29. afterEach(function () {
  30. sendMBSpy.restore()
  31. })
  32. it('displays page for Overleaf', async function () {
  33. render(<SettingsPageRoot />)
  34. await waitFor(() => {
  35. screen.getByText('Account settings')
  36. })
  37. screen.getByText('Emails and affiliations')
  38. screen.getByText('Update account info')
  39. screen.getByText('Change password')
  40. screen.getByText('Overleaf beta program')
  41. screen.getByText('Sessions')
  42. screen.getByText('Newsletter')
  43. screen.getByRole('button', {
  44. name: 'Delete your account',
  45. })
  46. })
  47. it('displays page for non-Overleaf', async function () {
  48. Object.assign(getMeta('ol-ExposedSettings'), {
  49. hasAffiliationsFeature: false,
  50. isOverleaf: false,
  51. })
  52. render(<SettingsPageRoot />)
  53. await waitFor(() => {
  54. screen.getByText('Account settings')
  55. })
  56. expect(screen.queryByText('Emails and affiliations')).to.not.exist
  57. screen.getByText('Update account info')
  58. screen.getByText('Change password')
  59. expect(screen.queryByText('Overleaf beta program')).to.not.exist
  60. screen.getByText('Sessions')
  61. expect(screen.queryByText('Newsletter')).to.not.exist
  62. expect(
  63. screen.queryByRole('button', {
  64. name: 'Delete your account',
  65. })
  66. ).to.not.exist
  67. })
  68. it('sends tracking event on load', async function () {
  69. render(<SettingsPageRoot />)
  70. sinon.assert.calledOnce(sendMBSpy)
  71. sinon.assert.calledWith(sendMBSpy, 'settings-view')
  72. })
  73. })