Adds Issue#status_was that returns the initial issue status.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@11412 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Jean-Philippe Lang 2013-02-17 09:30:17 +00:00
parent 7a1af68178
commit 7b7427b46e
2 changed files with 35 additions and 3 deletions

View File

@ -155,6 +155,13 @@ class Issue < ActiveRecord::Base
end
end
def create_or_update
super
ensure
@status_was = nil
end
private :create_or_update
# AR#Persistence#destroy would raise and RecordNotFound exception
# if the issue was already deleted or updated (non matching lock_version).
# This is a problem when bulk deleting issues or deleting a project
@ -637,6 +644,14 @@ class Issue < ActiveRecord::Base
scope
end
# Returns the initial status of the issue
# Returns nil for a new issue
def status_was
if status_id_was && status_id_was.to_i > 0
@status_was ||= IssueStatus.find_by_id(status_id_was)
end
end
# Return true if the issue is closed, otherwise false
def closed?
self.status.is_closed?
@ -657,9 +672,7 @@ class Issue < ActiveRecord::Base
# Return true if the issue is being closed
def closing?
if !new_record? && status_id_changed?
status_was = IssueStatus.find_by_id(status_id_was)
status_new = IssueStatus.find_by_id(status_id)
if status_was && status_new && !status_was.is_closed? && status_new.is_closed?
if status_was && status && !status_was.is_closed? && status.is_closed?
return true
end
end

View File

@ -1971,4 +1971,23 @@ class IssueTest < ActiveSupport::TestCase
assert !issue.closed?
assert_equal was_closed_on, issue.closed_on
end
def test_status_was_should_return_nil_for_new_issue
issue = Issue.new
assert_nil issue.status_was
end
def test_status_was_should_return_status_before_change
issue = Issue.find(1)
issue.status = IssueStatus.find(2)
assert_equal IssueStatus.find(1), issue.status_was
end
def test_status_was_should_be_reset_on_save
issue = Issue.find(1)
issue.status = IssueStatus.find(2)
assert_equal IssueStatus.find(1), issue.status_was
assert issue.save!
assert_equal IssueStatus.find(2), issue.status_was
end
end