diff --git a/lib/experiment/local/exposure/exposure_service.rb b/lib/experiment/local/exposure/exposure_service.rb index b0b86b2..26df93b 100644 --- a/lib/experiment/local/exposure/exposure_service.rb +++ b/lib/experiment/local/exposure/exposure_service.rb @@ -47,6 +47,8 @@ def self.to_exposure_events(exposure, ttl_millis) elsif variant.value event_properties['[Experiment] Variant'] = variant.value end + experiment_key = variant.metadata ? variant.metadata['experimentKey'] : nil + event_properties['[Experiment] Experiment Key'] = experiment_key if experiment_key event_properties['metadata'] = variant.metadata if variant.metadata # Build event. diff --git a/spec/experiment/local/exposure/exposure_service_spec.rb b/spec/experiment/local/exposure/exposure_service_spec.rb index c685670..103af6d 100644 --- a/spec/experiment/local/exposure/exposure_service_spec.rb +++ b/spec/experiment/local/exposure/exposure_service_spec.rb @@ -97,6 +97,17 @@ value: 'on' ) empty_variant = AmplitudeExperiment::Variant.new + with_experiment_key = AmplitudeExperiment::Variant.new( + key: 'treatment', + value: 'treatment', + metadata: { + 'segmentName' => 'All Other Users', + 'flagType' => 'experiment', + 'flagVersion' => 10, + 'default' => false, + 'experimentKey' => 'exp-1' + } + ) results = { 'basic' => basic, 'different_value' => different_value, @@ -105,13 +116,14 @@ 'holdout' => holdout, 'partial_metadata' => partial_metadata, 'empty_metadata' => empty_metadata, - 'empty_variant' => empty_variant + 'empty_variant' => empty_variant, + 'with_experiment_key' => with_experiment_key } exposure = AmplitudeExperiment::Exposure.new(user, results) events = AmplitudeExperiment::ExposureService.to_exposure_events(exposure, AmplitudeExperiment::DAY_MILLIS) # Should exclude default (default=true) only - # basic, different_value, mutex, holdout, partial_metadata, empty_metadata, empty_variant = 7 events - expect(events.length).to eq(7) + # basic, different_value, mutex, holdout, partial_metadata, empty_metadata, empty_variant, with_experiment_key = 8 events + expect(events.length).to eq(8) events.each do |event| expect(event.event_type).to eq('[Experiment] Exposure') @@ -130,6 +142,13 @@ end expect(event.event_properties['metadata']).to eq(variant.metadata) if variant.metadata + # Validate experiment key is lifted to top-level event property when present + if flag_key == 'with_experiment_key' + expect(event.event_properties['[Experiment] Experiment Key']).to eq('exp-1') + else + expect(event.event_properties).not_to have_key('[Experiment] Experiment Key') + end + # Validate user properties flag_type = variant.metadata ? variant.metadata['flagType'] : nil if flag_type == 'mutual-exclusion-group'