From 975356f4f452affc052c51b7574ebbe582a36151 Mon Sep 17 00:00:00 2001 From: Alex Christoffer Rasmussen Date: Sun, 23 Jun 2024 22:06:44 +0200 Subject: [PATCH] events with 0 duration dose not contribute to next day calculation (#1099) --- .../rundown-service/__tests__/rundownCache.test.ts | 13 +++++++++++++ .../src/services/rundown-service/rundownCache.ts | 5 ++++- packages/utils/src/date-utils/checkIsNextDay.ts | 4 ++-- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/apps/server/src/services/rundown-service/__tests__/rundownCache.test.ts b/apps/server/src/services/rundown-service/__tests__/rundownCache.test.ts index 3b9e729f6..90733f4ce 100644 --- a/apps/server/src/services/rundown-service/__tests__/rundownCache.test.ts +++ b/apps/server/src/services/rundown-service/__tests__/rundownCache.test.ts @@ -170,6 +170,19 @@ describe('generate()', () => { expect(initResult.totalDuration).toBe(500 - 100); }); + it('calculates total duration with 0 duration events without causing a next day', () => { + const testRundown: OntimeRundown = [ + { type: SupportedEvent.Event, id: '1', timeStart: 100, timeEnd: 100, duration: 0 } as OntimeEvent, + { type: SupportedEvent.Event, id: '2', timeStart: 100, timeEnd: 300 } as OntimeEvent, + { type: SupportedEvent.Event, id: 'skipped', skip: true, timeStart: 300, timeEnd: 400 } as OntimeEvent, + { type: SupportedEvent.Event, id: '3', timeStart: 400, timeEnd: 500 } as OntimeEvent, + ]; + + const initResult = generate(testRundown); + expect(initResult.order.length).toBe(4); + expect(initResult.totalDuration).toBe(500 - 100); + }); + it('calculates total duration across days with gap', () => { const testRundown: OntimeRundown = [ { diff --git a/apps/server/src/services/rundown-service/rundownCache.ts b/apps/server/src/services/rundown-service/rundownCache.ts index 03e4cd4c8..faa5c52a2 100644 --- a/apps/server/src/services/rundown-service/rundownCache.ts +++ b/apps/server/src/services/rundown-service/rundownCache.ts @@ -87,6 +87,7 @@ export function generate( let daySpan = 0; let previousStart: MaybeNumber = null; let previousEnd: MaybeNumber = null; + let previousDuration: MaybeNumber = null; for (let i = 0; i < initialRundown.length; i++) { const currentEvent = initialRundown[i]; @@ -111,7 +112,8 @@ export function generate( lastEnd = updatedEvent.timeEnd; // check if we go over midnight, account for eventual gaps - const gapOverMidnight = previousStart !== null && checkIsNextDay(previousStart, updatedEvent.timeStart); + const gapOverMidnight = + previousStart !== null && checkIsNextDay(previousStart, updatedEvent.timeStart, previousDuration); const durationOverMidnight = updatedEvent.timeStart > updatedEvent.timeEnd; if (gapOverMidnight || durationOverMidnight) { daySpan++; @@ -134,6 +136,7 @@ export function generate( updatedEvent.delay = accumulatedDelay; previousStart = updatedEvent.timeStart; previousEnd = updatedEvent.timeEnd; + previousDuration = updatedEvent.duration; } order.push(updatedEvent.id); diff --git a/packages/utils/src/date-utils/checkIsNextDay.ts b/packages/utils/src/date-utils/checkIsNextDay.ts index d0a590947..66bb2c6e1 100644 --- a/packages/utils/src/date-utils/checkIsNextDay.ts +++ b/packages/utils/src/date-utils/checkIsNextDay.ts @@ -8,6 +8,6 @@ * 09:00 - 10:00 * 09:30 - 10:30 */ -export function checkIsNextDay(previousStart: number, timeStart: number): boolean { - return timeStart <= previousStart; +export function checkIsNextDay(previousStart: number, timeStart: number, previousDuration?: number): boolean { + return previousDuration === 0 ? false : timeStart <= previousStart; }