From c97979bd0622d723aa35eeb76dfd2554d5bf44bf Mon Sep 17 00:00:00 2001 From: Eric Davis Date: Wed, 6 Oct 2010 13:15:17 -0700 Subject: [PATCH] [#4604] Clear and recalculate the #cost on Rate#destroy --- app/models/rate.rb | 1 + test/unit/rate_test.rb | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/app/models/rate.rb b/app/models/rate.rb index 5416215..bb47a8d 100644 --- a/app/models/rate.rb +++ b/app/models/rate.rb @@ -13,6 +13,7 @@ class Rate < ActiveRecord::Base before_save :unlocked? after_save :update_time_entry_cost_cache before_destroy :unlocked? + after_destroy :update_time_entry_cost_cache named_scope :history_for_user, lambda { |user, order| { diff --git a/test/unit/rate_test.rb b/test/unit/rate_test.rb index 62ec0f5..0223b00 100644 --- a/test/unit/rate_test.rb +++ b/test/unit/rate_test.rb @@ -106,6 +106,32 @@ class RateTest < ActiveSupport::TestCase end + context "after destroy" do + should "recalculate all of the cached cost of all Time Entries for the user" do + @user = User.generate! + @project = Project.generate! + @date = Date.today.to_s + @past_date = 1.month.ago.strftime('%Y-%m-%d') + @rate = Rate.generate!(:user => @user, :project => @project, :date_in_effect => @date, :amount => 200.0) + @old_rate = Rate.generate!(:user => @user, :project => @project, :date_in_effect => 2.months.ago.strftime('%Y-%m-%d'), :amount => 10.0) + + @time_entry1 = TimeEntry.generate!({:user => @user, :project => @project, :spent_on => @date, :hours => 10.0, :activity => TimeEntryActivity.generate!}) + @time_entry2 = TimeEntry.generate!({:user => @user, :project => @project, :spent_on => @past_date, :hours => 20.0, :activity => TimeEntryActivity.generate!}) + + + assert_equal 2000.00, @time_entry1.cost + assert_equal 2000.00, @time_entry1.read_attribute(:cost) + assert_equal 200.0, @time_entry2.cost + assert_equal 200.0, @time_entry2.read_attribute(:cost) + + @old_rate.destroy + + assert_equal 2000.0, TimeEntry.find(@time_entry1.id).cost + assert_equal 0, TimeEntry.find(@time_entry2.id).cost + end + + end + context '#for' do setup do @user = User.generate!