Index: app/models/issue.rb =================================================================== --- app/models/issue.rb (revision 15058) +++ app/models/issue.rb (working copy) @@ -1451,9 +1451,11 @@ def recalculate_attributes_for(issue_id) if issue_id && p = Issue.find_by_id(issue_id) if p.priority_derived? - # priority = highest priority of children - if priority_position = p.children.joins(:priority).maximum("#{IssuePriority.table_name}.position") + # priority = highest priority of open children + if priority_position = p.children.open.joins(:priority).maximum("#{IssuePriority.table_name}.position") p.priority = IssuePriority.find_by_position(priority_position) + else + p.priority = IssuePriority.default end end Index: test/unit/issue_subtasking_test.rb =================================================================== --- test/unit/issue_subtasking_test.rb (revision 15058) +++ test/unit/issue_subtasking_test.rb (working copy) @@ -78,7 +78,7 @@ end end - def test_parent_priority_should_be_the_highest_child_priority + def test_parent_priority_should_be_the_highest_open_child_priority with_settings :parent_issue_priority => 'derived' do parent = Issue.generate!(:priority => IssuePriority.find_by_name('Normal')) # Create children @@ -88,14 +88,23 @@ assert_equal 'Immediate', child1.reload.priority.name assert_equal 'Immediate', parent.reload.priority.name child3 = parent.generate_child!(:priority => IssuePriority.find_by_name('Low')) + child4 = parent.generate_child!(:priority => IssuePriority.find_by_name('Urgent')) assert_equal 'Immediate', parent.reload.priority.name # Destroy a child child1.destroy + assert_equal 'Urgent', parent.reload.priority.name + # Close a child + child4.status = IssueStatus.where(:is_closed => true).first + child4.save! assert_equal 'Low', parent.reload.priority.name # Update a child child3.reload.priority = IssuePriority.find_by_name('Normal') child3.save! assert_equal 'Normal', parent.reload.priority.name + # Reopen a child + child4.status = IssueStatus.where(:is_closed => false).first + child4.save! + assert_equal 'Urgent', parent.reload.priority.name end end