summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlfredo Sumaran <alfredo@gitlab.com>2016-08-24 12:29:27 -0500
committerAlfredo Sumaran <alfredo@gitlab.com>2016-09-07 15:27:14 -0500
commit8499de19c9bca4c43378b8a9cf2b6705f9cab647 (patch)
treee22d78a3b9ed7077e8c24f0bd72c4c08673af9ce
parent19e2bf1c21a853e45db0c18133e5f1b1234ad09f (diff)
downloadgitlab-ce-milestone-tab-badges.tar.gz
Ensure milestone counts work with no datagitlab-ce-milestone-tab-badges
Commit originally written by @smcgivern
-rw-r--r--app/helpers/milestones_helper.rb9
-rw-r--r--spec/helpers/milestones_helper_spec.rb36
2 files changed, 22 insertions, 23 deletions
diff --git a/app/helpers/milestones_helper.rb b/app/helpers/milestones_helper.rb
index b91f09f76ee..a11c313a6b8 100644
--- a/app/helpers/milestones_helper.rb
+++ b/app/helpers/milestones_helper.rb
@@ -36,14 +36,15 @@ module MilestonesHelper
end
# Returns count of milestones for different states
- # Uses explicit hash keys as the 'opened' state URL params differs from the db value
+ # Uses explicit hash keys as the 'opened' state URL params differs from the db value
# and we need to add the total
def milestone_counts(milestones)
counts = milestones.reorder(nil).group(:state).count
+
{
- opened: counts['active'],
- closed: counts['closed'],
- all: counts.values.sum
+ opened: counts['active'] || 0,
+ closed: counts['closed'] || 0,
+ all: counts.values.sum || 0
}
end
diff --git a/spec/helpers/milestones_helper_spec.rb b/spec/helpers/milestones_helper_spec.rb
index d65610723b0..28c2268f8d0 100644
--- a/spec/helpers/milestones_helper_spec.rb
+++ b/spec/helpers/milestones_helper_spec.rb
@@ -3,33 +3,31 @@ require 'spec_helper'
describe MilestonesHelper do
describe '#milestone_counts' do
let(:project) { FactoryGirl.create(:project) }
- let!(:milestone_1) { FactoryGirl.create(:active_milestone, project: project) }
- let!(:milestone_2) { FactoryGirl.create(:active_milestone, project: project) }
- let!(:milestone_3) { FactoryGirl.create(:closed_milestone, project: project) }
-
let(:counts) { helper.milestone_counts(project.milestones) }
- it 'returns a hash containing three items' do
- expect(counts.length).to eq 3
- end
+ context 'when there are milestones' do
+ let!(:milestone_1) { FactoryGirl.create(:active_milestone, project: project) }
+ let!(:milestone_2) { FactoryGirl.create(:active_milestone, project: project) }
+ let!(:milestone_3) { FactoryGirl.create(:closed_milestone, project: project) }
- it 'returns a hash containing "opened" key' do
- expect(counts.has_key?(:opened)).to eq true
+ it 'returns the correct counts' do
+ expect(counts).to eq(opened: 2, closed: 1, all: 3)
+ end
end
- it 'returns a hash containing "closed" key' do
- expect(counts.has_key?(:closed)).to eq true
- end
+ context 'when there are only milestones of one type' do
+ let!(:milestone_1) { FactoryGirl.create(:active_milestone, project: project) }
+ let!(:milestone_2) { FactoryGirl.create(:active_milestone, project: project) }
- it 'returns a hash containing "all" key' do
- expect(counts.has_key?(:all)).to eq true
+ it 'returns the correct counts' do
+ expect(counts).to eq(opened: 2, closed: 0, all: 2)
+ end
end
- it 'shows "all" object is the sum of "opened" and "closed" objects' do
- puts counts.as_json
- total = counts[:opened] + counts[:closed]
- expect(counts[:all]).to eq total
+ context 'when there are no milestones' do
+ it 'returns the correct counts' do
+ expect(counts).to eq(opened: 0, closed: 0, all: 0)
+ end
end
end
end
- \ No newline at end of file