Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions packages/node/src/exposure/exposure-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,10 @@ export const toExposureEvents = (
} else if (variant.value) {
eventProperties['[Experiment] Variant'] = variant.value;
}
const experimentKey = variant.metadata?.experimentKey as string | undefined;
if (experimentKey) {
eventProperties['[Experiment] Experiment Key'] = experimentKey;
}
if (variant.metadata) {
eventProperties['metadata'] = variant.metadata;
}
Expand Down
21 changes: 19 additions & 2 deletions packages/node/test/local/exposure/exposure-service.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,10 +84,21 @@ test('exposure to event as expected', async () => {
value: 'on',
},
empty_variant: {},
with_experiment_key: {
key: 'treatment',
value: 'treatment',
metadata: {
segmentName: 'All Other Users',
flagType: 'experiment',
flagVersion: 10,
default: false,
experimentKey: 'exp-1',
},
},
};
const exposure = new Exposure(user, results);
const events = toExposureEvents(exposure, DAY_MILLIS);
expect(events.length).toEqual(7); // Excludes default exposure.
expect(events.length).toEqual(8); // Excludes default exposure.
for (const event of events) {
expect(event.user_id).toEqual(user.user_id);
expect(event.device_id).toEqual(user.device_id);
Expand All @@ -104,6 +115,12 @@ test('exposure to event as expected', async () => {
);
expect(eventProperties['metadata']).toEqual(results[flagKey].metadata);

if (flagKey === 'with_experiment_key') {
expect(eventProperties['[Experiment] Experiment Key']).toEqual('exp-1');
} else {
expect(eventProperties['[Experiment] Experiment Key']).toBeUndefined();
}

// User Properties
if (
results[flagKey].metadata?.flagType === FLAG_TYPE_MUTUAL_EXCLUSION_GROUP
Expand All @@ -125,7 +142,7 @@ test('exposure to event as expected', async () => {
}

const canonicalization =
'user device basic control default off different_value on empty_metadata on holdout holdout mutex slot-1 partial_metadata on ';
'user device basic control default off different_value on empty_metadata on holdout holdout mutex slot-1 partial_metadata on with_experiment_key treatment ';
const expected = `user device ${hashCode(
flagKey + ' ' + canonicalization,
)} ${Math.floor(exposure.timestamp / DAY_MILLIS)}`;
Expand Down
Loading