diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-02-01 00:14:51 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-02-01 00:14:51 +0300 |
commit | f2ed38a6b50ee59ce280a3e7d5125b3a35c5f17e (patch) | |
tree | 5f91d58f1d458f629f8125d9516f131ff08c4a67 /spec/frontend/google_tag_manager | |
parent | 634e9bccc65592100a40849912fe7bb0a52e1b24 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/frontend/google_tag_manager')
-rw-r--r-- | spec/frontend/google_tag_manager/index_spec.js | 120 |
1 files changed, 100 insertions, 20 deletions
diff --git a/spec/frontend/google_tag_manager/index_spec.js b/spec/frontend/google_tag_manager/index_spec.js index 7c269d59dc6..6f1a14078c1 100644 --- a/spec/frontend/google_tag_manager/index_spec.js +++ b/spec/frontend/google_tag_manager/index_spec.js @@ -1,4 +1,5 @@ import { merge } from 'lodash'; +import { v4 as uuidv4 } from 'uuid'; import { trackFreeTrialAccountSubmissions, trackNewRegistrations, @@ -9,11 +10,13 @@ import { trackSaasTrialProjectImport, trackSaasTrialGetStarted, trackCheckout, + trackTransaction, } from '~/google_tag_manager'; import { setHTMLFixture } from 'helpers/fixtures'; import { logError } from '~/lib/logger'; jest.mock('~/lib/logger'); +jest.mock('uuid'); describe('~/google_tag_manager/index', () => { let spy; @@ -217,28 +220,29 @@ describe('~/google_tag_manager/index', () => { trackCheckout('2c92a00d76f0d5060176f2fb0a5029ff', 1); - expect(spy).toHaveBeenCalledTimes(2); - expect(spy).toHaveBeenCalledWith({ ecommerce: null }); - expect(spy).toHaveBeenCalledWith({ - event: 'EECCheckout', - currencyCode: 'USD', - ecommerce: { - checkout: { - actionField: { step: 1 }, - products: [ - { - brand: 'GitLab', - category: 'DevOps', - id: '0002', - name: 'Premium', - price: 228, - quantity: 1, - variant: 'SaaS', - }, - ], + expect(spy.mock.calls.flatMap((x) => x)).toEqual([ + { ecommerce: null }, + { + event: 'EECCheckout', + currencyCode: 'USD', + ecommerce: { + checkout: { + actionField: { step: 1 }, + products: [ + { + brand: 'GitLab', + category: 'DevOps', + id: '0002', + name: 'Premium', + price: 228, + quantity: 1, + variant: 'SaaS', + }, + ], + }, }, }, - }); + ]); }); it('with selectedPlan: 2c92a0ff76f0d5250176f2f8c86f305a', () => { @@ -307,6 +311,82 @@ describe('~/google_tag_manager/index', () => { }); }); }); + + describe('when trackTransactions is invoked', () => { + describe.each([ + { + selectedPlan: '2c92a00d76f0d5060176f2fb0a5029ff', + revenue: 228, + name: 'Premium', + id: '0002', + }, + { + selectedPlan: '2c92a0ff76f0d5250176f2f8c86f305a', + revenue: 1188, + name: 'Ultimate', + id: '0001', + }, + ])('with %o', (planObject) => { + it('invokes pushes a new event that references the selected plan', () => { + const { selectedPlan, revenue, name, id } = planObject; + + expect(spy).not.toHaveBeenCalled(); + uuidv4.mockImplementationOnce(() => '123'); + + const transactionDetails = { + paymentOption: 'visa', + revenue, + tax: 10, + selectedPlan, + quantity: 1, + }; + + trackTransaction(transactionDetails); + + expect(spy.mock.calls.flatMap((x) => x)).toEqual([ + { ecommerce: null }, + { + event: 'EECtransactionSuccess', + currencyCode: 'USD', + ecommerce: { + purchase: { + actionField: { + id: '123', + affiliation: 'GitLab', + option: 'visa', + revenue, + tax: 10, + }, + products: [ + { + brand: 'GitLab', + category: 'DevOps', + id, + name, + price: revenue, + quantity: 1, + variant: 'SaaS', + }, + ], + }, + }, + }, + ]); + }); + }); + }); + + describe('when trackTransaction is invoked', () => { + describe('with an invalid plan object', () => { + it('does not get called', () => { + expect(spy).not.toHaveBeenCalled(); + + trackTransaction({ selectedPlan: 'notAplan' }); + + expect(spy).not.toHaveBeenCalled(); + }); + }); + }); }); describe.each([ |