diff options
Diffstat (limited to 'spec/lib/gitlab/usage_data_counters')
-rw-r--r-- | spec/lib/gitlab/usage_data_counters/editor_unique_counter_spec.rb | 89 | ||||
-rw-r--r-- | spec/lib/gitlab/usage_data_counters/hll_redis_counter_spec.rb | 277 | ||||
-rw-r--r-- | spec/lib/gitlab/usage_data_counters/issue_activity_unique_counter_spec.rb | 111 | ||||
-rw-r--r-- | spec/lib/gitlab/usage_data_counters/kubernetes_agent_counter_spec.rb | 23 | ||||
-rw-r--r-- | spec/lib/gitlab/usage_data_counters/redis_counter_spec.rb | 48 | ||||
-rw-r--r-- | spec/lib/gitlab/usage_data_counters/track_unique_events_spec.rb (renamed from spec/lib/gitlab/usage_data_counters/track_unique_actions_spec.rb) | 19 |
6 files changed, 475 insertions, 92 deletions
diff --git a/spec/lib/gitlab/usage_data_counters/editor_unique_counter_spec.rb b/spec/lib/gitlab/usage_data_counters/editor_unique_counter_spec.rb new file mode 100644 index 00000000000..2a674557b76 --- /dev/null +++ b/spec/lib/gitlab/usage_data_counters/editor_unique_counter_spec.rb @@ -0,0 +1,89 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Gitlab::UsageDataCounters::EditorUniqueCounter, :clean_gitlab_redis_shared_state do + let(:user1) { build(:user, id: 1) } + let(:user2) { build(:user, id: 2) } + let(:user3) { build(:user, id: 3) } + let(:time) { Time.zone.now } + + shared_examples 'tracks and counts action' do + before do + stub_application_setting(usage_ping_enabled: true) + end + + specify do + aggregate_failures do + expect(track_action(author: user1)).to be_truthy + expect(track_action(author: user1)).to be_truthy + expect(track_action(author: user2)).to be_truthy + expect(track_action(author: user3, time: time - 3.days)).to be_truthy + + expect(count_unique(date_from: time, date_to: Date.today)).to eq(2) + expect(count_unique(date_from: time - 5.days, date_to: Date.tomorrow)).to eq(3) + end + end + + it 'does not track edit actions if author is not present' do + expect(track_action(author: nil)).to be_nil + end + + context 'when feature flag track_editor_edit_actions is disabled' do + it 'does not track edit actions' do + stub_feature_flags(track_editor_edit_actions: false) + + expect(track_action(author: user1)).to be_nil + end + end + end + + context 'for web IDE edit actions' do + it_behaves_like 'tracks and counts action' do + def track_action(params) + described_class.track_web_ide_edit_action(params) + end + + def count_unique(params) + described_class.count_web_ide_edit_actions(params) + end + end + end + + context 'for SFE edit actions' do + it_behaves_like 'tracks and counts action' do + def track_action(params) + described_class.track_sfe_edit_action(params) + end + + def count_unique(params) + described_class.count_sfe_edit_actions(params) + end + end + end + + context 'for snippet editor edit actions' do + it_behaves_like 'tracks and counts action' do + def track_action(params) + described_class.track_snippet_editor_edit_action(params) + end + + def count_unique(params) + described_class.count_snippet_editor_edit_actions(params) + end + end + end + + it 'can return the count of actions per user deduplicated ' do + described_class.track_web_ide_edit_action(author: user1) + described_class.track_snippet_editor_edit_action(author: user1) + described_class.track_sfe_edit_action(author: user1) + described_class.track_web_ide_edit_action(author: user2, time: time - 2.days) + described_class.track_web_ide_edit_action(author: user3, time: time - 3.days) + described_class.track_snippet_editor_edit_action(author: user3, time: time - 3.days) + described_class.track_sfe_edit_action(author: user3, time: time - 3.days) + + expect(described_class.count_edit_using_editor(date_from: time, date_to: Date.today)).to eq(1) + expect(described_class.count_edit_using_editor(date_from: time - 5.days, date_to: Date.tomorrow)).to eq(3) + end +end diff --git a/spec/lib/gitlab/usage_data_counters/hll_redis_counter_spec.rb b/spec/lib/gitlab/usage_data_counters/hll_redis_counter_spec.rb index 2ab349a67d9..f881da71251 100644 --- a/spec/lib/gitlab/usage_data_counters/hll_redis_counter_spec.rb +++ b/spec/lib/gitlab/usage_data_counters/hll_redis_counter_spec.rb @@ -8,25 +8,6 @@ RSpec.describe Gitlab::UsageDataCounters::HLLRedisCounter, :clean_gitlab_redis_s let(:entity3) { '34rfjuuy-ce56-sa35-ds34-dfer567dfrf2' } let(:entity4) { '8b9a2671-2abf-4bec-a682-22f6a8f7bf31' } - let(:weekly_event) { 'g_analytics_contribution' } - let(:daily_event) { 'g_search' } - let(:different_aggregation) { 'different_aggregation' } - - let(:known_events) do - [ - { name: "g_analytics_contribution", redis_slot: "analytics", category: "analytics", expiry: 84, aggregation: "weekly" }, - { name: "g_analytics_valuestream", redis_slot: "analytics", category: "analytics", expiry: 84, aggregation: "daily" }, - { name: "g_analytics_productivity", redis_slot: "analytics", category: "productivity", expiry: 84, aggregation: "weekly" }, - { name: "g_compliance_dashboard", redis_slot: "compliance", category: "compliance", aggregation: "weekly" }, - { name: "g_search", category: "global", aggregation: "daily" }, - { name: "different_aggregation", category: "global", aggregation: "monthly" } - ].map(&:with_indifferent_access) - end - - before do - allow(described_class).to receive(:known_events).and_return(known_events) - end - around do |example| # We need to freeze to a reference time # because visits are grouped by the week number in the year @@ -37,77 +18,239 @@ RSpec.describe Gitlab::UsageDataCounters::HLLRedisCounter, :clean_gitlab_redis_s Timecop.freeze(reference_time) { example.run } end - describe '.track_event' do - it "raise error if metrics don't have same aggregation" do - expect { described_class.track_event(entity1, different_aggregation, Date.current) } .to raise_error(Gitlab::UsageDataCounters::HLLRedisCounter::UnknownAggregation) + describe '.categories' do + it 'gets all unique category names' do + expect(described_class.categories).to contain_exactly('analytics', 'compliance', 'ide_edit', 'search', 'source_code', 'incident_management', 'issues_edit') end + end + + describe 'known_events' do + let(:weekly_event) { 'g_analytics_contribution' } + let(:daily_event) { 'g_analytics_search' } + let(:analytics_slot_event) { 'g_analytics_contribution' } + let(:compliance_slot_event) { 'g_compliance_dashboard' } + let(:category_analytics_event) { 'g_analytics_search' } + let(:category_productivity_event) { 'g_analytics_productivity' } + let(:no_slot) { 'no_slot' } + let(:different_aggregation) { 'different_aggregation' } + let(:custom_daily_event) { 'g_analytics_custom' } - it 'raise error if metrics of unknown aggregation' do - expect { described_class.track_event(entity1, 'unknown', Date.current) } .to raise_error(Gitlab::UsageDataCounters::HLLRedisCounter::UnknownEvent) + let(:global_category) { 'global' } + let(:compliance_category) {'compliance' } + let(:productivity_category) {'productivity' } + let(:analytics_category) { 'analytics' } + + let(:known_events) do + [ + { name: weekly_event, redis_slot: "analytics", category: analytics_category, expiry: 84, aggregation: "weekly" }, + { name: daily_event, redis_slot: "analytics", category: analytics_category, expiry: 84, aggregation: "daily" }, + { name: category_productivity_event, redis_slot: "analytics", category: productivity_category, aggregation: "weekly" }, + { name: compliance_slot_event, redis_slot: "compliance", category: compliance_category, aggregation: "weekly" }, + { name: no_slot, category: global_category, aggregation: "daily" }, + { name: different_aggregation, category: global_category, aggregation: "monthly" } + ].map(&:with_indifferent_access) end - end - describe '.unique_events' do before do - # events in current week, should not be counted as week is not complete - described_class.track_event(entity1, weekly_event, Date.current) - described_class.track_event(entity2, weekly_event, Date.current) + allow(described_class).to receive(:known_events).and_return(known_events) + end - # Events last week - described_class.track_event(entity1, weekly_event, 2.days.ago) - described_class.track_event(entity1, weekly_event, 2.days.ago) + describe '.events_for_category' do + it 'gets the event names for given category' do + expect(described_class.events_for_category(:analytics)).to contain_exactly(weekly_event, daily_event) + end + end - # Events 2 weeks ago - described_class.track_event(entity1, weekly_event, 2.weeks.ago) + describe '.track_event' do + context 'when usage_ping is disabled' do + it 'does not track the event' do + stub_application_setting(usage_ping_enabled: false) - # Events 4 weeks ago - described_class.track_event(entity3, weekly_event, 4.weeks.ago) - described_class.track_event(entity4, weekly_event, 29.days.ago) + described_class.track_event(entity1, weekly_event, Date.current) - # events in current day should be counted in daily aggregation - described_class.track_event(entity1, daily_event, Date.current) - described_class.track_event(entity2, daily_event, Date.current) + expect(Gitlab::Redis::HLL).not_to receive(:add) + end + end - # Events last week - described_class.track_event(entity1, daily_event, 2.days.ago) - described_class.track_event(entity1, daily_event, 2.days.ago) + context 'when usage_ping is enabled' do + before do + stub_application_setting(usage_ping_enabled: true) + end - # Events 2 weeks ago - described_class.track_event(entity1, daily_event, 14.days.ago) + it "raise error if metrics don't have same aggregation" do + expect { described_class.track_event(entity1, different_aggregation, Date.current) } .to raise_error(Gitlab::UsageDataCounters::HLLRedisCounter::UnknownAggregation) + end - # Events 4 weeks ago - described_class.track_event(entity3, daily_event, 28.days.ago) - described_class.track_event(entity4, daily_event, 29.days.ago) - end + it 'raise error if metrics of unknown aggregation' do + expect { described_class.track_event(entity1, 'unknown', Date.current) } .to raise_error(Gitlab::UsageDataCounters::HLLRedisCounter::UnknownEvent) + end - it 'raise error if metrics are not in the same slot' do - expect { described_class.unique_events(event_names: %w(g_analytics_contribution g_compliance_dashboard), start_date: 4.weeks.ago, end_date: Date.current) }.to raise_error('Events should be in same slot') - end + context 'for weekly events' do + it 'sets the keys in Redis to expire automatically after the given expiry time' do + described_class.track_event(entity1, "g_analytics_contribution") - it 'raise error if metrics are not in the same category' do - expect { described_class.unique_events(event_names: %w(g_analytics_contribution g_analytics_productivity), start_date: 4.weeks.ago, end_date: Date.current) }.to raise_error('Events should be in same category') - end + Gitlab::Redis::SharedState.with do |redis| + keys = redis.scan_each(match: "g_{analytics}_contribution-*").to_a + expect(keys).not_to be_empty + + keys.each do |key| + expect(redis.ttl(key)).to be_within(5.seconds).of(12.weeks) + end + end + end + + it 'sets the keys in Redis to expire automatically after 6 weeks by default' do + described_class.track_event(entity1, "g_compliance_dashboard") + + Gitlab::Redis::SharedState.with do |redis| + keys = redis.scan_each(match: "g_{compliance}_dashboard-*").to_a + expect(keys).not_to be_empty + + keys.each do |key| + expect(redis.ttl(key)).to be_within(5.seconds).of(6.weeks) + end + end + end + end + + context 'for daily events' do + it 'sets the keys in Redis to expire after the given expiry time' do + described_class.track_event(entity1, "g_analytics_search") + + Gitlab::Redis::SharedState.with do |redis| + keys = redis.scan_each(match: "*-g_{analytics}_search").to_a + expect(keys).not_to be_empty + + keys.each do |key| + expect(redis.ttl(key)).to be_within(5.seconds).of(84.days) + end + end + end + + it 'sets the keys in Redis to expire after 29 days by default' do + described_class.track_event(entity1, "no_slot") - it "raise error if metrics don't have same aggregation" do - expect { described_class.unique_events(event_names: %w(g_analytics_contribution g_analytics_valuestream), start_date: 4.weeks.ago, end_date: Date.current) }.to raise_error('Events should have same aggregation level') + Gitlab::Redis::SharedState.with do |redis| + keys = redis.scan_each(match: "*-{no_slot}").to_a + expect(keys).not_to be_empty + + keys.each do |key| + expect(redis.ttl(key)).to be_within(5.seconds).of(29.days) + end + end + end + end + end end - context 'when data for the last complete week' do - it { expect(described_class.unique_events(event_names: weekly_event, start_date: 1.week.ago, end_date: Date.current)).to eq(1) } + describe '.unique_events' do + before do + # events in current week, should not be counted as week is not complete + described_class.track_event(entity1, weekly_event, Date.current) + described_class.track_event(entity2, weekly_event, Date.current) + + # Events last week + described_class.track_event(entity1, weekly_event, 2.days.ago) + described_class.track_event(entity1, weekly_event, 2.days.ago) + described_class.track_event(entity1, no_slot, 2.days.ago) + + # Events 2 weeks ago + described_class.track_event(entity1, weekly_event, 2.weeks.ago) + + # Events 4 weeks ago + described_class.track_event(entity3, weekly_event, 4.weeks.ago) + described_class.track_event(entity4, weekly_event, 29.days.ago) + + # events in current day should be counted in daily aggregation + described_class.track_event(entity1, daily_event, Date.current) + described_class.track_event(entity2, daily_event, Date.current) + + # Events last week + described_class.track_event(entity1, daily_event, 2.days.ago) + described_class.track_event(entity1, daily_event, 2.days.ago) + + # Events 2 weeks ago + described_class.track_event(entity1, daily_event, 14.days.ago) + + # Events 4 weeks ago + described_class.track_event(entity3, daily_event, 28.days.ago) + described_class.track_event(entity4, daily_event, 29.days.ago) + end + + it 'raise error if metrics are not in the same slot' do + expect { described_class.unique_events(event_names: [compliance_slot_event, analytics_slot_event], start_date: 4.weeks.ago, end_date: Date.current) }.to raise_error('Events should be in same slot') + end + + it 'raise error if metrics are not in the same category' do + expect { described_class.unique_events(event_names: [category_analytics_event, category_productivity_event], start_date: 4.weeks.ago, end_date: Date.current) }.to raise_error('Events should be in same category') + end + + it "raise error if metrics don't have same aggregation" do + expect { described_class.unique_events(event_names: [daily_event, weekly_event], start_date: 4.weeks.ago, end_date: Date.current) }.to raise_error('Events should have same aggregation level') + end + + context 'when data for the last complete week' do + it { expect(described_class.unique_events(event_names: weekly_event, start_date: 1.week.ago, end_date: Date.current)).to eq(1) } + end + + context 'when data for the last 4 complete weeks' do + it { expect(described_class.unique_events(event_names: weekly_event, start_date: 4.weeks.ago, end_date: Date.current)).to eq(2) } + end + + context 'when data for the week 4 weeks ago' do + it { expect(described_class.unique_events(event_names: weekly_event, start_date: 4.weeks.ago, end_date: 3.weeks.ago)).to eq(1) } + end + + context 'when using daily aggregation' do + it { expect(described_class.unique_events(event_names: daily_event, start_date: 7.days.ago, end_date: Date.current)).to eq(2) } + it { expect(described_class.unique_events(event_names: daily_event, start_date: 28.days.ago, end_date: Date.current)).to eq(3) } + it { expect(described_class.unique_events(event_names: daily_event, start_date: 28.days.ago, end_date: 21.days.ago)).to eq(1) } + end + + context 'when no slot is set' do + it { expect(described_class.unique_events(event_names: no_slot, start_date: 7.days.ago, end_date: Date.current)).to eq(1) } + end end + end - context 'when data for the last 4 complete weeks' do - it { expect(described_class.unique_events(event_names: weekly_event, start_date: 4.weeks.ago, end_date: Date.current)).to eq(2) } + describe 'unique_events_data' do + let(:known_events) do + [ + { name: 'event1_slot', redis_slot: "slot", category: 'category1', aggregation: "weekly" }, + { name: 'event2_slot', redis_slot: "slot", category: 'category1', aggregation: "weekly" }, + { name: 'event3', category: 'category2', aggregation: "weekly" }, + { name: 'event4', category: 'category2', aggregation: "weekly" } + ].map(&:with_indifferent_access) end - context 'when data for the week 4 weeks ago' do - it { expect(described_class.unique_events(event_names: weekly_event, start_date: 4.weeks.ago, end_date: 3.weeks.ago)).to eq(1) } + before do + allow(described_class).to receive(:known_events).and_return(known_events) + allow(described_class).to receive(:categories).and_return(%w(category1 category2)) + + described_class.track_event(entity1, 'event1_slot', 2.days.ago) + described_class.track_event(entity2, 'event2_slot', 2.days.ago) + described_class.track_event(entity3, 'event2_slot', 2.weeks.ago) + + # events in different slots + described_class.track_event(entity2, 'event3', 2.days.ago) + described_class.track_event(entity2, 'event4', 2.days.ago) end - context 'when using daily aggregation' do - it { expect(described_class.unique_events(event_names: daily_event, start_date: 7.days.ago, end_date: Date.current)).to eq(2) } - it { expect(described_class.unique_events(event_names: daily_event, start_date: 28.days.ago, end_date: Date.current)).to eq(3) } - it { expect(described_class.unique_events(event_names: daily_event, start_date: 28.days.ago, end_date: 21.days.ago)).to eq(1) } + it 'returns the number of unique events for all known events' do + results = { + 'category1' => { + 'event1_slot' => 1, + 'event2_slot' => 1, + 'category1_total_unique_counts_weekly' => 2, + 'category1_total_unique_counts_monthly' => 3 + }, + 'category2' => { + 'event3' => 1, + 'event4' => 1 + } + } + + expect(subject.unique_events_data).to eq(results) end end end diff --git a/spec/lib/gitlab/usage_data_counters/issue_activity_unique_counter_spec.rb b/spec/lib/gitlab/usage_data_counters/issue_activity_unique_counter_spec.rb new file mode 100644 index 00000000000..479fe36bcdd --- /dev/null +++ b/spec/lib/gitlab/usage_data_counters/issue_activity_unique_counter_spec.rb @@ -0,0 +1,111 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Gitlab::UsageDataCounters::IssueActivityUniqueCounter, :clean_gitlab_redis_shared_state do + let(:user1) { build(:user, id: 1) } + let(:user2) { build(:user, id: 2) } + let(:user3) { build(:user, id: 3) } + let(:time) { Time.zone.now } + + shared_examples 'tracks and counts action' do + before do + stub_application_setting(usage_ping_enabled: true) + end + + def count_unique(date_from:, date_to:) + Gitlab::UsageDataCounters::HLLRedisCounter.unique_events(event_names: action, start_date: date_from, end_date: date_to) + end + + specify do + aggregate_failures do + expect(track_action(author: user1)).to be_truthy + expect(track_action(author: user1)).to be_truthy + expect(track_action(author: user2)).to be_truthy + expect(track_action(author: user3, time: time - 3.days)).to be_truthy + + expect(count_unique(date_from: time, date_to: time)).to eq(2) + expect(count_unique(date_from: time - 5.days, date_to: 1.day.since(time))).to eq(3) + end + end + + it 'does not track edit actions if author is not present' do + expect(track_action(author: nil)).to be_nil + end + + context 'when feature flag track_issue_activity_actions is disabled' do + it 'does not track edit actions' do + stub_feature_flags(track_issue_activity_actions: false) + + expect(track_action(author: user1)).to be_nil + end + end + end + + context 'for Issue title edit actions' do + it_behaves_like 'tracks and counts action' do + let(:action) { described_class::ISSUE_TITLE_CHANGED } + + def track_action(params) + described_class.track_issue_title_changed_action(params) + end + end + end + + context 'for Issue description edit actions' do + it_behaves_like 'tracks and counts action' do + let(:action) { described_class::ISSUE_DESCRIPTION_CHANGED } + + def track_action(params) + described_class.track_issue_description_changed_action(params) + end + end + end + + context 'for Issue assignee edit actions' do + it_behaves_like 'tracks and counts action' do + let(:action) { described_class::ISSUE_ASSIGNEE_CHANGED } + + def track_action(params) + described_class.track_issue_assignee_changed_action(params) + end + end + end + + context 'for Issue make confidential actions' do + it_behaves_like 'tracks and counts action' do + let(:action) { described_class::ISSUE_MADE_CONFIDENTIAL } + + def track_action(params) + described_class.track_issue_made_confidential_action(params) + end + end + end + + context 'for Issue make visible actions' do + it_behaves_like 'tracks and counts action' do + let(:action) { described_class::ISSUE_MADE_VISIBLE } + + def track_action(params) + described_class.track_issue_made_visible_action(params) + end + end + end + + it 'can return the count of actions per user deduplicated', :aggregate_failures do + described_class.track_issue_title_changed_action(author: user1) + described_class.track_issue_description_changed_action(author: user1) + described_class.track_issue_assignee_changed_action(author: user1) + described_class.track_issue_title_changed_action(author: user2, time: time - 2.days) + described_class.track_issue_title_changed_action(author: user3, time: time - 3.days) + described_class.track_issue_description_changed_action(author: user3, time: time - 3.days) + described_class.track_issue_assignee_changed_action(author: user3, time: time - 3.days) + + events = Gitlab::UsageDataCounters::HLLRedisCounter.events_for_category(described_class::ISSUE_CATEGORY) + today_count = Gitlab::UsageDataCounters::HLLRedisCounter.unique_events(event_names: events, start_date: time, end_date: time) + week_count = Gitlab::UsageDataCounters::HLLRedisCounter.unique_events(event_names: events, start_date: time - 5.days, end_date: 1.day.since(time)) + + expect(today_count).to eq(1) + expect(week_count).to eq(3) + end +end diff --git a/spec/lib/gitlab/usage_data_counters/kubernetes_agent_counter_spec.rb b/spec/lib/gitlab/usage_data_counters/kubernetes_agent_counter_spec.rb new file mode 100644 index 00000000000..8f9a3e0cd9e --- /dev/null +++ b/spec/lib/gitlab/usage_data_counters/kubernetes_agent_counter_spec.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Gitlab::UsageDataCounters::KubernetesAgentCounter do + it_behaves_like 'a redis usage counter', 'Kubernetes Agent', :gitops_sync + + it_behaves_like 'a redis usage counter with totals', :kubernetes_agent, gitops_sync: 1 + + describe '.increment_gitops_sync' do + it 'increments the gtops_sync counter by the new increment amount' do + described_class.increment_gitops_sync(7) + described_class.increment_gitops_sync(2) + described_class.increment_gitops_sync(0) + + expect(described_class.totals).to eq(kubernetes_agent_gitops_sync: 9) + end + + it 'raises for negative numbers' do + expect { described_class.increment_gitops_sync(-1) }.to raise_error(ArgumentError) + end + end +end diff --git a/spec/lib/gitlab/usage_data_counters/redis_counter_spec.rb b/spec/lib/gitlab/usage_data_counters/redis_counter_spec.rb index be528b081c5..d4f6110b3df 100644 --- a/spec/lib/gitlab/usage_data_counters/redis_counter_spec.rb +++ b/spec/lib/gitlab/usage_data_counters/redis_counter_spec.rb @@ -11,23 +11,47 @@ RSpec.describe Gitlab::UsageDataCounters::RedisCounter, :clean_gitlab_redis_shar stub_application_setting(usage_ping_enabled: setting_value) end - context 'when usage_ping is disabled' do - let(:setting_value) { false } + describe '.increment' do + context 'when usage_ping is disabled' do + let(:setting_value) { false } + + it 'counter is not increased' do + expect do + subject.increment(redis_key) + end.not_to change { subject.total_count(redis_key) } + end + end + + context 'when usage_ping is enabled' do + let(:setting_value) { true } - it 'counter is not increased' do - expect do - subject.increment(redis_key) - end.not_to change { subject.total_count(redis_key) } + it 'counter is increased' do + expect do + subject.increment(redis_key) + end.to change { subject.total_count(redis_key) }.by(1) + end end end - context 'when usage_ping is enabled' do - let(:setting_value) { true } + describe '.increment_by' do + context 'when usage_ping is disabled' do + let(:setting_value) { false } + + it 'counter is not increased' do + expect do + subject.increment_by(redis_key, 3) + end.not_to change { subject.total_count(redis_key) } + end + end + + context 'when usage_ping is enabled' do + let(:setting_value) { true } - it 'counter is increased' do - expect do - subject.increment(redis_key) - end.to change { subject.total_count(redis_key) }.by(1) + it 'counter is increased' do + expect do + subject.increment_by(redis_key, 3) + end.to change { subject.total_count(redis_key) }.by(3) + end end end end diff --git a/spec/lib/gitlab/usage_data_counters/track_unique_actions_spec.rb b/spec/lib/gitlab/usage_data_counters/track_unique_events_spec.rb index bd348666729..8f5f1347ce8 100644 --- a/spec/lib/gitlab/usage_data_counters/track_unique_actions_spec.rb +++ b/spec/lib/gitlab/usage_data_counters/track_unique_events_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Gitlab::UsageDataCounters::TrackUniqueActions, :clean_gitlab_redis_shared_state do +RSpec.describe Gitlab::UsageDataCounters::TrackUniqueEvents, :clean_gitlab_redis_shared_state do subject(:track_unique_events) { described_class } let(:time) { Time.zone.now } @@ -12,7 +12,7 @@ RSpec.describe Gitlab::UsageDataCounters::TrackUniqueActions, :clean_gitlab_redi end def count_unique(params) - track_unique_events.count_unique(params) + track_unique_events.count_unique_events(params) end context 'tracking an event' do @@ -33,17 +33,14 @@ RSpec.describe Gitlab::UsageDataCounters::TrackUniqueActions, :clean_gitlab_redi 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: :created, event_target: project, author_id: 5, 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: :pushed, event_target: design, author_id: 6)).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(track_event(event_action: :pushed, event_target: wiki, author_id: 6)).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) @@ -58,17 +55,13 @@ RSpec.describe Gitlab::UsageDataCounters::TrackUniqueActions, :clean_gitlab_redi context 'when tracking unsuccessfully' do using RSpec::Parameterized::TableSyntax - where(:application_setting, :target, :action) do - true | Project | :invalid_action - false | Project | :pushed - true | :invalid_target | :pushed + where(:target, :action) do + Project | :invalid_action + :invalid_target | :pushed + Project | :created end with_them do - before do - stub_application_setting(usage_ping_enabled: application_setting) - end - 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) |