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/tracking/internal_events_spec.js')
-rw-r--r--spec/frontend/tracking/internal_events_spec.js100
1 files changed, 100 insertions, 0 deletions
diff --git a/spec/frontend/tracking/internal_events_spec.js b/spec/frontend/tracking/internal_events_spec.js
new file mode 100644
index 00000000000..ad2ffa7cef4
--- /dev/null
+++ b/spec/frontend/tracking/internal_events_spec.js
@@ -0,0 +1,100 @@
+import API from '~/api';
+import { mockTracking } from 'helpers/tracking_helper';
+import { shallowMountExtended } from 'helpers/vue_test_utils_helper';
+import InternalEvents from '~/tracking/internal_events';
+import { GITLAB_INTERNAL_EVENT_CATEGORY, SERVICE_PING_SCHEMA } from '~/tracking/constants';
+import * as utils from '~/tracking/utils';
+import { Tracker } from '~/tracking/tracker';
+
+jest.mock('~/api', () => ({
+ trackRedisHllUserEvent: jest.fn(),
+}));
+
+jest.mock('~/tracking/utils', () => ({
+ ...jest.requireActual('~/tracking/utils'),
+ getInternalEventHandlers: jest.fn(),
+}));
+
+Tracker.enabled = jest.fn();
+
+describe('InternalEvents', () => {
+ describe('track_event', () => {
+ it('track_event calls trackRedisHllUserEvent with correct arguments', () => {
+ const event = 'TestEvent';
+
+ InternalEvents.track_event(event);
+
+ expect(API.trackRedisHllUserEvent).toHaveBeenCalledTimes(1);
+ expect(API.trackRedisHllUserEvent).toHaveBeenCalledWith(event);
+ });
+
+ it('track_event calls tracking.event functions with correct arguments', () => {
+ const trackingSpy = mockTracking(GITLAB_INTERNAL_EVENT_CATEGORY, undefined, jest.spyOn);
+
+ const event = 'TestEvent';
+
+ InternalEvents.track_event(event);
+
+ expect(trackingSpy).toHaveBeenCalledTimes(1);
+ expect(trackingSpy).toHaveBeenCalledWith(GITLAB_INTERNAL_EVENT_CATEGORY, event, {
+ context: {
+ schema: SERVICE_PING_SCHEMA,
+ data: {
+ event_name: event,
+ data_source: 'redis_hll',
+ },
+ },
+ });
+ });
+ });
+
+ describe('mixin', () => {
+ let wrapper;
+
+ beforeEach(() => {
+ const Component = {
+ render() {},
+ mixins: [InternalEvents.mixin()],
+ };
+ wrapper = shallowMountExtended(Component);
+ });
+
+ it('this.track_event function calls InternalEvent`s track function with an event', () => {
+ const event = 'TestEvent';
+ const trackEventSpy = jest.spyOn(InternalEvents, 'track_event');
+
+ wrapper.vm.track_event(event);
+
+ expect(trackEventSpy).toHaveBeenCalledTimes(1);
+ expect(trackEventSpy).toHaveBeenCalledWith(event);
+ });
+ });
+
+ describe('bindInternalEventDocument', () => {
+ it('should not bind event handlers if tracker is not enabled', () => {
+ Tracker.enabled.mockReturnValue(false);
+ const result = InternalEvents.bindInternalEventDocument();
+ expect(result).toEqual([]);
+ expect(utils.getInternalEventHandlers).not.toHaveBeenCalled();
+ });
+
+ it('should not bind event handlers if already bound', () => {
+ Tracker.enabled.mockReturnValue(true);
+ document.internalEventsTrackingBound = true;
+ const result = InternalEvents.bindInternalEventDocument();
+ expect(result).toEqual([]);
+ expect(utils.getInternalEventHandlers).not.toHaveBeenCalled();
+ });
+
+ it('should bind event handlers when not bound yet', () => {
+ Tracker.enabled.mockReturnValue(true);
+ document.internalEventsTrackingBound = false;
+ const addEventListenerMock = jest.spyOn(document, 'addEventListener');
+
+ const result = InternalEvents.bindInternalEventDocument();
+
+ expect(addEventListenerMock).toHaveBeenCalledWith('click', expect.any(Function));
+ expect(result).toEqual({ name: 'click', func: expect.any(Function) });
+ });
+ });
+});