Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/experimentation/experiment_tracking_spec.js')
-rw-r--r--spec/frontend/experimentation/experiment_tracking_spec.js80
1 files changed, 80 insertions, 0 deletions
diff --git a/spec/frontend/experimentation/experiment_tracking_spec.js b/spec/frontend/experimentation/experiment_tracking_spec.js
new file mode 100644
index 00000000000..20f45a7015a
--- /dev/null
+++ b/spec/frontend/experimentation/experiment_tracking_spec.js
@@ -0,0 +1,80 @@
+import { TRACKING_CONTEXT_SCHEMA } from '~/experimentation/constants';
+import ExperimentTracking from '~/experimentation/experiment_tracking';
+import { getExperimentData } from '~/experimentation/utils';
+import Tracking from '~/tracking';
+
+let experimentTracking;
+let label;
+let property;
+
+jest.mock('~/tracking');
+jest.mock('~/experimentation/utils', () => ({ getExperimentData: jest.fn() }));
+
+const setup = () => {
+ experimentTracking = new ExperimentTracking('sidebar_experiment', { label, property });
+};
+
+beforeEach(() => {
+ document.body.dataset.page = 'issues-page';
+});
+
+afterEach(() => {
+ label = undefined;
+ property = undefined;
+});
+
+describe('event', () => {
+ beforeEach(() => {
+ getExperimentData.mockReturnValue(undefined);
+ });
+
+ describe('when experiment data exists for experimentName', () => {
+ beforeEach(() => {
+ getExperimentData.mockReturnValue('experiment-data');
+ setup();
+ });
+
+ describe('when providing options', () => {
+ label = 'sidebar-drawer';
+ property = 'dark-mode';
+
+ it('passes them to the tracking call', () => {
+ experimentTracking.event('click_sidebar_close');
+
+ expect(Tracking.event).toHaveBeenCalledTimes(1);
+ expect(Tracking.event).toHaveBeenCalledWith('issues-page', 'click_sidebar_close', {
+ label: 'sidebar-drawer',
+ property: 'dark-mode',
+ context: {
+ schema: TRACKING_CONTEXT_SCHEMA,
+ data: 'experiment-data',
+ },
+ });
+ });
+ });
+
+ it('tracks with the correct context', () => {
+ experimentTracking.event('click_sidebar_trigger');
+
+ expect(Tracking.event).toHaveBeenCalledTimes(1);
+ expect(Tracking.event).toHaveBeenCalledWith('issues-page', 'click_sidebar_trigger', {
+ context: {
+ schema: TRACKING_CONTEXT_SCHEMA,
+ data: 'experiment-data',
+ },
+ });
+ });
+ });
+
+ describe('when experiment data does NOT exists for the experimentName', () => {
+ beforeEach(() => {
+ setup();
+ });
+
+ it('does not track', () => {
+ experimentTracking.event('click_sidebar_close');
+
+ expect(Tracking.event).not.toHaveBeenCalled();
+ });
+ });
+});