paywall-upgrade-button.test.tsx 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import { expect } from 'chai'
  2. import sinon from 'sinon'
  3. import { screen, render } from '@testing-library/react'
  4. import userEvent from '@testing-library/user-event'
  5. import PaywallUpgradeButton from '../../../../frontend/js/shared/components/paywall-upgrade-button'
  6. import * as eventTracking from '@/infrastructure/event-tracking'
  7. describe('<PaywallUpgradeButton />', function () {
  8. let sendMBSpy: sinon.SinonSpy
  9. beforeEach(function () {
  10. sendMBSpy = sinon.spy(eventTracking, 'sendMB')
  11. window.metaAttributesCache.set('ol-user', { hasPaidSubscription: false })
  12. })
  13. afterEach(function () {
  14. sendMBSpy.restore()
  15. })
  16. it('upgrade link has required attributes', function () {
  17. render(<PaywallUpgradeButton referrer="ai" paywallType="assistant" />)
  18. const upgradeLink = screen.getByRole('link', { name: 'Upgrade' })
  19. expect(upgradeLink.getAttribute('href')).to.equal(
  20. '/user/subscription/choose-your-plan?itm_referrer=ai&itm_campaign=assistant&paywall-type=assistant'
  21. )
  22. expect(upgradeLink.getAttribute('target')).to.equal('_blank')
  23. expect(upgradeLink.getAttribute('rel')).to.equal('noreferrer')
  24. })
  25. it('sends paywall-click with standalone upgradeType for users without a paid subscription', async function () {
  26. render(<PaywallUpgradeButton referrer="ai" paywallType="assistant" />)
  27. await userEvent.click(screen.getByRole('link', { name: 'Upgrade' }))
  28. expect(sendMBSpy).to.have.been.calledOnceWith(
  29. 'paywall-click',
  30. sinon.match({
  31. upgradeType: 'standalone',
  32. 'paywall-type': 'assistant',
  33. })
  34. )
  35. })
  36. it('sends paywall-click with add-on upgradeType for users with a paid subscription', async function () {
  37. window.metaAttributesCache.set('ol-user', { hasPaidSubscription: true })
  38. render(<PaywallUpgradeButton referrer="ai" paywallType="workbench" />)
  39. await userEvent.click(screen.getByRole('link', { name: 'Upgrade' }))
  40. expect(sendMBSpy).to.have.been.calledOnceWith(
  41. 'paywall-click',
  42. sinon.match({
  43. upgradeType: 'add-on',
  44. 'paywall-type': 'workbench',
  45. })
  46. )
  47. })
  48. })