]> source.dussan.org Git - redmine.git/commitdiff
Adds Issue#status_was that returns the initial issue status.
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 17 Feb 2013 09:30:17 +0000 (09:30 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 17 Feb 2013 09:30:17 +0000 (09:30 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@11412 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/issue.rb
test/unit/issue_test.rb

index fd7cc0b505fd4fde2014b8e2f2e54b7e61ff09b0..e01dcc95a264617d7fd3806097d6985b9728ef1a 100644 (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
index ad88933e518271fae64356f5aa2991fd7a57bf72..8e3f8bfba69cf705ad6613ba17e02d2c119c0d2b 100644 (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