mirror of
https://github.com/cpvalente/ontime.git
synced 2026-08-11 10:23:54 +00:00
b7e5723fb2
* chore: cleanup typeings * fix: total gap should only accumulate after the curent loaded * fix: add the current day of the event to start day offset
303 lines
7.7 KiB
TypeScript
303 lines
7.7 KiB
TypeScript
import { OntimeDelay, OntimeEvent, OntimeGroup, SupportedEntry } from 'ontime-types';
|
|
|
|
import { initRundownMetadata } from '../rundownMetadata';
|
|
|
|
describe('initRundownMetadata()', () => {
|
|
it('processes nested rundown data', () => {
|
|
const selectedEventId = '12';
|
|
const demoEvents = {
|
|
'1': {
|
|
id: '1',
|
|
type: SupportedEntry.Event,
|
|
parent: null,
|
|
timeStart: 0,
|
|
timeEnd: 1,
|
|
duration: 1,
|
|
dayOffset: 0,
|
|
gap: 0,
|
|
skip: false,
|
|
linkStart: false,
|
|
} as OntimeEvent,
|
|
group: {
|
|
id: 'group',
|
|
type: SupportedEntry.Group,
|
|
entries: ['11', 'delay', '12', '13'],
|
|
colour: 'red',
|
|
} as OntimeGroup,
|
|
'11': {
|
|
id: '11',
|
|
type: SupportedEntry.Event,
|
|
parent: 'group',
|
|
timeStart: 10,
|
|
timeEnd: 11,
|
|
duration: 1,
|
|
dayOffset: 0,
|
|
gap: 10,
|
|
skip: false,
|
|
linkStart: false,
|
|
} as OntimeEvent,
|
|
delay: {
|
|
id: 'delay',
|
|
type: SupportedEntry.Delay,
|
|
parent: 'group',
|
|
duration: 0,
|
|
} as OntimeDelay,
|
|
'12': {
|
|
id: '12',
|
|
type: SupportedEntry.Event,
|
|
parent: 'group',
|
|
timeStart: 11,
|
|
timeEnd: 12,
|
|
duration: 1,
|
|
dayOffset: 0,
|
|
gap: 0,
|
|
skip: false,
|
|
linkStart: true,
|
|
} as OntimeEvent,
|
|
'13': {
|
|
id: '13',
|
|
type: SupportedEntry.Event,
|
|
parent: 'group',
|
|
timeStart: 12,
|
|
timeEnd: 13,
|
|
duration: 1,
|
|
dayOffset: 0,
|
|
gap: 0,
|
|
skip: false,
|
|
linkStart: true,
|
|
} as OntimeEvent,
|
|
'2': {
|
|
id: '2',
|
|
type: SupportedEntry.Event,
|
|
parent: null,
|
|
timeStart: 20,
|
|
timeEnd: 21,
|
|
duration: 1,
|
|
dayOffset: 0,
|
|
gap: 7,
|
|
skip: false,
|
|
linkStart: false,
|
|
} as OntimeEvent,
|
|
};
|
|
|
|
const { metadata, process } = initRundownMetadata(selectedEventId);
|
|
|
|
expect(metadata).toStrictEqual({
|
|
previousEvent: null,
|
|
latestEvent: null,
|
|
previousEntryId: null,
|
|
thisId: null,
|
|
eventIndex: 0,
|
|
isPast: true,
|
|
isNextDay: false,
|
|
totalGap: 0,
|
|
isLinkedToLoaded: false,
|
|
isLoaded: false,
|
|
groupId: null,
|
|
groupColour: undefined,
|
|
groupEntries: undefined,
|
|
isFirstAfterGroup: false,
|
|
});
|
|
|
|
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,
|
|
isNextDay: false,
|
|
totalGap: 0,
|
|
isLinkedToLoaded: false,
|
|
isLoaded: false,
|
|
groupId: null,
|
|
groupColour: undefined,
|
|
groupEntries: undefined,
|
|
isFirstAfterGroup: false,
|
|
});
|
|
|
|
expect(process(demoEvents['group'])).toMatchObject({
|
|
previousEvent: demoEvents['1'],
|
|
latestEvent: demoEvents['1'],
|
|
previousEntryId: demoEvents['1'].id,
|
|
thisId: demoEvents['group'].id,
|
|
eventIndex: 1,
|
|
isPast: true,
|
|
isNextDay: false,
|
|
totalGap: 0,
|
|
isLinkedToLoaded: false,
|
|
isLoaded: false,
|
|
groupId: 'group',
|
|
groupColour: 'red',
|
|
isFirstAfterGroup: false,
|
|
});
|
|
|
|
expect(process(demoEvents['11'])).toMatchObject({
|
|
previousEvent: demoEvents['1'],
|
|
latestEvent: demoEvents['11'],
|
|
previousEntryId: demoEvents['group'].id,
|
|
thisId: demoEvents['11'].id,
|
|
eventIndex: 2,
|
|
isPast: true,
|
|
isNextDay: false,
|
|
totalGap: 0,
|
|
isLinkedToLoaded: false,
|
|
isLoaded: false,
|
|
groupId: 'group',
|
|
groupColour: 'red',
|
|
isFirstAfterGroup: false,
|
|
});
|
|
|
|
expect(process(demoEvents['delay'])).toMatchObject({
|
|
previousEvent: demoEvents['11'],
|
|
latestEvent: demoEvents['11'],
|
|
previousEntryId: demoEvents['11'].id,
|
|
thisId: demoEvents['delay'].id,
|
|
eventIndex: 2,
|
|
isPast: true,
|
|
isNextDay: false,
|
|
totalGap: 0,
|
|
isLinkedToLoaded: false,
|
|
isLoaded: false,
|
|
groupId: 'group',
|
|
groupColour: 'red',
|
|
isFirstAfterGroup: false,
|
|
});
|
|
|
|
expect(process(demoEvents['12'])).toMatchObject({
|
|
previousEvent: demoEvents['11'],
|
|
latestEvent: demoEvents['12'],
|
|
previousEntryId: demoEvents['delay'].id,
|
|
thisId: demoEvents['12'].id,
|
|
eventIndex: 3,
|
|
isPast: false,
|
|
isNextDay: false,
|
|
totalGap: 0,
|
|
isLinkedToLoaded: true,
|
|
isLoaded: true,
|
|
groupId: 'group',
|
|
groupColour: 'red',
|
|
isFirstAfterGroup: false,
|
|
});
|
|
|
|
expect(process(demoEvents['13'])).toMatchObject({
|
|
previousEvent: demoEvents['12'],
|
|
latestEvent: demoEvents['13'],
|
|
previousEntryId: demoEvents['12'].id,
|
|
thisId: demoEvents['13'].id,
|
|
eventIndex: 4,
|
|
isPast: false,
|
|
isNextDay: false,
|
|
totalGap: 0,
|
|
isLinkedToLoaded: true,
|
|
isLoaded: false,
|
|
groupId: 'group',
|
|
groupColour: 'red',
|
|
isFirstAfterGroup: false,
|
|
});
|
|
|
|
expect(process(demoEvents['2'])).toMatchObject({
|
|
previousEvent: demoEvents['13'],
|
|
latestEvent: demoEvents['2'],
|
|
previousEntryId: demoEvents['13'].id,
|
|
thisId: demoEvents['2'].id,
|
|
eventIndex: 5,
|
|
isPast: false,
|
|
isNextDay: false,
|
|
totalGap: 7,
|
|
isLinkedToLoaded: false,
|
|
isLoaded: false,
|
|
groupId: null,
|
|
groupColour: undefined,
|
|
isFirstAfterGroup: true,
|
|
});
|
|
});
|
|
|
|
it('populates previousEntries in groups', () => {
|
|
const rundownStartsWithGroup = {
|
|
group: {
|
|
id: 'group',
|
|
type: SupportedEntry.Group,
|
|
colour: 'red',
|
|
entries: ['1', '2'],
|
|
} as OntimeGroup,
|
|
'1': {
|
|
id: '1',
|
|
type: SupportedEntry.Event,
|
|
parent: 'group',
|
|
timeStart: 1,
|
|
timeEnd: 2,
|
|
duration: 1,
|
|
dayOffset: 0,
|
|
gap: 0,
|
|
skip: false,
|
|
linkStart: false,
|
|
} as OntimeEvent,
|
|
'2': {
|
|
id: '2',
|
|
type: SupportedEntry.Event,
|
|
parent: 'group',
|
|
timeStart: 2,
|
|
timeEnd: 3,
|
|
duration: 1,
|
|
dayOffset: 0,
|
|
gap: 0,
|
|
skip: false,
|
|
linkStart: false,
|
|
} as OntimeEvent,
|
|
};
|
|
const { process } = initRundownMetadata(null);
|
|
|
|
expect(process(rundownStartsWithGroup.group)).toStrictEqual({
|
|
previousEvent: null,
|
|
latestEvent: null,
|
|
previousEntryId: null,
|
|
thisId: rundownStartsWithGroup.group.id,
|
|
eventIndex: 0,
|
|
isPast: false,
|
|
isNextDay: false,
|
|
totalGap: 0,
|
|
isLinkedToLoaded: false,
|
|
isLoaded: false,
|
|
groupId: rundownStartsWithGroup.group.id,
|
|
groupColour: 'red',
|
|
groupEntries: 2,
|
|
isFirstAfterGroup: false,
|
|
});
|
|
|
|
expect(process(rundownStartsWithGroup['1'])).toStrictEqual({
|
|
previousEvent: null,
|
|
latestEvent: rundownStartsWithGroup['1'],
|
|
previousEntryId: rundownStartsWithGroup.group.id,
|
|
thisId: rundownStartsWithGroup['1'].id,
|
|
eventIndex: 1,
|
|
isPast: false,
|
|
isNextDay: false,
|
|
totalGap: 0,
|
|
isLinkedToLoaded: false,
|
|
isLoaded: false,
|
|
groupId: rundownStartsWithGroup.group.id,
|
|
groupColour: 'red',
|
|
groupEntries: 2,
|
|
isFirstAfterGroup: false,
|
|
});
|
|
|
|
expect(process(rundownStartsWithGroup['2'])).toStrictEqual({
|
|
previousEvent: rundownStartsWithGroup['1'],
|
|
latestEvent: rundownStartsWithGroup['2'],
|
|
previousEntryId: rundownStartsWithGroup['1'].id,
|
|
thisId: rundownStartsWithGroup['2'].id,
|
|
eventIndex: 2,
|
|
isPast: false,
|
|
isNextDay: false,
|
|
totalGap: 0,
|
|
isLinkedToLoaded: false,
|
|
isLoaded: false,
|
|
groupId: rundownStartsWithGroup.group.id,
|
|
groupColour: 'red',
|
|
groupEntries: 2,
|
|
isFirstAfterGroup: false,
|
|
});
|
|
});
|
|
});
|