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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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 custom text', function () {
  15. cy.mount(
  16. <SplitTestProvider>
  17. <StartFreeTrialButton source="cypress-test">
  18. Some Custom Text
  19. </StartFreeTrialButton>
  20. </SplitTestProvider>
  21. )
  22. cy.wait('@event-paywall-prompt')
  23. .its('request.body.paywall-type')
  24. .should('eq', 'cypress-test')
  25. cy.get('button').contains('Some Custom Text')
  26. })
  27. it('renders the button with styled button', function () {
  28. cy.mount(
  29. <SplitTestProvider>
  30. <StartFreeTrialButton
  31. source="cypress-test"
  32. buttonProps={{
  33. variant: 'danger',
  34. size: 'lg',
  35. }}
  36. >
  37. Start free trial
  38. </StartFreeTrialButton>
  39. </SplitTestProvider>
  40. )
  41. cy.wait('@event-paywall-prompt')
  42. cy.get('button.btn.btn-danger.btn-lg').contains('Start free trial')
  43. })
  44. it('renders the button with custom class', function () {
  45. cy.mount(
  46. <SplitTestProvider>
  47. <StartFreeTrialButton
  48. source="cypress-test"
  49. buttonProps={{ className: 'ct-test-class' }}
  50. >
  51. Start free trial
  52. </StartFreeTrialButton>
  53. </SplitTestProvider>
  54. )
  55. cy.wait('@event-paywall-prompt')
  56. .its('request.body.paywall-type')
  57. .should('eq', 'cypress-test')
  58. cy.get('.ct-test-class').contains('Start free trial')
  59. })
  60. it('calls onClick callback and opens a new tab to the subscription page on click', function () {
  61. const onClickStub = cy.stub()
  62. cy.mount(
  63. <SplitTestProvider>
  64. <StartFreeTrialButton source="cypress-test" handleClick={onClickStub}>
  65. Start free trial
  66. </StartFreeTrialButton>
  67. </SplitTestProvider>
  68. )
  69. cy.wait('@event-paywall-prompt')
  70. cy.window().then(win => {
  71. cy.stub(win, 'open').as('Open')
  72. })
  73. cy.get('button.btn').contains('Start free trial').click()
  74. cy.wrap(null).then(() => {
  75. cy.wait('@event-paywall-click')
  76. .its('request.body.paywall-type')
  77. .should('eq', 'cypress-test')
  78. cy.get('@Open').should(
  79. 'have.been.calledOnceWithExactly',
  80. '/user/subscription/choose-your-plan?itm_campaign=cypress-test&paywall-type=cypress-test'
  81. )
  82. expect(onClickStub).to.be.called
  83. })
  84. })
  85. })