From 6a211c3e5ec5e8080a552d2413a3cc3f5e256883 Mon Sep 17 00:00:00 2001 From: Eric Davis Date: Fri, 16 Jan 2009 16:06:12 -0800 Subject: [PATCH] Rate#for will now return the most current rate for the user matching the parameters. #1920 --- app/models/rate.rb | 4 +++- spec/models/rate_spec.rb | 21 ++++++++++++++++++--- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/app/models/rate.rb b/app/models/rate.rb index f08a6ef..cc6295d 100644 --- a/app/models/rate.rb +++ b/app/models/rate.rb @@ -33,6 +33,8 @@ class Rate < ActiveRecord::Base date ], :order => 'date_in_effect DESC') - nil + + return nil if rates.empty? + return rates[0].amount end end diff --git a/spec/models/rate_spec.rb b/spec/models/rate_spec.rb index cac710a..1c1aa98 100644 --- a/spec/models/rate_spec.rb +++ b/spec/models/rate_spec.rb @@ -156,8 +156,8 @@ describe Rate, 'for' do describe 'with a user, project, and date' do it 'should find all the rates for a user on the project before the date' do - rate1 = mock_model(Rate) - rate2 = mock_model(Rate) + rate1 = mock_model(Rate, :amount => 50.50) + rate2 = mock_model(Rate, :amount => 100.25) rates = [rate1, rate2] Rate.should_receive(:find).with(:all, { @@ -172,6 +172,21 @@ describe Rate, 'for' do end - it 'should return the value of the most recent rate found' + it 'should return the value of the most recent rate found' do + rate1 = mock_model(Rate, :amount => 50.50) + rate2 = mock_model(Rate, :amount => 100.25) + rates = [rate1, rate2] + + Rate.should_receive(:find).with(:all, { + :conditions => ["user_id IN (?) AND project_id IN (?) AND date_in_effect <= ?", + @user.id, + @project.id, + @date + ], + :order => 'date_in_effect DESC' + }).and_return(rates) + Rate.for(@user, @project, @date).should eql(rate1.amount) + + end end end