From bd6b473e97d570e36aae5fa27f2e66db43732f11 Mon Sep 17 00:00:00 2001 From: Dave Pisek <dpisek@gitlab.com> Date: Mon, 21 Feb 2022 18:06:02 +1100 Subject: [PATCH] Track security training provider clicks This change adds a metric for when a user clicks on the "Secondary Training Provider" link on the security configuration page. --- .../components/training_provider_list.vue | 16 ++++++++++++++- .../security_configuration/constants.js | 3 +++ .../components/training_provider_list_spec.js | 20 +++++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/security_configuration/components/training_provider_list.vue b/app/assets/javascripts/security_configuration/components/training_provider_list.vue index 539e2bff17c2..dd470562f2d5 100644 --- a/app/assets/javascripts/security_configuration/components/training_provider_list.vue +++ b/app/assets/javascripts/security_configuration/components/training_provider_list.vue @@ -6,6 +6,8 @@ import { __ } from '~/locale'; import { TRACK_TOGGLE_TRAINING_PROVIDER_ACTION, TRACK_TOGGLE_TRAINING_PROVIDER_LABEL, + TRACK_PROVIDER_LEARN_MORE_CLICK_ACTION, + TRACK_PROVIDER_LEARN_MORE_CLICK_LABEL, } from '~/security_configuration/constants'; import dismissUserCalloutMutation from '~/graphql_shared/mutations/dismiss_user_callout.mutation.graphql'; import securityTrainingProvidersQuery from '../graphql/security_training_providers.query.graphql'; @@ -137,6 +139,12 @@ export default { }, }); }, + trackProviderLearnMoreClick(providerId) { + this.track(TRACK_PROVIDER_LEARN_MORE_CLICK_ACTION, { + label: TRACK_PROVIDER_LEARN_MORE_CLICK_LABEL, + property: providerId, + }); + }, }, i18n, }; @@ -172,7 +180,13 @@ export default { <h3 class="gl-font-lg gl-m-0 gl-mb-2">{{ provider.name }}</h3> <p> {{ provider.description }} - <gl-link :href="provider.url" target="_blank">{{ __('Learn more.') }}</gl-link> + <gl-link + :href="provider.url" + target="_blank" + @click="trackProviderLearnMoreClick(provider.id)" + > + {{ __('Learn more.') }} + </gl-link> </p> </div> </div> diff --git a/app/assets/javascripts/security_configuration/constants.js b/app/assets/javascripts/security_configuration/constants.js index dc76436e91db..86cc3a9c2f9a 100644 --- a/app/assets/javascripts/security_configuration/constants.js +++ b/app/assets/javascripts/security_configuration/constants.js @@ -1,2 +1,5 @@ export const TRACK_TOGGLE_TRAINING_PROVIDER_ACTION = 'toggle_security_training_provider'; export const TRACK_TOGGLE_TRAINING_PROVIDER_LABEL = 'update_security_training_provider'; + +export const TRACK_PROVIDER_LEARN_MORE_CLICK_ACTION = 'click_link'; +export const TRACK_PROVIDER_LEARN_MORE_CLICK_LABEL = 'security_training_provider'; diff --git a/spec/frontend/security_configuration/components/training_provider_list_spec.js b/spec/frontend/security_configuration/components/training_provider_list_spec.js index 18c9ada6bde9..4d92f0cca220 100644 --- a/spec/frontend/security_configuration/components/training_provider_list_spec.js +++ b/spec/frontend/security_configuration/components/training_provider_list_spec.js @@ -8,6 +8,8 @@ import { mockTracking, unmockTracking } from 'helpers/tracking_helper'; import { TRACK_TOGGLE_TRAINING_PROVIDER_ACTION, TRACK_TOGGLE_TRAINING_PROVIDER_LABEL, + TRACK_PROVIDER_LEARN_MORE_CLICK_ACTION, + TRACK_PROVIDER_LEARN_MORE_CLICK_LABEL, } from '~/security_configuration/constants'; import TrainingProviderList from '~/security_configuration/components/training_provider_list.vue'; import securityTrainingProvidersQuery from '~/security_configuration/graphql/security_training_providers.query.graphql'; @@ -244,6 +246,24 @@ describe('TrainingProviderList component', () => { }, }); }); + + it(`tracks when a provider's "Learn more" link is clicked`, () => { + const firstProviderLink = findLinks().at(0); + const [{ id: firstProviderId }] = securityTrainingProviders; + + expect(trackingSpy).not.toHaveBeenCalled(); + + firstProviderLink.vm.$emit('click'); + + expect(trackingSpy).toHaveBeenCalledWith( + undefined, + TRACK_PROVIDER_LEARN_MORE_CLICK_ACTION, + { + label: TRACK_PROVIDER_LEARN_MORE_CLICK_LABEL, + property: firstProviderId, + }, + ); + }); }); }); -- GitLab