Completed deliverable.spent calculation. #1136

This commit is contained in:
Eric Davis
2008-05-28 12:55:02 -07:00
parent 9df51da8f8
commit 65da8e7594
6 changed files with 64 additions and 1 deletions
+1 -1
View File
@@ -11,7 +11,7 @@ class Deliverable < ActiveRecord::Base
# TODO: mocked
def spent
0
0
end
# TODO LATER: Shouldn't require the default_done_ratio patch
+4
View File
@@ -5,4 +5,8 @@ class FixedDeliverable < Deliverable
def score
0
end
def spent
(self.progress.to_f / 100 ) * self.budget
end
end
+17
View File
@@ -1,3 +1,20 @@
class HourlyDeliverable < Deliverable
unloadable
def spent
return 0 unless self.issues.size > 0
total = 0.0
# Get all timelogs assigned
time_logs = self.issues.collect(&:time_entries).flatten
# Find each Member for their rate
time_logs.each do |time_log|
member = Member.find_by_user_id_and_project_id(time_log.user_id, time_log.project_id)
total += (member.rate * time_log.hours) unless member.nil? || member.rate.nil?
end
return total
end
end
+5
View File
@@ -212,4 +212,9 @@ describe Deliverable, '.progress' do
end
describe Deliverable, '.spent' do
it 'should always return 0 (abstract class)' do
@deliverable = Deliverable.new({ :subject => 'test' })
@deliverable.spent.should eql(0)
end
end
+9
View File
@@ -6,3 +6,12 @@ describe FixedDeliverable, '.score' do
@deliverable.score.should eql(0)
end
end
describe FixedDeliverable, '.spent' do
it 'should always equal the progress % * budget' do
@deliverable = FixedDeliverable.new({ :subject => 'test' })
@deliverable.stub!(:progress).and_return(50.0)
@deliverable.stub!(:budget).and_return(5000.0)
@deliverable.spent.should eql(2500.0)
end
end
+28
View File
@@ -0,0 +1,28 @@
require File.dirname(__FILE__) + '/../spec_helper'
describe HourlyDeliverable, '.spent' do
it 'should equal 0 if there are no issues for the deliverable' do
@deliverable = HourlyDeliverable.new({ :subject => 'test' })
@deliverable.should_receive(:issues).and_return([])
@deliverable.spent.should eql(0)
end
it 'should return the sum of the member timelogs' do
@project = mock_model(Project)
@user = mock_model(User)
@issue1 = mock_model(Issue)
@issue_1_time_entry = mock_model(TimeEntry, :issue_id => @issue1.id, :user_id => @user.id, :project_id => @project.id, :hours => 1.0)
@issue1.stub!(:time_entries).and_return([@issue_1_time_entry])
@member = mock_model(Member, :user => @user, :project => @project, :rate => 60.0)
Member.should_receive(:find_by_user_id_and_project_id).with(@user.id, @project.id).and_return(@member)
@deliverable = HourlyDeliverable.new({ :subject => 'test' })
@issues = [@issue1]
@deliverable.should_receive(:issues).twice.and_return(@issues)
@deliverable.spent.should eql(60.0)
end
end