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 leaf?
|
||||||
if start_date.nil? || start_date < date
|
if start_date.nil? || start_date < date
|
||||||
self.start_date, self.due_date = date, date + duration
|
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
|
end
|
||||||
else
|
else
|
||||||
leaves.each do |leaf|
|
leaves.each do |leaf|
|
||||||
|
@ -768,6 +768,19 @@ class IssueTest < ActiveSupport::TestCase
|
|||||||
assert_equal issue1.due_date + 1, issue2.reload.start_date
|
assert_equal issue1.due_date + 1, issue2.reload.start_date
|
||||||
end
|
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
|
def test_overdue
|
||||||
assert Issue.new(:due_date => 1.day.ago.to_date).overdue?
|
assert Issue.new(:due_date => 1.day.ago.to_date).overdue?
|
||||||
assert !Issue.new(:due_date => Date.today).overdue?
|
assert !Issue.new(:due_date => Date.today).overdue?
|
||||||
|
Loading…
x
Reference in New Issue
Block a user