Skip to content

Commit 73df669

Browse files
committed
add force particiaptions to AB test participations
1 parent 77a4a14 commit 73df669

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

dotcom-rendering/src/client/abTesting.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { getCookie, isUndefined } from '@guardian/libs';
2+
import { getForcedParticipationsFromUrlFlat } from '../lib/getAbUrlHash';
23

34
const AB_COOKIE_NAME = 'gu_client_ab_tests';
45

@@ -37,6 +38,7 @@ const getABTestParticipations = (): ABParticipations => {
3738
return {
3839
...getClientParticipations(),
3940
...window.guardian.config.serverSideABTests,
41+
...getForcedParticipationsFromUrlFlat(window.location.hash),
4042
};
4143
};
4244

dotcom-rendering/src/lib/getAbUrlHash.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,28 @@ export const getForcedParticipationsFromUrl = (
2121

2222
return {};
2323
};
24+
25+
export const getForcedParticipationsFromUrlFlat = (
26+
windowHash: string,
27+
): Record<string, string> => {
28+
if (windowHash.startsWith('#ab')) {
29+
const tokens = windowHash
30+
.replace('#ab-', '')
31+
.split(',')
32+
.map((token) => token.replace(/^ab-/, ''));
33+
return tokens.reduce<Record<string, string>>((obj, token) => {
34+
const [testId, variantId] = token.split('=');
35+
36+
if (testId && variantId) {
37+
return {
38+
...obj,
39+
[testId]: variantId,
40+
};
41+
}
42+
43+
return obj;
44+
}, {});
45+
}
46+
47+
return {};
48+
};

0 commit comments

Comments
 (0)