Commit d7f7ed91 authored by GitLab Bot's avatar GitLab Bot

Automatic merge of gitlab-org/gitlab master

parents 4f50dc4e 9808910a
...@@ -3,3 +3,4 @@ export const TRACK_TOGGLE_TRAINING_PROVIDER_LABEL = 'update_security_training_pr ...@@ -3,3 +3,4 @@ export const TRACK_TOGGLE_TRAINING_PROVIDER_LABEL = 'update_security_training_pr
export const TRACK_CLICK_TRAINING_LINK = 'click_security_training_link'; export const TRACK_CLICK_TRAINING_LINK = 'click_security_training_link';
export const TRACK_PROVIDER_LEARN_MORE_CLICK_ACTION = 'click_link'; export const TRACK_PROVIDER_LEARN_MORE_CLICK_ACTION = 'click_link';
export const TRACK_PROVIDER_LEARN_MORE_CLICK_LABEL = 'security_training_provider'; export const TRACK_PROVIDER_LEARN_MORE_CLICK_LABEL = 'security_training_provider';
export const TRACK_TRAINING_LOADED_ACTION = 'security_training_link_loaded';
...@@ -1786,7 +1786,6 @@ body.gl-dark { ...@@ -1786,7 +1786,6 @@ body.gl-dark {
--border-color: #4f4f4f; --border-color: #4f4f4f;
--white: #333; --white: #333;
--black: #fff; --black: #fff;
--black-normal: #fafafa;
--svg-status-bg: #333; --svg-status-bg: #333;
} }
.nav-sidebar li a { .nav-sidebar li a {
...@@ -2017,7 +2016,6 @@ body.gl-dark { ...@@ -2017,7 +2016,6 @@ body.gl-dark {
--border-color: #4f4f4f; --border-color: #4f4f4f;
--white: #333; --white: #333;
--black: #fff; --black: #fff;
--black-normal: #fafafa;
--svg-status-bg: #333; --svg-status-bg: #333;
} }
.tab-width-8 { .tab-width-8 {
......
...@@ -199,7 +199,6 @@ body.gl-dark { ...@@ -199,7 +199,6 @@ body.gl-dark {
--white: #{$white}; --white: #{$white};
--black: #{$black}; --black: #{$black};
--black-normal: #{$black-normal};
--svg-status-bg: #{$white}; --svg-status-bg: #{$white};
......
...@@ -6,7 +6,10 @@ import securityTrainingProvidersQuery from '~/security_configuration/graphql/sec ...@@ -6,7 +6,10 @@ import securityTrainingProvidersQuery from '~/security_configuration/graphql/sec
import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin'; import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
import axios from '~/lib/utils/axios_utils'; import axios from '~/lib/utils/axios_utils';
import Tracking from '~/tracking'; import Tracking from '~/tracking';
import { TRACK_CLICK_TRAINING_LINK } from '~/security_configuration/constants'; import {
TRACK_CLICK_TRAINING_LINK,
TRACK_TRAINING_LOADED_ACTION,
} from '~/security_configuration/constants';
import { SUPPORTED_IDENTIFIER_TYPES } from '../constants'; import { SUPPORTED_IDENTIFIER_TYPES } from '../constants';
export const i18n = { export const i18n = {
...@@ -115,6 +118,7 @@ export default { ...@@ -115,6 +118,7 @@ export default {
const { const {
data: { url }, data: { url },
} = await axios.get(path, { params }); } = await axios.get(path, { params });
this.triggerMetric(TRACK_TRAINING_LOADED_ACTION);
this.training = { name, url }; this.training = { name, url };
} catch { } catch {
this.hasError = true; this.hasError = true;
...@@ -123,10 +127,13 @@ export default { ...@@ -123,10 +127,13 @@ export default {
} }
}, },
clickTrainingLink() { clickTrainingLink() {
this.triggerMetric(TRACK_CLICK_TRAINING_LINK);
},
triggerMetric(action) {
const { name } = this.supportedIdentifier; const { name } = this.supportedIdentifier;
const { id } = mockProvider; const { id } = mockProvider;
this.track(TRACK_CLICK_TRAINING_LINK, { this.track(action, {
label: `vendor_${id}`, label: `vendor_${id}`,
property: name, property: name,
}); });
......
...@@ -1786,7 +1786,6 @@ body.gl-dark { ...@@ -1786,7 +1786,6 @@ body.gl-dark {
--border-color: #4f4f4f; --border-color: #4f4f4f;
--white: #333; --white: #333;
--black: #fff; --black: #fff;
--black-normal: #fafafa;
--svg-status-bg: #333; --svg-status-bg: #333;
} }
.nav-sidebar li a { .nav-sidebar li a {
...@@ -2017,7 +2016,6 @@ body.gl-dark { ...@@ -2017,7 +2016,6 @@ body.gl-dark {
--border-color: #4f4f4f; --border-color: #4f4f4f;
--white: #333; --white: #333;
--black: #fff; --black: #fff;
--black-normal: #fafafa;
--svg-status-bg: #333; --svg-status-bg: #333;
} }
.tab-width-8 { .tab-width-8 {
......
...@@ -14,7 +14,10 @@ import VulnerabilityTraining, { ...@@ -14,7 +14,10 @@ import VulnerabilityTraining, {
import securityTrainingProvidersQuery from '~/security_configuration/graphql/security_training_providers.query.graphql'; import securityTrainingProvidersQuery from '~/security_configuration/graphql/security_training_providers.query.graphql';
import { shallowMountExtended } from 'helpers/vue_test_utils_helper'; import { shallowMountExtended } from 'helpers/vue_test_utils_helper';
import { SUPPORTED_IDENTIFIER_TYPES } from 'ee/vulnerabilities/constants'; import { SUPPORTED_IDENTIFIER_TYPES } from 'ee/vulnerabilities/constants';
import { TRACK_CLICK_TRAINING_LINK } from '~/security_configuration/constants'; import {
TRACK_CLICK_TRAINING_LINK,
TRACK_TRAINING_LOADED_ACTION,
} from '~/security_configuration/constants';
import createMockApollo from 'helpers/mock_apollo_helper'; import createMockApollo from 'helpers/mock_apollo_helper';
import waitForPromises from 'helpers/wait_for_promises'; import waitForPromises from 'helpers/wait_for_promises';
import { import {
...@@ -204,21 +207,38 @@ describe('VulnerabilityTraining component', () => { ...@@ -204,21 +207,38 @@ describe('VulnerabilityTraining component', () => {
describe('metrics', () => { describe('metrics', () => {
let trackingSpy; let trackingSpy;
afterEach(() => { beforeEach(async () => {
unmockTracking(); trackingSpy = mockTracking(undefined, wrapper.element, jest.spyOn);
});
it('tracks when a training link gets clicked', async () => {
await mockTrainingSuccess(); await mockTrainingSuccess();
createComponent(); createComponent();
trackingSpy = mockTracking(undefined, wrapper.element, jest.spyOn);
await waitForQueryToBeLoaded(); await waitForQueryToBeLoaded();
await findTrainingItemLink().vm.$emit('click'); });
expect(trackingSpy).toHaveBeenCalledWith(undefined, TRACK_CLICK_TRAINING_LINK, { afterEach(() => {
unmockTracking();
});
const expectedTrackingOptions = {
property: defaultProps.identifiers[0].name, property: defaultProps.identifiers[0].name,
label: `vendor_${mockProvider.id}`, label: `vendor_${mockProvider.id}`,
};
it('tracks when the training link gets loaded', () => {
expect(trackingSpy).toHaveBeenCalledWith(
undefined,
TRACK_TRAINING_LOADED_ACTION,
expectedTrackingOptions,
);
}); });
it('tracks when a training link gets clicked', async () => {
await findTrainingItemLink().vm.$emit('click');
expect(trackingSpy).toHaveBeenCalledWith(
undefined,
TRACK_CLICK_TRAINING_LINK,
expectedTrackingOptions,
);
}); });
}); });
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment