start-free-trial-button.spec.tsx 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. import StartFreeTrialButton from '../../../../frontend/js/shared/components/start-free-trial-button'
  2. import getMeta from '@/utils/meta'
  3. import { SplitTestProvider } from '@/shared/context/split-test-context'
  4. describe('start free trial button', function () {
  5. beforeEach(function () {
  6. cy.intercept('POST', '/event/paywall-prompt', {
  7. statusCode: 204,
  8. }).as('event-paywall-prompt')
  9. cy.intercept('POST', '/event/paywall-click', {
  10. statusCode: 204,
  11. }).as('event-paywall-click')
  12. getMeta('ol-ExposedSettings').isOverleaf = true
  13. })
  14. it('renders the button with default text', function () {
  15. cy.mount(
  16. <SplitTestProvider>
  17. <StartFreeTrialButton source="cypress-test" />
  18. </SplitTestProvider>
  19. )
  20. cy.wait('@event-paywall-prompt')
  21. .its('request.body.paywall-type')
  22. .should('eq', 'cypress-test')
  23. cy.get('button').contains('Start Free Trial!')
  24. })
  25. it('renders the button with custom text', function () {
  26. cy.mount(
  27. <SplitTestProvider>
  28. <StartFreeTrialButton source="cypress-test">
  29. Some Custom Text
  30. </StartFreeTrialButton>
  31. </SplitTestProvider>
  32. )
  33. cy.wait('@event-paywall-prompt')
  34. .its('request.body.paywall-type')
  35. .should('eq', 'cypress-test')
  36. cy.get('button').contains('Some Custom Text')
  37. })
  38. it('renders the button with styled button', function () {
  39. cy.mount(
  40. <SplitTestProvider>
  41. <StartFreeTrialButton
  42. source="cypress-test"
  43. buttonProps={{
  44. variant: 'danger',
  45. size: 'lg',
  46. }}
  47. />
  48. </SplitTestProvider>
  49. )
  50. cy.wait('@event-paywall-prompt')
  51. cy.get('button.btn.btn-danger.btn-lg').contains('Start Free Trial!')
  52. })
  53. it('renders the button with custom class', function () {
  54. cy.mount(
  55. <SplitTestProvider>
  56. <StartFreeTrialButton
  57. source="cypress-test"
  58. buttonProps={{ className: 'ct-test-class' }}
  59. />
  60. </SplitTestProvider>
  61. )
  62. cy.wait('@event-paywall-prompt')
  63. .its('request.body.paywall-type')
  64. .should('eq', 'cypress-test')
  65. cy.get('.ct-test-class').contains('Start Free Trial!')
  66. })
  67. it('calls onClick callback and opens a new tab to the subscription page on click', function () {
  68. const onClickStub = cy.stub()
  69. cy.mount(
  70. <SplitTestProvider>
  71. <StartFreeTrialButton source="cypress-test" handleClick={onClickStub} />
  72. </SplitTestProvider>
  73. )
  74. cy.wait('@event-paywall-prompt')
  75. cy.window().then(win => {
  76. cy.stub(win, 'open').as('Open')
  77. })
  78. cy.get('button.btn').contains('Start Free Trial!').click()
  79. cy.wrap(null).then(() => {
  80. cy.wait('@event-paywall-click')
  81. .its('request.body.paywall-type')
  82. .should('eq', 'cypress-test')
  83. cy.get('@Open').should(
  84. 'have.been.calledOnceWithExactly',
  85. '/user/subscription/choose-your-plan?itm_campaign=cypress-test'
  86. )
  87. expect(onClickStub).to.be.called
  88. })
  89. })
  90. })