summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Kalderimis <alex.kalderimis@gmail.com>2019-07-19 11:37:31 -0400
committerAlex Kalderimis <alex.kalderimis@gmail.com>2019-07-19 11:39:04 -0400
commit55be8753e774ad7769f3144fde43a217b2820f10 (patch)
tree011088d9d1a43647c9b4047e620134f2df43abb0
parent2170a043b5062af270fd2d472032e3874d1fb9e8 (diff)
downloadgitlab-ce-wiki-usage-pings.tar.gz
Better tests for usage data counterswiki-usage-pings
This tests that all our counters have the same interface, required for merging their data, and that they have no conflicting keys.
-rw-r--r--lib/gitlab/usage_data.rb10
-rw-r--r--spec/lib/gitlab/usage_data_counters/web_ide_counter_spec.rb20
-rw-r--r--spec/lib/gitlab/usage_data_spec.rb30
3 files changed, 50 insertions, 10 deletions
diff --git a/lib/gitlab/usage_data.rb b/lib/gitlab/usage_data.rb
index dab682dea09..db1086c9cae 100644
--- a/lib/gitlab/usage_data.rb
+++ b/lib/gitlab/usage_data.rb
@@ -130,9 +130,15 @@ module Gitlab
}
end
+ # @return [Hash<Symbol, Integer>]
def usage_counters
- [Gitlab::UsageDataCounters::WikiPageCounter.totals,
- Gitlab::UsageDataCounters::WebIdeCounter.totals].reduce({}) { |a, b| a.merge(b) }
+ usage_data_counters.map(&:totals).reduce({}) { |a, b| a.merge(b) }
+ end
+
+ # @return [Array<#totals>] An array of objects that respond to `#totals`
+ def usage_data_counters
+ [Gitlab::UsageDataCounters::WikiPageCounter,
+ Gitlab::UsageDataCounters::WebIdeCounter]
end
def components_usage_data
diff --git a/spec/lib/gitlab/usage_data_counters/web_ide_counter_spec.rb b/spec/lib/gitlab/usage_data_counters/web_ide_counter_spec.rb
index b5e32d1875f..7a01f7d1de8 100644
--- a/spec/lib/gitlab/usage_data_counters/web_ide_counter_spec.rb
+++ b/spec/lib/gitlab/usage_data_counters/web_ide_counter_spec.rb
@@ -33,4 +33,24 @@ describe Gitlab::UsageDataCounters::WebIdeCounter, :clean_gitlab_redis_shared_st
it_behaves_like 'counter examples'
end
+
+ describe '.totals' do
+ commits = 5
+ merge_requests = 3
+ views = 2
+
+ before do
+ commits.times { described_class.increment_commits_count }
+ merge_requests.times { described_class.increment_merge_requests_count }
+ views.times { described_class.increment_views_count }
+ end
+
+ it 'can report all totals' do
+ expect(described_class.totals).to include(
+ web_ide_commits: commits,
+ web_ide_views: views,
+ web_ide_merge_requests: merge_requests
+ )
+ end
+ end
end
diff --git a/spec/lib/gitlab/usage_data_spec.rb b/spec/lib/gitlab/usage_data_spec.rb
index 562c20d9f72..2289d906944 100644
--- a/spec/lib/gitlab/usage_data_spec.rb
+++ b/spec/lib/gitlab/usage_data_spec.rb
@@ -71,14 +71,6 @@ describe Gitlab::UsageData do
)
end
- it 'calls expected usage data methods' do
- expect(Gitlab::UsageDataCounters::WebIdeCounter).to receive(:total_commits_count)
- expect(Gitlab::UsageDataCounters::WebIdeCounter).to receive(:total_merge_requests_count)
- expect(Gitlab::UsageDataCounters::WebIdeCounter).to receive(:total_views_count)
-
- subject
- end
-
it "gathers usage counts" do
expected_keys = %i(
assignee_lists
@@ -198,6 +190,28 @@ describe Gitlab::UsageData do
end
end
+ describe '#usage_data_counters' do
+ subject { described_class.usage_data_counters }
+
+ it { is_expected.to all(respond_to :totals) }
+
+ describe 'the results of calling #totals on all objects in the array' do
+ subject { described_class.usage_data_counters.map(&:totals) }
+
+ it do
+ is_expected
+ .to all(be_a Hash)
+ .and all(have_attributes(keys: all(be_a Symbol), values: all(be_a Integer)))
+ end
+ end
+
+ it 'does not have any conflicts' do
+ all_keys = subject.flat_map { |counter| counter.totals.keys }
+
+ expect(all_keys.size).to eq all_keys.to_set.size
+ end
+ end
+
describe '#features_usage_data_ce' do
subject { described_class.features_usage_data_ce }