Skip to content

Commit 1550670

Browse files
authored
feat: integrate GenStudio tracking (#4474)
1 parent 1dfa7e7 commit 1550670

File tree

2 files changed

+61
-2
lines changed

2 files changed

+61
-2
lines changed

libs/scripts/delayed.js

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,19 @@ export const loadAriaAutomation = async () => {
7777
addAriaLabels();
7878
};
7979

80+
export const addRUMCampaignTrackingParameters = ({ sampleRUM }) => {
81+
const usp = new URLSearchParams(window.location.search);
82+
[
83+
{ key: 'sdid', utmKey: 'utm_campaign' },
84+
{ key: 'mv', utmKey: 'utm_source' },
85+
{ key: 'mv2', utmKey: 'utm_medium' },
86+
].forEach(({ key, utmKey }) => {
87+
const val = usp.get(key);
88+
if (!val || (key === 'sdid' && val.length > 8)) return;
89+
sampleRUM('utm', { source: utmKey, target: val });
90+
});
91+
};
92+
8093
/**
8194
* Executes everything that happens a lot later, without impacting the user experience.
8295
*/
@@ -100,7 +113,10 @@ const loadDelayed = ([
100113
} else {
101114
resolve(null);
102115
}
103-
import('../utils/samplerum.js').then(({ sampleRUM }) => sampleRUM());
116+
import('../utils/samplerum.js').then(({ sampleRUM }) => {
117+
sampleRUM();
118+
addRUMCampaignTrackingParameters({ sampleRUM });
119+
});
104120
}, DELAY);
105121
});
106122

test/scripts/delayed.test.js

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import sinon from 'sinon';
22
import { expect } from '@esm-bundle/chai';
3-
import loadDelayed, { loadPrivacy, loadJarvisChat, loadGoogleLogin } from '../../libs/scripts/delayed.js';
3+
import loadDelayed, { loadPrivacy, loadJarvisChat, loadGoogleLogin, addRUMCampaignTrackingParameters } from '../../libs/scripts/delayed.js';
44
import { getMetadata, getConfig, setConfig, loadIms } from '../../libs/utils/utils.js';
55

66
describe('Delayed', () => {
@@ -61,3 +61,46 @@ describe('Delayed', () => {
6161
clock.restore();
6262
});
6363
});
64+
65+
describe('addRUMCampaignTrackingParameters', () => {
66+
const originalURLSearchParams = window.URLSearchParams;
67+
const setURLSearchParamsStub = (params) => {
68+
window.URLSearchParams = sinon.stub().returns({ get: (key) => params[key] });
69+
};
70+
71+
afterEach(() => {
72+
window.URLSearchParams = originalURLSearchParams;
73+
});
74+
75+
it('should call sampleRUM for valid sdid, mv, and mv2', () => {
76+
setURLSearchParamsStub({
77+
sdid: '12345678',
78+
mv: 'foo',
79+
mv2: 'bar',
80+
});
81+
const sampleRUM = sinon.stub();
82+
addRUMCampaignTrackingParameters({ sampleRUM });
83+
expect(sampleRUM.calledThrice).to.be.true;
84+
expect(sampleRUM.getCall(0).args).to.deep.equal(['utm', { source: 'utm_campaign', target: '12345678' }]);
85+
expect(sampleRUM.getCall(1).args).to.deep.equal(['utm', { source: 'utm_source', target: 'foo' }]);
86+
expect(sampleRUM.getCall(2).args).to.deep.equal(['utm', { source: 'utm_medium', target: 'bar' }]);
87+
});
88+
89+
it('should NOT call sampleRUM for sdid if too long', () => {
90+
setURLSearchParamsStub({
91+
sdid: '123456789012345',
92+
mv: 'foo',
93+
});
94+
const sampleRUM = sinon.stub();
95+
addRUMCampaignTrackingParameters({ sampleRUM });
96+
expect(sampleRUM.calledOnce).to.be.true;
97+
expect(sampleRUM.getCall(0).args).to.deep.equal(['utm', { source: 'utm_source', target: 'foo' }]);
98+
});
99+
100+
it('should skip missing params', () => {
101+
setURLSearchParamsStub({ irrelevant: 'x' });
102+
const sampleRUM = sinon.stub();
103+
addRUMCampaignTrackingParameters({ sampleRUM });
104+
expect(sampleRUM.notCalled).to.be.true;
105+
});
106+
});

0 commit comments

Comments
 (0)