Fixed: Deleting statuses doesn't delete all workflow entries (#5811).

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3881 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Jean-Philippe Lang 2010-07-25 10:48:27 +00:00
parent 73d9368039
commit c47d23a87b
2 changed files with 13 additions and 4 deletions

View File

@ -17,9 +17,11 @@
class IssueStatus < ActiveRecord::Base class IssueStatus < ActiveRecord::Base
before_destroy :check_integrity 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 acts_as_list
before_destroy :delete_workflows
validates_presence_of :name validates_presence_of :name
validates_uniqueness_of :name validates_uniqueness_of :name
validates_length_of :name, :maximum => 30 validates_length_of :name, :maximum => 30
@ -89,4 +91,9 @@ private
def check_integrity def check_integrity
raise "Can't delete status" if Issue.find(:first, :conditions => ["status_id=?", self.id]) raise "Can't delete status" if Issue.find(:first, :conditions => ["status_id=?", self.id])
end end
# Deletes associated workflows
def delete_workflows
Workflow.delete_all(["old_status_id = :id OR new_status_id = :id", {:id => id}])
end
end end

View File

@ -32,10 +32,12 @@ class IssueStatusTest < ActiveSupport::TestCase
end end
def test_destroy def test_destroy
count_before = IssueStatus.count
status = IssueStatus.find(3) status = IssueStatus.find(3)
assert status.destroy assert_difference 'IssueStatus.count', -1 do
assert_equal count_before - 1, IssueStatus.count 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 end
def test_destroy_status_in_use def test_destroy_status_in_use