diff --git a/app/models/issue.rb b/app/models/issue.rb index e665a46cb..89a3cd4ac 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -1741,7 +1741,7 @@ class Issue < ActiveRecord::Base ratio = c.closed? ? 100 : (c.done_ratio || 0) estimated * ratio }.sum - progress = done / (average * children.count) + progress = done.to_d / (average * children.count).to_d p.done_ratio = progress.floor end end diff --git a/test/unit/issue_subtasking_test.rb b/test/unit/issue_subtasking_test.rb index 85772909b..7a1cea675 100644 --- a/test/unit/issue_subtasking_test.rb +++ b/test/unit/issue_subtasking_test.rb @@ -217,6 +217,16 @@ class IssueSubtaskingTest < ActiveSupport::TestCase end end + def test_parent_done_ratio_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_done_ratio_of_parent_with_a_child_without_estimated_time_should_not_exceed_100 with_settings :parent_issue_done_ratio => 'derived' do parent = Issue.generate!