diff --git a/apps/client/src/features/rundown/__tests__/rundown.utils.test.ts b/apps/client/src/features/rundown/__tests__/rundown.utils.test.ts new file mode 100644 index 000000000..4ea466519 --- /dev/null +++ b/apps/client/src/features/rundown/__tests__/rundown.utils.test.ts @@ -0,0 +1,162 @@ +import { OntimeBlock, OntimeEvent, SupportedEvent } from 'ontime-types'; + +import { makeRundownMetadata } from '../rundown.utils'; + +describe('makeRundownMetadata()', () => { + it('processes nested rundown data', () => { + const selectedEventId = '12'; + const demoEvents = { + '1': { + id: '1', + type: SupportedEvent.Event, + parent: null, + timeStart: 0, + timeEnd: 1, + duration: 1, + dayOffset: 0, + gap: 0, + skip: false, + linkStart: false, + } as OntimeEvent, + block: { + id: 'block', + type: SupportedEvent.Block, + events: ['11, 12, 13'], + } as OntimeBlock, + '11': { + id: '11', + type: SupportedEvent.Event, + parent: 'block', + timeStart: 10, + timeEnd: 11, + duration: 1, + dayOffset: 0, + gap: 10, + skip: false, + linkStart: false, + } as OntimeEvent, + '12': { + id: '12', + type: SupportedEvent.Event, + parent: 'block', + timeStart: 11, + timeEnd: 12, + duration: 1, + dayOffset: 0, + gap: 0, + skip: false, + linkStart: true, + } as OntimeEvent, + '13': { + id: '13', + type: SupportedEvent.Event, + parent: 'block', + timeStart: 12, + timeEnd: 13, + duration: 1, + dayOffset: 0, + gap: 0, + skip: false, + linkStart: true, + } as OntimeEvent, + '2': { + id: '2', + type: SupportedEvent.Event, + parent: null, + timeStart: 20, + timeEnd: 21, + duration: 1, + dayOffset: 0, + gap: 7, + skip: false, + linkStart: false, + } as OntimeEvent, + }; + + const process = makeRundownMetadata(selectedEventId); + + expect(process(demoEvents['1'])).toStrictEqual({ + previousEvent: null, + latestEvent: demoEvents['1'], + previousEntryId: null, + thisId: demoEvents['1'].id, + eventIndex: 1, // UI indexes are 1 based + isPast: true, + isNext: false, + isNextDay: false, + totalGap: 0, + isLinkedToLoaded: false, + isLoaded: false, + }); + + expect(process(demoEvents['block'])).toMatchObject({ + previousEvent: demoEvents['1'], + latestEvent: demoEvents['1'], + previousEntryId: demoEvents['1'].id, + thisId: demoEvents['block'].id, + eventIndex: 1, + isPast: true, + isNext: false, + isNextDay: false, + totalGap: 0, + isLinkedToLoaded: false, + isLoaded: false, + }); + + expect(process(demoEvents['11'])).toMatchObject({ + previousEvent: demoEvents['1'], + latestEvent: demoEvents['11'], + previousEntryId: demoEvents['block'].id, + thisId: demoEvents['11'].id, + eventIndex: 2, + isPast: true, + isNext: false, + isNextDay: false, + totalGap: 10, + isLinkedToLoaded: false, + isLoaded: false, + }); + + expect(process(demoEvents['12'])).toMatchObject({ + previousEvent: demoEvents['11'], + latestEvent: demoEvents['12'], + previousEntryId: demoEvents['11'].id, + thisId: demoEvents['12'].id, + eventIndex: 3, + isPast: false, + isNext: false, + isNextDay: false, + totalGap: 10, + isLinkedToLoaded: false, + isLoaded: true, + }); + + expect(process(demoEvents['13'])).toMatchObject({ + previousEvent: demoEvents['12'], + latestEvent: demoEvents['13'], + previousEntryId: demoEvents['12'].id, + thisId: demoEvents['13'].id, + eventIndex: 4, + isPast: false, + isNext: false, + isNextDay: false, + totalGap: 10, + isLinkedToLoaded: true, + isLoaded: false, + }); + + expect(process(demoEvents['2'])).toMatchObject({ + previousEvent: demoEvents['13'], + latestEvent: demoEvents['2'], + previousEntryId: demoEvents['13'].id, + thisId: demoEvents['2'].id, + eventIndex: 5, + isPast: false, + isNext: false, + isNextDay: false, + totalGap: 17, + isLinkedToLoaded: false, + isLoaded: false, + }); + }); +});