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
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
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