diff --git a/app/helpers/milestones_helper.rb b/app/helpers/milestones_helper.rb index 22d8ecd3ecbf93ddf5b5ce5675483537f5c95b87..404a116d951afc67546435a75af52ad1365a71f8 100644 --- a/app/helpers/milestones_helper.rb +++ b/app/helpers/milestones_helper.rb @@ -38,12 +38,12 @@ module MilestonesHelper # Returns count of milestones for different states # 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(project:) - counts = @project.milestones.reorder(nil).group(:state).count() + def milestone_counts(milestones) + counts = milestones.reorder(nil).group(:state).count { opened: counts['active'], closed: counts['closed'], - all: counts['active'] + counts['closed'] + all: counts.values.sum } end diff --git a/app/views/shared/_milestones_filter.html.haml b/app/views/shared/_milestones_filter.html.haml index a2b17a94f8042d8d38aeec5d011dd08ba58e3e8f..4167f03da6427d0049b792f49bd22c5c53eff865 100644 --- a/app/views/shared/_milestones_filter.html.haml +++ b/app/views/shared/_milestones_filter.html.haml @@ -1,4 +1,4 @@ -- counts = milestone_counts(project: @project) +- counts = milestone_counts(@project.milestones) %ul.nav-links %li{class: ("active" if params[:state].blank? || params[:state] == 'opened')} diff --git a/spec/factories/milestones.rb b/spec/factories/milestones.rb index e9e85962fe4e6d30b5cfdfed3f8a6e8b767e1df5..84da71ed6dcce196a759e92d6e14fd73911a874a 100644 --- a/spec/factories/milestones.rb +++ b/spec/factories/milestones.rb @@ -3,10 +3,15 @@ FactoryGirl.define do title project + trait :active do + state "active" + end + trait :closed do - state :closed + state "closed" end + factory :active_milestone, traits: [:active] factory :closed_milestone, traits: [:closed] end end diff --git a/spec/helpers/milestones_helper_spec.rb b/spec/helpers/milestones_helper_spec.rb new file mode 100644 index 0000000000000000000000000000000000000000..8e23415bfe4bae1241ae5fd84da4e401ae1fe327 --- /dev/null +++ b/spec/helpers/milestones_helper_spec.rb @@ -0,0 +1,33 @@ +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 + it 'returns a hash containing "opened" key' do + expect(counts.has_key?(:opened)).to eq true + end + it 'returns a hash containing "closed" key' do + expect(counts.has_key?(:closed)).to eq true + end + it 'returns a hash containing "all" key' do + expect(counts.has_key?(:all)).to eq true + end + # This throws a "NoMethodError: undefined method `+' for nil:NilClass" error for line 27; can't figure out why it can't find the keys in the hash + # it 'shows "all" object is the sum of "opened" and "closed" objects' do + # total = counts[:opened] + counts[:closed] + # expect(counts[:all]).to eq total + # end + + end + +end