]> source.dussan.org Git - redmine.git/commitdiff
Fixed: Deleting statuses doesn't delete all workflow entries (#5811).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 25 Jul 2010 10:48:27 +0000 (10:48 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 25 Jul 2010 10:48:27 +0000 (10:48 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3881 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/issue_status.rb
test/unit/issue_status_test.rb

index fdda12a8c15f565490d44fe480491e3155a96f69..f376d5d15bbac9dc546e9a64f7502916e8a1661a 100644 (file)
 
 class IssueStatus < ActiveRecord::Base
   before_destroy :check_integrity  
-  has_many :workflows, :foreign_key => "old_status_id", :dependent => :delete_all
+  has_many :workflows, :foreign_key => "old_status_id"
   acts_as_list
+  
+  before_destroy :delete_workflows
 
   validates_presence_of :name
   validates_uniqueness_of :name
@@ -89,4 +91,9 @@ private
   def check_integrity
     raise "Can't delete status" if Issue.find(:first, :conditions => ["status_id=?", self.id])
   end
+  
+  # Deletes associated workflows
+  def delete_workflows
+    Workflow.delete_all(["old_status_id = :id OR new_status_id = :id", {:id => id}])
+  end
 end
index 2c0685cec1f80ebe65dc74ed57306405e0898b2b..bcc50a4801bf4eafcb5baa10c280c01e558938dd 100644 (file)
@@ -32,10 +32,12 @@ class IssueStatusTest < ActiveSupport::TestCase
   end
   
   def test_destroy
-    count_before = IssueStatus.count
     status = IssueStatus.find(3)
-    assert status.destroy
-    assert_equal count_before - 1, IssueStatus.count
+    assert_difference 'IssueStatus.count', -1 do
+      assert status.destroy
+    end
+    assert_nil Workflow.first(:conditions => {:old_status_id => status.id})
+    assert_nil Workflow.first(:conditions => {:new_status_id => status.id})
   end
 
   def test_destroy_status_in_use