summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/models/issue.rb6
-rw-r--r--test/unit/issue_subtasking_test.rb10
2 files changed, 13 insertions, 3 deletions
diff --git a/app/models/issue.rb b/app/models/issue.rb
index efd2789ed..dad03e39b 100644
--- a/app/models/issue.rb
+++ b/app/models/issue.rb
@@ -1697,12 +1697,12 @@ class Issue < ActiveRecord::Base
if children.any?
child_with_total_estimated_hours = children.select {|c| c.total_estimated_hours.to_f > 0.0}
if child_with_total_estimated_hours.any?
- average = child_with_total_estimated_hours.map(&:total_estimated_hours).sum.to_f / child_with_total_estimated_hours.count
+ average = child_with_total_estimated_hours.map(&:total_estimated_hours).sum.to_d / child_with_total_estimated_hours.count
else
- average = 1.0
+ average = 1.0.to_d
end
done = children.map {|c|
- estimated = c.total_estimated_hours.to_f
+ estimated = (c.total_estimated_hours || 0.0).to_d
estimated = average unless estimated > 0.0
ratio = c.closed? ? 100 : (c.done_ratio || 0)
estimated * ratio
diff --git a/test/unit/issue_subtasking_test.rb b/test/unit/issue_subtasking_test.rb
index 6ad720d33..4a5c21de5 100644
--- a/test/unit/issue_subtasking_test.rb
+++ b/test/unit/issue_subtasking_test.rb
@@ -239,6 +239,16 @@ class IssueSubtaskingTest < ActiveSupport::TestCase
end
end
+ def test_done_ratio_of_parent_with_completed_children_should_not_be_99
+ with_settings :parent_issue_done_ratio => 'derived' do
+ parent = Issue.generate!
+ parent.generate_child!(:estimated_hours => 8.0, :done_ratio => 100)
+ parent.generate_child!(:estimated_hours => 8.1, :done_ratio => 100)
+ # (8.0 * 100 + 8.1 * 100) / (8.0 + 8.1) => 99.99999999999999
+ assert_equal 100, parent.reload.done_ratio
+ end
+ end
+
def test_changing_parent_should_update_previous_parent_done_ratio
with_settings :parent_issue_done_ratio => 'derived' do
first_parent = Issue.generate!