Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/lib/gitlab/internal_events_spec.rb')
-rw-r--r--spec/lib/gitlab/internal_events_spec.rb79
1 files changed, 73 insertions, 6 deletions
diff --git a/spec/lib/gitlab/internal_events_spec.rb b/spec/lib/gitlab/internal_events_spec.rb
index f23979fc56a..86215434ba4 100644
--- a/spec/lib/gitlab/internal_events_spec.rb
+++ b/spec/lib/gitlab/internal_events_spec.rb
@@ -7,14 +7,16 @@ RSpec.describe Gitlab::InternalEvents, :snowplow, feature_category: :product_ana
include SnowplowHelpers
before do
+ allow(Gitlab::ErrorTracking).to receive(:track_and_raise_for_dev_exception)
allow(Gitlab::UsageDataCounters::HLLRedisCounter).to receive(:track_event)
allow(Gitlab::Tracking).to receive(:tracker).and_return(fake_snowplow)
+ allow(Gitlab::InternalEvents::EventDefinitions).to receive(:unique_property).and_return(:user)
allow(fake_snowplow).to receive(:event)
end
def expect_redis_hll_tracking(event_name)
expect(Gitlab::UsageDataCounters::HLLRedisCounter).to have_received(:track_event)
- .with(event_name, anything)
+ .with(event_name, values: unique_value)
end
def expect_snowplow_tracking(event_name)
@@ -33,23 +35,24 @@ RSpec.describe Gitlab::InternalEvents, :snowplow, feature_category: :product_ana
.with('InternalEventTracking', event_name, context: contexts)
end
- let_it_be(:user) { build(:user) }
- let_it_be(:project) { build(:project) }
+ let_it_be(:user) { build(:user, id: 1) }
+ let_it_be(:project) { build(:project, id: 2) }
let_it_be(:namespace) { project.namespace }
let(:fake_snowplow) { instance_double(Gitlab::Tracking::Destinations::Snowplow) }
let(:event_name) { 'g_edit_by_web_ide' }
+ let(:unique_value) { user.id }
it 'updates both RedisHLL and Snowplow', :aggregate_failures do
- params = { user_id: user.id, project_id: project.id, namespace_id: namespace.id }
+ params = { user: user, project: project, namespace: namespace }
described_class.track_event(event_name, **params)
expect_redis_hll_tracking(event_name)
expect_snowplow_tracking(event_name) # Add test for arguments
end
- it 'rescues error' do
- params = { user_id: user.id, project_id: project.id, namespace_id: namespace.id }
+ it 'rescues error', :aggregate_failures do
+ params = { user: user, project: project, namespace: namespace }
error = StandardError.new("something went wrong")
allow(fake_snowplow).to receive(:event).and_raise(error)
@@ -62,4 +65,68 @@ RSpec.describe Gitlab::InternalEvents, :snowplow, feature_category: :product_ana
expect { described_class.track_event(event_name, **params) }.not_to raise_error
end
+
+ it 'logs error on unknown event', :aggregate_failures do
+ expect(Gitlab::ErrorTracking).to receive(:track_and_raise_for_dev_exception)
+ .with(described_class::UnknownEventError, event_name: 'unknown_event', kwargs: {})
+
+ expect { described_class.track_event('unknown_event') }.not_to raise_error
+ end
+
+ it 'logs error on missing property' do
+ expect { described_class.track_event(event_name, merge_request_id: 1) }.not_to raise_error
+
+ expect(Gitlab::ErrorTracking).to have_received(:track_and_raise_for_dev_exception)
+ .with(described_class::InvalidPropertyError, event_name: event_name, kwargs: { merge_request_id: 1 })
+ end
+
+ context 'when unique property is missing' do
+ before do
+ allow(Gitlab::InternalEvents::EventDefinitions).to receive(:unique_property)
+ .and_raise(Gitlab::InternalEvents::EventDefinitions::InvalidMetricConfiguration)
+ end
+
+ it 'fails on missing unique property' do
+ expect { described_class.track_event(event_name, merge_request_id: 1) }.not_to raise_error
+
+ expect(Gitlab::ErrorTracking).to have_received(:track_and_raise_for_dev_exception)
+ end
+ end
+
+ context 'when unique key is defined' do
+ let(:event_name) { 'p_ci_templates_terraform_base_latest' }
+ let(:unique_value) { project.id }
+ let(:property_name) { :project }
+
+ before do
+ allow(Gitlab::InternalEvents::EventDefinitions).to receive(:unique_property)
+ .with(event_name)
+ .and_return(property_name)
+ end
+
+ it 'is used when logging to RedisHLL', :aggregate_failures do
+ described_class.track_event(event_name, user: user, project: project)
+
+ expect_redis_hll_tracking(event_name)
+ expect_snowplow_tracking(event_name)
+ end
+
+ context 'when property is missing' do
+ it 'logs error' do
+ expect { described_class.track_event(event_name, merge_request_id: 1) }.not_to raise_error
+
+ expect(Gitlab::ErrorTracking).to have_received(:track_and_raise_for_dev_exception)
+ .with(described_class::InvalidPropertyError, event_name: event_name, kwargs: { merge_request_id: 1 })
+ end
+ end
+
+ context 'when method does not exist on property' do
+ it 'logs error on missing method' do
+ expect { described_class.track_event(event_name, project: "a_string") }.not_to raise_error
+
+ expect(Gitlab::ErrorTracking).to have_received(:track_and_raise_for_dev_exception)
+ .with(described_class::InvalidMethodError, event_name: event_name, kwargs: { project: 'a_string' })
+ end
+ end
+ end
end