diff --git a/app/models/issue.rb b/app/models/issue.rb index fec0568..0521bc0 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -1355,7 +1355,7 @@ class Issue < ActiveRecord::Base unless Issue.use_status_for_done_ratio? && p.status && p.status.default_done_ratio leaves_count = p.leaves.count if leaves_count > 0 - average = p.leaves.average(:estimated_hours).to_f + average = p.leaves.average("CASE WHEN estimated_hours > 0 THEN estimated_hours ELSE NULL END").to_f if average == 0 average = 1 end diff --git a/test/unit/issue_nested_set_test.rb b/test/unit/issue_nested_set_test.rb index 9c4060b..adc989b 100644 --- a/test/unit/issue_nested_set_test.rb +++ b/test/unit/issue_nested_set_test.rb @@ -338,11 +338,14 @@ class IssueNestedSetTest < ActiveSupport::TestCase def test_parent_done_ratio_with_child_estimate_to_0_should_reach_100 parent = Issue.generate! issue1 = Issue.generate!(:parent_issue_id => parent.id) - issue2 = Issue.generate!(:parent_issue_id => parent.id, :estimated_hours => 0) + issue2 = Issue.generate!(:parent_issue_id => parent.id, :estimated_hours => 10) + issue3 = Issue.generate!(:parent_issue_id => parent.id, :estimated_hours => 0) assert_equal 0, parent.reload.done_ratio issue1.reload.update_attribute :status_id, 5 - assert_equal 50, parent.reload.done_ratio + assert_equal 33, parent.reload.done_ratio issue2.reload.update_attribute :status_id, 5 + assert_equal 67, parent.reload.done_ratio + issue3.reload.update_attribute :status_id, 5 assert_equal 100, parent.reload.done_ratio end