]> source.dussan.org Git - redmine.git/commitdiff
Only consider open subtasks when computing the priority of a parent issue (#5880).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 16 Jan 2016 09:00:37 +0000 (09:00 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 16 Jan 2016 09:00:37 +0000 (09:00 +0000)
Patch by Go MAEDA.

git-svn-id: http://svn.redmine.org/redmine/trunk@15064 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/issue.rb
test/unit/issue_subtasking_test.rb

index 00a122c1b75ff2cf5cdc57a62190f7a0348f49d4..cf9faaf3356f6cd977d4b69f755d8fd46a66486d 100644 (file)
@@ -1451,9 +1451,11 @@ class Issue < ActiveRecord::Base
   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 cadfe6644e538659ebb92e763489973e4c47e663..184c9016cb380ff15f900b90a20ee0b9be2f9c5a 100644 (file)
@@ -78,7 +78,7 @@ class IssueSubtaskingTest < ActiveSupport::TestCase
     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 @@ class IssueSubtaskingTest < ActiveSupport::TestCase
       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