diff --git a/packages/node/src/exposure/exposure-service.ts b/packages/node/src/exposure/exposure-service.ts index 896db7e..6cf1c38 100644 --- a/packages/node/src/exposure/exposure-service.ts +++ b/packages/node/src/exposure/exposure-service.ts @@ -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; } diff --git a/packages/node/test/local/exposure/exposure-service.test.ts b/packages/node/test/local/exposure/exposure-service.test.ts index d2f0f1c..814898d 100644 --- a/packages/node/test/local/exposure/exposure-service.test.ts +++ b/packages/node/test/local/exposure/exposure-service.test.ts @@ -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); @@ -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 @@ -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)}`;