diff --git a/app/models/budget.rb b/app/models/budget.rb index 2347c96..0f82f96 100644 --- a/app/models/budget.rb +++ b/app/models/budget.rb @@ -50,6 +50,14 @@ class Budget return self.budget - self.spent end + def overruns + if self.left > 0 + return 0 + else + return self.left * -1 + end + end + def progress return 100 unless self.deliverables.size > 0 @@ -62,7 +70,6 @@ class Budget return (balance / self.budget).round end - # TODO def score return self.progress - self.budget_ratio end diff --git a/spec/models/budget_spec.rb b/spec/models/budget_spec.rb index b8a685c..b872709 100644 --- a/spec/models/budget_spec.rb +++ b/spec/models/budget_spec.rb @@ -241,3 +241,25 @@ describe Budget, '.left' do @budget.left.should eql(1500.0) end end + +describe Budget, '.overruns' do + it 'should be 0 if there is still unspent budget' do + @project = mock_model(Project) + Project.stub!(:find).with(@project.id).and_return(@project) + + @budget = Budget.new(@project.id) + @budget.should_receive(:left).and_return(1500.0) + + @budget.overruns.should eql(0) + end + + it 'should be calculated by the total budget and total spent of the deliverables' do + @project = mock_model(Project) + Project.stub!(:find).with(@project.id).and_return(@project) + + @budget = Budget.new(@project.id) + @budget.should_receive(:left).twice.and_return(-1500.0) + + @budget.overruns.should eql(1500.0) + end +end