From cc68fab58e4d0f62b45b5e93cf8cbff534e6bb87 Mon Sep 17 00:00:00 2001 From: Wilson Pinto <wilsonpinto360@gmail.com> Date: Thu, 5 Sep 2024 19:03:10 +0200 Subject: [PATCH] Add complementary tests for diffs to assert track metrics calls --- spec/frontend/diffs/components/app_spec.js | 72 ++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/spec/frontend/diffs/components/app_spec.js b/spec/frontend/diffs/components/app_spec.js index 8ecbff0571b8a..cfe7b73ff1995 100644 --- a/spec/frontend/diffs/components/app_spec.js +++ b/spec/frontend/diffs/components/app_spec.js @@ -5,6 +5,7 @@ import Vue, { nextTick } from 'vue'; import VueApollo from 'vue-apollo'; // eslint-disable-next-line no-restricted-imports import Vuex from 'vuex'; +import api from '~/api'; import getMRCodequalityAndSecurityReports from '~/diffs/components/graphql/get_mr_codequality_and_security_reports.query.graphql'; import createMockApollo from 'helpers/mock_apollo_helper'; import setWindowLocation from 'helpers/set_window_location_helper'; @@ -46,6 +47,8 @@ const UPDATED_COMMIT_URL = `${TEST_HOST}/COMMIT/NEW`; const ENDPOINT_BATCH_URL = `${TEST_HOST}/diff/endpointBatch`; const ENDPOINT_METADATA_URL = `${TEST_HOST}/diff/endpointMetadata`; +jest.mock('~/api.js'); + Vue.use(Vuex); Vue.use(VueApollo); @@ -1112,4 +1115,73 @@ describe('diffs/components/app', () => { expect(rootWrapper.emitted(BV_HIDE_TOOLTIP)).toStrictEqual(undefined); }); }); + + describe('track "trackRedisHllUserEvent" and "trackRedisCounterEvent" metrics', () => { + let mockGetTime; + + beforeEach(() => { + jest.clearAllMocks(); + mockGetTime = jest.spyOn(Date.prototype, 'getTime'); + }); + + afterEach(() => { + mockGetTime.mockRestore(); + }); + + const simulateKeydown = async (key, time) => { + await nextTick(); + + mockGetTime.mockReturnValue(time); + Mousetrap.trigger(key); + }; + + it('should not track metrics if keydownTime is not set', async () => { + createComponent({ props: { shouldShow: true } }); + + await nextTick(); + window.dispatchEvent(new Event('blur')); + + expect(api.trackRedisHllUserEvent).not.toHaveBeenCalled(); + expect(api.trackRedisCounterEvent).not.toHaveBeenCalled(); + }); + + it('should track metrics if delta is between 0 and 1000ms', async () => { + createComponent({ props: { shouldShow: true } }); + + // delta 500 ms + await simulateKeydown('mod+f', 1000); + mockGetTime.mockReturnValue(1500); + + window.dispatchEvent(new Event('blur')); + + expect(api.trackRedisHllUserEvent).toHaveBeenCalledWith('i_code_review_user_searches_diff'); + expect(api.trackRedisCounterEvent).toHaveBeenCalledWith('diff_searches'); + }); + + it('should not track metrics if delta is greater than or equal to 1000ms', async () => { + createComponent({ props: { shouldShow: true } }); + + // delta 1050 ms + await simulateKeydown('mod+f', 1000); + mockGetTime.mockReturnValue(2050); + + window.dispatchEvent(new Event('blur')); + + expect(api.trackRedisHllUserEvent).not.toHaveBeenCalled(); + expect(api.trackRedisCounterEvent).not.toHaveBeenCalled(); + }); + + it('should not track metrics if delta is negative', async () => { + createComponent({ props: { shouldShow: true } }); + + // delta -500 ms + await simulateKeydown('mod+f', 1500); + mockGetTime.mockReturnValue(1000); + + window.dispatchEvent(new Event('blur')); + + expect(api.trackRedisHllUserEvent).not.toHaveBeenCalled(); + expect(api.trackRedisCounterEvent).not.toHaveBeenCalled(); + }); + }); }); -- GitLab