Skip to content

Commit abf00e7

Browse files
authored
Merge pull request #129 from topcoder-platform/PM-5447-1
PM-5447: Preserve started phase schedule shifts
2 parents 6de37fd + 8a196c4 commit abf00e7

2 files changed

Lines changed: 61 additions & 2 deletions

File tree

src/common/phase-helper.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -404,8 +404,18 @@ class ChallengePhaseHelper {
404404
...phase,
405405
predecessor: resolvedPredecessor,
406406
description: phaseDefinition.description,
407+
requestedScheduledStartDate: _.get(newPhase, "scheduledStartDate"),
407408
requestedScheduledEndDate: _.get(newPhase, "scheduledEndDate"),
408409
};
410+
if (
411+
_.isNil(updatedPhase.actualEndDate) &&
412+
!_.isNil(updatedPhase.actualStartDate) &&
413+
!_.isNil(updatedPhase.requestedScheduledStartDate)
414+
) {
415+
updatedPhase.scheduledStartDate = moment(updatedPhase.requestedScheduledStartDate)
416+
.toDate()
417+
.toISOString();
418+
}
409419
if (updatedPhase.name === "Post-Mortem") {
410420
updatedPhase.predecessor = "a93544bc-c165-4af4-b55e-18f3593b457a";
411421
}
@@ -414,7 +424,7 @@ class ChallengePhaseHelper {
414424
}
415425
if (_.isNil(updatedPhase.predecessor)) {
416426
let scheduledStartDate = _.defaultTo(
417-
_.get(newPhase, "scheduledStartDate"),
427+
updatedPhase.requestedScheduledStartDate,
418428
updatedPhase.scheduledStartDate
419429
);
420430
if (
@@ -485,7 +495,9 @@ class ChallengePhaseHelper {
485495
recalculateScheduledEndDate(phase);
486496
}
487497
validateRecalculatedPhaseSchedules(challengePhasesOrdered, updatedPhases, options);
488-
return _.map(updatedPhases, (phase) => _.omit(phase, "requestedScheduledEndDate"));
498+
return _.map(updatedPhases, (phase) =>
499+
_.omit(phase, ["requestedScheduledStartDate", "requestedScheduledEndDate"])
500+
);
489501
}
490502

491503
handlePhasesAfterCancelling(phases) {

test/unit/phase-helper.test.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -436,6 +436,53 @@ describe('phase helper unit tests', () => {
436436
updatedPhases[0].duration.should.equal(duration)
437437
})
438438

439+
it('allows started non-Design phase schedule to move earlier when duration is unchanged', async () => {
440+
const registrationPhaseId = 'development-registration-phase'
441+
const currentRegistrationStartDate = '2099-05-26T05:14:00.000Z'
442+
const currentRegistrationEndDate = '2099-05-31T05:14:00.000Z'
443+
const requestedRegistrationStartDate = '2099-05-25T05:14:00.000Z'
444+
const requestedRegistrationEndDate = '2099-05-30T05:14:00.000Z'
445+
const duration = 5 * 24 * 60 * 60
446+
447+
stubPhaseLookups(
448+
[{ id: registrationPhaseId, name: 'Registration', description: 'Registration phase' }],
449+
[{ phaseId: registrationPhaseId, defaultDuration: duration }]
450+
)
451+
452+
const updatedPhases = await phaseHelper.populatePhasesForChallengeUpdate(
453+
[
454+
{
455+
duration,
456+
isOpen: true,
457+
name: 'Registration',
458+
phaseId: registrationPhaseId,
459+
actualStartDate: requestedRegistrationStartDate,
460+
scheduledStartDate: currentRegistrationStartDate,
461+
scheduledEndDate: currentRegistrationEndDate
462+
}
463+
],
464+
[
465+
{
466+
duration,
467+
phaseId: registrationPhaseId,
468+
scheduledStartDate: requestedRegistrationStartDate,
469+
scheduledEndDate: requestedRegistrationEndDate
470+
}
471+
],
472+
'timeline-template-id',
473+
false,
474+
{
475+
allowActivePhaseShortening: false,
476+
preventPhaseShortening: true
477+
}
478+
)
479+
480+
updatedPhases[0].actualStartDate.should.equal(requestedRegistrationStartDate)
481+
updatedPhases[0].scheduledStartDate.should.equal(requestedRegistrationStartDate)
482+
updatedPhases[0].scheduledEndDate.should.equal(requestedRegistrationEndDate)
483+
updatedPhases[0].duration.should.equal(duration)
484+
})
485+
439486
it('allows active non-Design dependent phases to move earlier when duration is unchanged', async () => {
440487
const registrationPhaseId = 'development-registration-phase'
441488
const reviewPhaseId = 'development-review-phase'

0 commit comments

Comments
 (0)