root.test.tsx 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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('Integrations')
  41. screen.getByText('Overleaf Beta Program')
  42. screen.getByText('Sessions')
  43. screen.getByText('Newsletter')
  44. screen.getByRole('button', {
  45. name: 'Delete your account',
  46. })
  47. })
  48. it('displays page for non-Overleaf', async function () {
  49. Object.assign(getMeta('ol-ExposedSettings'), {
  50. hasAffiliationsFeature: false,
  51. isOverleaf: false,
  52. })
  53. render(<SettingsPageRoot />)
  54. await waitFor(() => {
  55. screen.getByText('Account Settings')
  56. })
  57. expect(screen.queryByText('Emails and Affiliations')).to.not.exist
  58. screen.getByText('Update Account Info')
  59. screen.getByText('Change Password')
  60. screen.getByText('Integrations')
  61. expect(screen.queryByText('Overleaf Beta Program')).to.not.exist
  62. screen.getByText('Sessions')
  63. expect(screen.queryByText('Newsletter')).to.not.exist
  64. expect(
  65. screen.queryByRole('button', {
  66. name: 'Delete your account',
  67. })
  68. ).to.not.exist
  69. })
  70. it('sends tracking event on load', async function () {
  71. render(<SettingsPageRoot />)
  72. sinon.assert.calledOnce(sendMBSpy)
  73. sinon.assert.calledWith(sendMBSpy, 'settings-view')
  74. })
  75. })