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:
parent
d289619c75
commit
7fa18cad57
|
@ -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|
|
||||
|
|
|
@ -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?
|
||||
|
|
Loading…
Reference in New Issue