diff --git a/app/models/deliverable.rb b/app/models/deliverable.rb index 88a4cc0..ac16f64 100644 --- a/app/models/deliverable.rb +++ b/app/models/deliverable.rb @@ -9,7 +9,7 @@ class Deliverable < ActiveRecord::Base has_many :labor_budgets has_many :overhead_budgets has_many :fixed_budgets - has_many :issues + has_many :issues, :dependent => :nullify accepts_nested_attributes_for :labor_budgets accepts_nested_attributes_for :overhead_budgets diff --git a/test/integration/deliverables_delete_test.rb b/test/integration/deliverables_delete_test.rb index a19669d..3f8a943 100644 --- a/test/integration/deliverables_delete_test.rb +++ b/test/integration/deliverables_delete_test.rb @@ -44,4 +44,27 @@ class DeliverablesDeleteTest < ActionController::IntegrationTest assert_nil Deliverable.find_by_id(@deliverable.id), "Deliverable not deleted" end + + should "unassign issues from the deliverable when deleting" do + issues = [ + Issue.generate_for_project!(@project, :deliverable => @deliverable), + Issue.generate_for_project!(@project, :deliverable => @deliverable), + Issue.generate_for_project!(@project, :deliverable => @deliverable) + ] + assert_equal 3, @deliverable.issues.count + + @project.reload + + visit_contract_page(@contract) + + click_link_within "#deliverable_details_#{@deliverable.id}", 'Delete' + assert_response :success + assert_template 'contracts/show' + + assert_nil Deliverable.find_by_id(@deliverable.id), "Deliverable not deleted" + assert_equal 0, @deliverable.issues.count + assert issues.all? {|issue| + issue.reload && issue.deliverable_id.nil? + }, "Issues' deliverable was not removed #{issues.collect(&:deliverable_id).join(', ')}" + end end