[#40867] Wrong progress value in parent task - Estimated hours
https://community.openproject.org/work_packages/40867 This is a second commit/pull request related to this bug. It deals with the dependency of done_ratio on estimated_hours. We need to recalculate done_ration along the hierarchy with changes in estimated_hours.pull/10534/head
parent
968fbfa6f3
commit
d632ba6bb6
@ -1,86 +0,0 @@ |
||||
require 'spec_helper' |
||||
|
||||
describe WorkPackages::UpdateAncestorsService, type: :model, with_mail: false do |
||||
let(:user) { create :user } |
||||
let(:estimated_hours) { [nil, nil, nil] } |
||||
let(:done_ratios) { [0, 0, 0] } |
||||
let(:statuses) { %i(open open open) } |
||||
let(:open_status) { create :status } |
||||
let(:closed_status) { create :closed_status } |
||||
let(:aggregate_done_ratio) { 0.0 } |
||||
|
||||
context 'with a common ancestor' do |
||||
let(:status) { open_status } |
||||
let(:done_ratio) { 50 } |
||||
let(:estimated_hours) { 7.0 } |
||||
|
||||
let!(:grandparent) do |
||||
create :work_package, |
||||
derived_estimated_hours: estimated_hours, |
||||
done_ratio: done_ratio |
||||
end |
||||
let!(:old_parent) do |
||||
create :work_package, |
||||
parent: grandparent, |
||||
derived_estimated_hours: estimated_hours, |
||||
done_ratio: done_ratio |
||||
end |
||||
let!(:new_parent) do |
||||
create :work_package, |
||||
parent: grandparent |
||||
end |
||||
let!(:work_package) do |
||||
create :work_package, |
||||
parent: old_parent, |
||||
status: status, |
||||
estimated_hours: estimated_hours, |
||||
done_ratio: done_ratio |
||||
end |
||||
|
||||
subject do |
||||
# binding.pry |
||||
work_package.parent = new_parent |
||||
# In this test case, derived_estimated_hours and done_ratio will not |
||||
# inherently change on grandparent. However, if work_package has siblings |
||||
# then changing its parent could cause derived_estimated_hours and/or |
||||
# done_ratio on grandparent to inherently change. To verify that |
||||
# grandparent can be properly updated in that case without making this |
||||
# test dependent on the implementation details of the |
||||
# derived_estimated_hours and done_ratio calculations, force |
||||
# derived_estimated_hours and done_ratio to change at the same time as the |
||||
# parent. |
||||
work_package.estimated_hours = (estimated_hours + 1) |
||||
work_package.done_ratio = (done_ratio + 1) |
||||
work_package.save! |
||||
|
||||
described_class |
||||
.new(user: user, |
||||
work_package: work_package) |
||||
.call(%i(parent)) |
||||
end |
||||
|
||||
before do |
||||
subject |
||||
end |
||||
|
||||
it 'is successful' do |
||||
expect(subject) |
||||
.to be_success |
||||
end |
||||
|
||||
it 'returns both the former and new ancestors in the dependent results without duplicates' do |
||||
expect(subject.dependent_results.map(&:result)) |
||||
.to match_array [new_parent, grandparent, old_parent] |
||||
end |
||||
|
||||
it 'updates the done_ratio of the former parent' do |
||||
expect(old_parent.reload(select: :done_ratio).done_ratio) |
||||
.to be 0 |
||||
end |
||||
|
||||
it 'updates the estimated_hours of the former parent' do |
||||
expect(old_parent.reload(select: :derived_estimated_hours).derived_estimated_hours) |
||||
.to be_nil |
||||
end |
||||
end |
||||
end |
Loading…
Reference in new issue