From fad5b13e1101c6be1e8b815c8e3511a1c7962b1d Mon Sep 17 00:00:00 2001 From: Marius BALTEANU Date: Fri, 18 May 2018 19:56:43 +0000 Subject: [PATCH] allow start date of a issue to be the latest due date of predecessors --- app/models/issue_relation.rb | 2 +- test/unit/issue_test.rb | 35 ++++++++++++++++++----------------- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/app/models/issue_relation.rb b/app/models/issue_relation.rb index a4ad416..d2220bf 100644 --- a/app/models/issue_relation.rb +++ b/app/models/issue_relation.rb @@ -190,7 +190,7 @@ class IssueRelation < ActiveRecord::Base def successor_soonest_start if (TYPE_PRECEDES == self.relation_type) && delay && issue_from && (issue_from.start_date || issue_from.due_date) - add_working_days((issue_from.due_date || issue_from.start_date), (1 + delay)) + add_working_days((issue_from.due_date || issue_from.start_date), delay) end end diff --git a/test/unit/issue_test.rb b/test/unit/issue_test.rb index 880c0a6..153fb6c 100644 --- a/test/unit/issue_test.rb +++ b/test/unit/issue_test.rb @@ -2083,14 +2083,15 @@ class IssueTest < ActiveSupport::TestCase issue2 = Issue.generate!(:start_date => '2012-10-15', :due_date => '2012-10-17') IssueRelation.create!(:issue_from => issue1, :issue_to => issue2, :relation_type => IssueRelation::TYPE_PRECEDES) - assert_equal Date.parse('2012-10-18'), issue2.reload.start_date + assert_equal Date.parse('2012-10-17'), issue2.reload.start_date issue1.reload issue1.due_date = '2012-10-23' issue1.save! issue2.reload - assert_equal Date.parse('2012-10-24'), issue2.start_date - assert_equal Date.parse('2012-10-26'), issue2.due_date + + assert_equal Date.parse('2012-10-23'), issue2.start_date + assert_equal Date.parse('2012-10-25'), issue2.due_date end # The delay should honor non-working week days @@ -2100,7 +2101,7 @@ class IssueTest < ActiveSupport::TestCase IssueRelation.create!(:issue_from => issue1, :issue_to => issue2, :relation_type => IssueRelation::TYPE_PRECEDES, :delay => 8) - assert_equal Date.parse('2014-03-25'), issue2.reload.start_date + assert_equal Date.parse('2014-03-24'), issue2.reload.start_date end end @@ -2109,15 +2110,15 @@ class IssueTest < ActiveSupport::TestCase issue2 = Issue.generate!(:start_date => '2012-10-15', :due_date => '2012-10-17') IssueRelation.create!(:issue_from => issue1, :issue_to => issue2, :relation_type => IssueRelation::TYPE_PRECEDES) - assert_equal Date.parse('2012-10-18'), issue2.reload.start_date + assert_equal Date.parse('2012-10-17'), issue2.reload.start_date issue1.reload issue1.start_date = '2012-09-17' - issue1.due_date = '2012-09-18' + issue1.due_date = '2012-09-17' issue1.save! issue2.reload - assert_equal Date.parse('2012-09-19'), issue2.start_date - assert_equal Date.parse('2012-09-21'), issue2.due_date + assert_equal Date.parse('2012-09-17'), issue2.start_date + assert_equal Date.parse('2012-09-19'), issue2.due_date end def test_rescheduling_reschedule_following_issue_earlier_should_consider_other_preceding_issues @@ -2128,16 +2129,16 @@ class IssueTest < ActiveSupport::TestCase :relation_type => IssueRelation::TYPE_PRECEDES) IssueRelation.create!(:issue_from => issue3, :issue_to => issue2, :relation_type => IssueRelation::TYPE_PRECEDES) - assert_equal Date.parse('2012-10-18'), issue2.reload.start_date + assert_equal Date.parse('2012-10-17'), issue2.reload.start_date issue1.reload issue1.start_date = '2012-09-17' - issue1.due_date = '2012-09-18' + issue1.due_date = '2012-09-17' issue1.save! issue2.reload # Issue 2 must start after Issue 3 - assert_equal Date.parse('2012-10-03'), issue2.start_date - assert_equal Date.parse('2012-10-05'), issue2.due_date + assert_equal Date.parse('2012-10-02'), issue2.start_date + assert_equal Date.parse('2012-10-04'), issue2.due_date end def test_rescheduling_a_stale_issue_should_not_raise_an_error @@ -2162,15 +2163,15 @@ class IssueTest < ActiveSupport::TestCase :relation_type => IssueRelation::TYPE_PRECEDES) issue1.reload issue2.reload - assert_equal Date.parse('2012-10-18'), issue2.start_date + assert_equal Date.parse('2012-10-17'), issue2.start_date with_settings :date_format => '%m/%d/%Y' do child = Issue.new(:parent_issue_id => issue2.id, :start_date => '2012-10-16', :project_id => 1, :tracker_id => 1, :status_id => 1, :subject => 'Child', :author_id => 1) assert !child.valid? - assert_include 'Start date cannot be earlier than 10/18/2012 because of preceding issues', child.errors.full_messages - assert_equal Date.parse('2012-10-18'), child.soonest_start - child.start_date = '2012-10-18' + assert_include 'Start date cannot be earlier than 10/17/2012 because of preceding issues', child.errors.full_messages + assert_equal Date.parse('2012-10-17'), child.soonest_start + child.start_date = '2012-10-17' assert child.save end end @@ -3094,6 +3095,6 @@ class IssueTest < ActiveSupport::TestCase # March 21st and the issue should be marked overdue User.current = user_in_asia assert issue.overdue? - end + end -- 2.1.4