Commit 580ce4f2d85f89e81825c3b5993fd3ee68f4d93a

Authored by Robert Speicher
1 parent 232389f4

Minor cleanup to Milestone model and spec

Back-ported from my still-in-progress major cleanup.
app/models/milestone.rb
@@ -28,17 +28,9 @@ class Milestone < ActiveRecord::Base @@ -28,17 +28,9 @@ class Milestone < ActiveRecord::Base
28 end 28 end
29 29
30 def percent_complete 30 def percent_complete
31 - @percent_complete ||= begin  
32 - total_i = self.issues.count  
33 - closed_i = self.issues.closed.count  
34 - if total_i > 0  
35 - (closed_i * 100) / total_i  
36 - else  
37 - 100  
38 - end  
39 - rescue => ex  
40 - 0  
41 - end 31 + ((self.issues.closed.count * 100) / self.issues.count).abs
  32 + rescue ZeroDivisionError
  33 + 100
42 end 34 end
43 35
44 def expires_at 36 def expires_at
spec/models/milestone_spec.rb
@@ -31,24 +31,33 @@ describe Milestone do @@ -31,24 +31,33 @@ describe Milestone do
31 31
32 it { milestone.should be_valid } 32 it { milestone.should be_valid }
33 33
34 - describe "Issues" do  
35 - before do 34 + describe "#percent_complete" do
  35 + it "should not count open issues" do
36 milestone.issues << issue 36 milestone.issues << issue
  37 + milestone.percent_complete.should == 0
37 end 38 end
38 39
39 - it { milestone.percent_complete.should == 0 } 40 + it "should count closed issues" do
  41 + issue.update_attributes(closed: true)
  42 + milestone.issues << issue
  43 + milestone.percent_complete.should == 100
  44 + end
40 45
41 - it do  
42 - issue.update_attributes closed: true 46 + it "should recover from dividing by zero" do
  47 + milestone.issues.should_receive(:count).and_return(0)
43 milestone.percent_complete.should == 100 48 milestone.percent_complete.should == 100
44 end 49 end
45 end 50 end
46 51
47 - describe :expires_at do  
48 - before do  
49 - milestone.update_attributes due_date: Date.today + 1.day 52 + describe "#expires_at" do
  53 + it "should be nil when due_date is unset" do
  54 + milestone.update_attributes(due_date: nil)
  55 + milestone.expires_at.should be_nil
50 end 56 end
51 57
52 - it { milestone.expires_at.should_not be_nil } 58 + it "should not be nil when due_date is set" do
  59 + milestone.update_attributes(due_date: Date.tomorrow)
  60 + milestone.expires_at.should be_present
  61 + end
53 end 62 end
54 end 63 end