diff options
author | Robert Speicher <rspeicher@gmail.com> | 2012-08-25 21:54:38 +0400 |
---|---|---|
committer | Robert Speicher <rspeicher@gmail.com> | 2012-08-25 22:19:16 +0400 |
commit | 580ce4f2d85f89e81825c3b5993fd3ee68f4d93a (patch) | |
tree | 3dd334a9c5d401eceb88092fa18cc4fb272cf1ac | |
parent | 232389f4e8ebaffd125985ce63439cea407e85d5 (diff) |
Minor cleanup to Milestone model and spec
Back-ported from my still-in-progress major cleanup.
-rw-r--r-- | app/models/milestone.rb | 14 | ||||
-rw-r--r-- | spec/models/milestone_spec.rb | 27 |
2 files changed, 21 insertions, 20 deletions
diff --git a/app/models/milestone.rb b/app/models/milestone.rb index 592c57f948c..d416fb630c5 100644 --- a/app/models/milestone.rb +++ b/app/models/milestone.rb @@ -28,17 +28,9 @@ class Milestone < ActiveRecord::Base end def percent_complete - @percent_complete ||= begin - total_i = self.issues.count - closed_i = self.issues.closed.count - if total_i > 0 - (closed_i * 100) / total_i - else - 100 - end - rescue => ex - 0 - end + ((self.issues.closed.count * 100) / self.issues.count).abs + rescue ZeroDivisionError + 100 end def expires_at diff --git a/spec/models/milestone_spec.rb b/spec/models/milestone_spec.rb index 880d3f307a3..e9acc4e2815 100644 --- a/spec/models/milestone_spec.rb +++ b/spec/models/milestone_spec.rb @@ -31,24 +31,33 @@ describe Milestone do it { milestone.should be_valid } - describe "Issues" do - before do + describe "#percent_complete" do + it "should not count open issues" do milestone.issues << issue + milestone.percent_complete.should == 0 end - it { milestone.percent_complete.should == 0 } + it "should count closed issues" do + issue.update_attributes(closed: true) + milestone.issues << issue + milestone.percent_complete.should == 100 + end - it do - issue.update_attributes closed: true + it "should recover from dividing by zero" do + milestone.issues.should_receive(:count).and_return(0) milestone.percent_complete.should == 100 end end - describe :expires_at do - before do - milestone.update_attributes due_date: Date.today + 1.day + describe "#expires_at" do + it "should be nil when due_date is unset" do + milestone.update_attributes(due_date: nil) + milestone.expires_at.should be_nil end - it { milestone.expires_at.should_not be_nil } + it "should not be nil when due_date is set" do + milestone.update_attributes(due_date: Date.tomorrow) + milestone.expires_at.should be_present + end end end |