diff --git a/spec/support/matchers/internal_events_matchers.rb b/spec/support/matchers/internal_events_matchers.rb index dc471440e7aa5e643660c9d55e3ce7cde9648f05..7bb57ccc48ece1ca20464bc98b01e3d9992d4101 100644 --- a/spec/support/matchers/internal_events_matchers.rb +++ b/spec/support/matchers/internal_events_matchers.rb @@ -38,12 +38,12 @@ # # expect { subject } # .to trigger_internal_events('mr_created', 'member_role_created') -# .with(user: user, project: project, category: category, label: label) +# .with(user: user, project: project, category: category, additional_properties: { label: label } ) # .exactly(3).times # # expect { subject } # .to trigger_internal_events('mr_created') -# .with(user: user, project: project, category: category, label: label) +# .with(user: user, project: project, category: category, additional_properties: { label: label } ) # .and increment_usage_metrics('counts.deployments') # .at_least(:once) # .and change { mr.notes.count }.by(1) @@ -107,6 +107,7 @@ def apply_chain_methods(base_matcher, chained_methods) **args } @properties[:namespace] ||= @properties[:project]&.namespace + @additional_properties ||= @properties.fetch(:additional_properties, {}) end %i[once twice thrice never at_most at_least times time exactly].each do |message| @@ -205,7 +206,7 @@ def expect_snowplow(event_name) standard_context, service_ping_context_for(event_name) ), - **@properties.slice(:label, :property, :value).compact + **@additional_properties.slice(:label, :property, :value).compact ) ) end @@ -250,7 +251,7 @@ def expect_product_analytics(event_name) return expect_any_product_analytics_call(event_name) if @properties.none? expected_context = { project_id: id_for(:project), namespace_id: id_for(:namespace) } - additional_properties = @properties.slice(:label, :property, :value) + additional_properties = @additional_properties.slice(:label, :property, :value) expected_context[:additional_properties] = additional_properties if additional_properties.any? expect(product_analytics_spy).to receive_expected_count_of(:track).with( diff --git a/spec/support_specs/matchers/internal_events_matchers_spec.rb b/spec/support_specs/matchers/internal_events_matchers_spec.rb index 5c6dc5af95cbda17dbcca5f1eb3c763319a8ecfe..7078d87d023bec655243e8463ce083336af23122 100644 --- a/spec/support_specs/matchers/internal_events_matchers_spec.rb +++ b/spec/support_specs/matchers/internal_events_matchers_spec.rb @@ -96,6 +96,35 @@ def track_event(event: nil, user: nil, group: nil) .with(user: user_2, namespace: group_2) .once end + + context 'with additional properties' do + let(:additional_properties) { { label: 'label1', value: 123, property: 'property1' } } + let(:tracked_params) { { user: user_1, namespace: group_1, additional_properties: additional_properties } } + let(:expected_params) { tracked_params } + + subject(:assertion) do + expect do + Gitlab::InternalEvents.track_event('g_edit_by_sfe', **tracked_params) + end.to trigger_internal_events('g_edit_by_sfe') + .with(expected_params) + .once + end + + it 'accepts correct additional properties' do + assertion + end + + context "with wrong label value" do + let(:expected_params) { tracked_params.deep_merge(additional_properties: { label: 'wrong_label' }) } + + it "doesn't accept incorrect additional_properties" do + expect do + assertion + end.to raise_error RSpec::Expectations::ExpectationNotMetError, + /received :event with unexpected arguments/ + end + end + end end describe ':increment_usage_metrics' do