diff options
Diffstat (limited to 'spec/lib/gitlab/usage_data_counters/track_unique_events_spec.rb')
-rw-r--r-- | spec/lib/gitlab/usage_data_counters/track_unique_events_spec.rb | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/spec/lib/gitlab/usage_data_counters/track_unique_events_spec.rb b/spec/lib/gitlab/usage_data_counters/track_unique_events_spec.rb new file mode 100644 index 00000000000..8f5f1347ce8 --- /dev/null +++ b/spec/lib/gitlab/usage_data_counters/track_unique_events_spec.rb @@ -0,0 +1,72 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Gitlab::UsageDataCounters::TrackUniqueEvents, :clean_gitlab_redis_shared_state do + subject(:track_unique_events) { described_class } + + let(:time) { Time.zone.now } + + def track_event(params) + track_unique_events.track_event(params) + end + + def count_unique(params) + track_unique_events.count_unique_events(params) + end + + context 'tracking an event' do + context 'when tracking successfully' do + context 'when the application setting is enabled' do + context 'when the target and the action is valid' do + before do + stub_application_setting(usage_ping_enabled: true) + end + + it 'tracks and counts the events as expected' do + project = Event::TARGET_TYPES[:project] + design = Event::TARGET_TYPES[:design] + wiki = Event::TARGET_TYPES[:wiki] + + expect(track_event(event_action: :pushed, event_target: project, author_id: 1)).to be_truthy + expect(track_event(event_action: :pushed, event_target: project, author_id: 1)).to be_truthy + expect(track_event(event_action: :pushed, event_target: project, author_id: 2)).to be_truthy + expect(track_event(event_action: :pushed, event_target: project, author_id: 3)).to be_truthy + expect(track_event(event_action: :pushed, event_target: project, author_id: 4, time: time - 3.days)).to be_truthy + + expect(track_event(event_action: :destroyed, event_target: design, author_id: 3)).to be_truthy + expect(track_event(event_action: :created, event_target: design, author_id: 4)).to be_truthy + expect(track_event(event_action: :updated, event_target: design, author_id: 5)).to be_truthy + + expect(track_event(event_action: :destroyed, event_target: wiki, author_id: 5)).to be_truthy + expect(track_event(event_action: :created, event_target: wiki, author_id: 3)).to be_truthy + expect(track_event(event_action: :updated, event_target: wiki, author_id: 4)).to be_truthy + + expect(count_unique(event_action: described_class::PUSH_ACTION, date_from: time, date_to: Date.today)).to eq(3) + expect(count_unique(event_action: described_class::PUSH_ACTION, date_from: time - 5.days, date_to: Date.tomorrow)).to eq(4) + expect(count_unique(event_action: described_class::DESIGN_ACTION, date_from: time - 5.days, date_to: Date.today)).to eq(3) + expect(count_unique(event_action: described_class::WIKI_ACTION, date_from: time - 5.days, date_to: Date.today)).to eq(3) + expect(count_unique(event_action: described_class::PUSH_ACTION, date_from: time - 5.days, date_to: time - 2.days)).to eq(1) + end + end + end + end + + context 'when tracking unsuccessfully' do + using RSpec::Parameterized::TableSyntax + + where(:target, :action) do + Project | :invalid_action + :invalid_target | :pushed + Project | :created + end + + with_them do + it 'returns the expected values' do + expect(track_event(event_action: action, event_target: target, author_id: 2)).to be_nil + expect(count_unique(event_action: described_class::PUSH_ACTION, date_from: time, date_to: Date.today)).to eq(0) + end + end + end + end +end |