Prevent ActiveRecord::StaleObjectError in Issue#reschedule_after (#7920).

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@8864 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Jean-Philippe Lang 2012-02-12 19:41:42 +00:00
parent d289619c75
commit 7fa18cad57
2 changed files with 20 additions and 1 deletions

View File

@ -638,7 +638,13 @@ class Issue < ActiveRecord::Base
if leaf?
if start_date.nil? || start_date < date
self.start_date, self.due_date = date, date + duration
save
begin
save
rescue ActiveRecord::StaleObjectError
reload
self.start_date, self.due_date = date, date + duration
save
end
end
else
leaves.each do |leaf|

View File

@ -768,6 +768,19 @@ class IssueTest < ActiveSupport::TestCase
assert_equal issue1.due_date + 1, issue2.reload.start_date
end
def test_rescheduling_a_stale_issue_should_not_raise_an_error
stale = Issue.find(1)
issue = Issue.find(1)
issue.subject = "Updated"
issue.save!
date = 10.days.from_now.to_date
assert_nothing_raised do
stale.reschedule_after(date)
end
assert_equal date, stale.reload.start_date
end
def test_overdue
assert Issue.new(:due_date => 1.day.ago.to_date).overdue?
assert !Issue.new(:due_date => Date.today).overdue?