Skip to content
5 changes: 5 additions & 0 deletions src/backend/src/services/change-requests.services.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
isGuest,
isLeadership,
isProjectWbs,
isWithinBuffer,

Check failure on line 9 in src/backend/src/services/change-requests.services.ts

View workflow job for this annotation

GitHub Actions / build

Module '"shared"' has no exported member 'isWithinBuffer'.
ProjectProposedChangesCreateArgs,
StageGateChangeRequest,
StandardChangeRequest,
Expand Down Expand Up @@ -636,6 +637,10 @@

await ChangeRequestsService.reviewActivationChangeRequest(createdCR, submitter);

const inBuffer = isWithinBuffer(startDate, createdCR.dateSubmitted, organization.activationBufferDays);
if (inBuffer) {
}

return createdCR.crId;
}

Expand Down
40 changes: 40 additions & 0 deletions src/backend/tests/test-change-request-utils.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import { describe, it } from 'node:test';
import { isWithinBuffer } from 'shared';

Check failure on line 2 in src/backend/tests/test-change-request-utils.ts

View workflow job for this annotation

GitHub Actions / build

Module '"shared"' has no exported member 'isWithinBuffer'.

describe('isWithinBuffer', () => {
it('returns true when newDate is the same as scheduledDate', () => {
const newDate = new Date(2026, 6, 2);
const scheduledDate = new Date(2026, 6, 2);

expect(isWithinBuffer(newDate, scheduledDate, 2)).toBe(true);
});

it('returns true when newDate is one day earlier than scheduledDate', () => {
const newDate = new Date(2026, 6, 2);
const scheduledDate = new Date(2026, 6, 3);

expect(isWithinBuffer(newDate, scheduledDate, 2)).toBe(true);
});

it('returns true when newDate is two days earlier than scheduledDate', () => {
const newDate = new Date(2026, 6, 2);
const scheduledDate = new Date(2026, 6, 4);

expect(isWithinBuffer(newDate, scheduledDate, 2)).toBe(true);
});

it('returns false when newDate is three days earlier than scheduledDate', () => {
const newDate = new Date(2026, 6, 2);
const scheduledDate = new Date(2026, 6, 5);

expect(isWithinBuffer(newDate, scheduledDate, 2)).toBe(false);
});

it('returns equal results for forward and backward dates within buffer', () => {
const newDate = new Date(2026, 6, 2);
const scheduledDateForward = new Date(2026, 6, 3);
const scheduledDateBackward = new Date(2026, 6, 1);

expect(isWithinBuffer(newDate, scheduledDateForward, 2)).toBe(isWithinBuffer(newDate, scheduledDateBackward, 2));
});
});
15 changes: 15 additions & 0 deletions src/shared/src/change-request-utils.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/**
* Determines if the two dates are in bufferDays distance from each other
*
* @param scheduledDate Current date scheduled.
* @param newDate New date scheduled for a later date from the scheduledDate.
* @param bufferDays The number of days apart the two days can be
*/
export const isWithinBuffer = (scheduledDate: Date, newDate: Date, bufferDays: number) => {
const UTCScheduledDate = Date.UTC(scheduledDate.getFullYear(), scheduledDate.getMonth(), scheduledDate.getDate());
const UTCNewDate = Date.UTC(newDate.getFullYear(), newDate.getMonth(), newDate.getDate());

const millisecondDifference = UTCNewDate - UTCScheduledDate;
const dayDifference = Math.floor(Math.abs(millisecondDifference / (1000 * 3600 * 24)));
return bufferDays > dayDifference;
};
Loading