mirror of
https://github.com/cpvalente/ontime.git
synced 2026-08-08 17:03:53 +00:00
e5fdf27f6c
* fix: bug with applying delays * fix: show delay data only in production screens * chore: cover delay with feature test * refactor: simplify type assertion
250 lines
8.1 KiB
TypeScript
250 lines
8.1 KiB
TypeScript
import { OntimeBlock, OntimeDelay, OntimeEvent, OntimeRundown, SupportedEvent } from 'ontime-types';
|
|
import { _applyDelay } from '../delayUtils.js';
|
|
|
|
describe('_applyDelay() ', () => {
|
|
describe('in a rundown without the delay field, persisted rundown', () => {
|
|
it('applies delays', () => {
|
|
const delayId = '1';
|
|
const testRundown: OntimeRundown = [
|
|
{ id: delayId, type: SupportedEvent.Delay, duration: 10 } as OntimeDelay,
|
|
{ id: '2', type: SupportedEvent.Event, timeStart: 0, timeEnd: 10, duration: 10, revision: 1 } as OntimeEvent,
|
|
{ id: '3', type: SupportedEvent.Event, timeStart: 0, timeEnd: 10, duration: 10, revision: 1 } as OntimeEvent,
|
|
{ id: '4', type: SupportedEvent.Block } as OntimeBlock,
|
|
{ id: '5', type: SupportedEvent.Event, timeStart: 0, timeEnd: 10, duration: 10, revision: 1 } as OntimeEvent,
|
|
];
|
|
|
|
const expected = [
|
|
{ id: '2', type: SupportedEvent.Event, timeStart: 10, timeEnd: 20, duration: 10, revision: 2 } as OntimeEvent,
|
|
{ id: '3', type: SupportedEvent.Event, timeStart: 10, timeEnd: 20, duration: 10, revision: 2 } as OntimeEvent,
|
|
{ id: '4', type: SupportedEvent.Block } as OntimeBlock,
|
|
{ id: '5', type: SupportedEvent.Event, timeStart: 0, timeEnd: 10, duration: 10, revision: 1 } as OntimeEvent,
|
|
];
|
|
|
|
const updatedRundown = _applyDelay(delayId, testRundown);
|
|
expect(updatedRundown).toStrictEqual(expected);
|
|
});
|
|
it('applies negative delays', () => {
|
|
const delayId = '1';
|
|
const testRundown: OntimeRundown = [
|
|
{ id: delayId, type: SupportedEvent.Delay, duration: -10 } as OntimeDelay,
|
|
{ id: '2', type: SupportedEvent.Event, timeStart: 0, timeEnd: 10, duration: 10, revision: 1 } as OntimeEvent,
|
|
{ id: '3', type: SupportedEvent.Event, timeStart: 20, timeEnd: 40, duration: 20, revision: 1 } as OntimeEvent,
|
|
{ id: '4', type: SupportedEvent.Block } as OntimeBlock,
|
|
{ id: '5', type: SupportedEvent.Event, timeStart: 0, timeEnd: 10, duration: 10, revision: 1 } as OntimeEvent,
|
|
];
|
|
|
|
const expected = [
|
|
{ id: '2', type: SupportedEvent.Event, timeStart: 0, timeEnd: 10, duration: 10, revision: 2 } as OntimeEvent,
|
|
{ id: '3', type: SupportedEvent.Event, timeStart: 10, timeEnd: 30, duration: 20, revision: 2 } as OntimeEvent,
|
|
{ id: '4', type: SupportedEvent.Block } as OntimeBlock,
|
|
{ id: '5', type: SupportedEvent.Event, timeStart: 0, timeEnd: 10, duration: 10, revision: 1 } as OntimeEvent,
|
|
];
|
|
|
|
const updatedRundown = _applyDelay(delayId, testRundown);
|
|
expect(updatedRundown).toStrictEqual(expected);
|
|
});
|
|
it('maintains constant duration', () => {
|
|
const delayId = '1';
|
|
const testRundown: OntimeRundown = [
|
|
{ id: delayId, type: SupportedEvent.Delay, duration: -30 } as OntimeDelay,
|
|
{ id: '2', type: SupportedEvent.Event, timeStart: 0, timeEnd: 10, duration: 10, revision: 1 } as OntimeEvent,
|
|
{ id: '3', type: SupportedEvent.Event, timeStart: 20, timeEnd: 40, duration: 20, revision: 1 } as OntimeEvent,
|
|
];
|
|
|
|
const expected = [
|
|
{ id: '2', type: SupportedEvent.Event, timeStart: 0, timeEnd: 10, duration: 10, revision: 2 } as OntimeEvent,
|
|
{ id: '3', type: SupportedEvent.Event, timeStart: 0, timeEnd: 20, duration: 20, revision: 2 } as OntimeEvent,
|
|
];
|
|
|
|
const updatedRundown = _applyDelay(delayId, testRundown);
|
|
expect(updatedRundown).toStrictEqual(expected);
|
|
});
|
|
});
|
|
describe('in a rundown with the delay field, cached rundown', () => {
|
|
it('applies delays', () => {
|
|
const delayId = '1';
|
|
const testRundown: OntimeRundown = [
|
|
{ id: delayId, type: SupportedEvent.Delay, duration: 10 } as OntimeDelay,
|
|
{
|
|
id: '2',
|
|
type: SupportedEvent.Event,
|
|
timeStart: 0,
|
|
timeEnd: 10,
|
|
duration: 10,
|
|
revision: 1,
|
|
delay: 10,
|
|
} as OntimeEvent,
|
|
{
|
|
id: '3',
|
|
type: SupportedEvent.Event,
|
|
timeStart: 0,
|
|
timeEnd: 10,
|
|
duration: 10,
|
|
revision: 1,
|
|
delay: 10,
|
|
} as OntimeEvent,
|
|
{ id: '4', type: SupportedEvent.Block } as OntimeBlock,
|
|
{
|
|
id: '5',
|
|
type: SupportedEvent.Event,
|
|
timeStart: 0,
|
|
timeEnd: 10,
|
|
duration: 10,
|
|
revision: 1,
|
|
delay: 0,
|
|
} as OntimeEvent,
|
|
];
|
|
|
|
const expected = [
|
|
{
|
|
id: '2',
|
|
type: SupportedEvent.Event,
|
|
timeStart: 10,
|
|
timeEnd: 20,
|
|
duration: 10,
|
|
revision: 2,
|
|
delay: 0,
|
|
} as OntimeEvent,
|
|
{
|
|
id: '3',
|
|
type: SupportedEvent.Event,
|
|
timeStart: 10,
|
|
timeEnd: 20,
|
|
duration: 10,
|
|
revision: 2,
|
|
delay: 0,
|
|
} as OntimeEvent,
|
|
{ id: '4', type: SupportedEvent.Block } as OntimeBlock,
|
|
{
|
|
id: '5',
|
|
type: SupportedEvent.Event,
|
|
timeStart: 0,
|
|
timeEnd: 10,
|
|
duration: 10,
|
|
revision: 1,
|
|
delay: 0,
|
|
} as OntimeEvent,
|
|
];
|
|
|
|
const updatedRundown = _applyDelay(delayId, testRundown);
|
|
expect(updatedRundown).toStrictEqual(expected);
|
|
});
|
|
it('applies negative delays', () => {
|
|
const delayId = '1';
|
|
const testRundown: OntimeRundown = [
|
|
{ id: delayId, type: SupportedEvent.Delay, duration: -10 } as OntimeDelay,
|
|
{
|
|
id: '2',
|
|
type: SupportedEvent.Event,
|
|
timeStart: 0,
|
|
timeEnd: 10,
|
|
duration: 10,
|
|
revision: 1,
|
|
delay: -10,
|
|
} as OntimeEvent,
|
|
{
|
|
id: '3',
|
|
type: SupportedEvent.Event,
|
|
timeStart: 20,
|
|
timeEnd: 40,
|
|
duration: 20,
|
|
revision: 1,
|
|
delay: -10,
|
|
} as OntimeEvent,
|
|
{ id: '4', type: SupportedEvent.Block } as OntimeBlock,
|
|
{
|
|
id: '5',
|
|
type: SupportedEvent.Event,
|
|
timeStart: 0,
|
|
timeEnd: 10,
|
|
duration: 10,
|
|
revision: 1,
|
|
delay: 0,
|
|
} as OntimeEvent,
|
|
];
|
|
|
|
const expected = [
|
|
{
|
|
id: '2',
|
|
type: SupportedEvent.Event,
|
|
timeStart: 0,
|
|
timeEnd: 10,
|
|
duration: 10,
|
|
revision: 2,
|
|
delay: 0,
|
|
} as OntimeEvent,
|
|
{
|
|
id: '3',
|
|
type: SupportedEvent.Event,
|
|
timeStart: 10,
|
|
timeEnd: 30,
|
|
duration: 20,
|
|
revision: 2,
|
|
delay: 0,
|
|
} as OntimeEvent,
|
|
{ id: '4', type: SupportedEvent.Block } as OntimeBlock,
|
|
{
|
|
id: '5',
|
|
type: SupportedEvent.Event,
|
|
timeStart: 0,
|
|
timeEnd: 10,
|
|
duration: 10,
|
|
revision: 1,
|
|
delay: 0,
|
|
} as OntimeEvent,
|
|
];
|
|
|
|
const updatedRundown = _applyDelay(delayId, testRundown);
|
|
expect(updatedRundown).toStrictEqual(expected);
|
|
});
|
|
it('maintains constant duration', () => {
|
|
const delayId = '1';
|
|
const testRundown: OntimeRundown = [
|
|
{ id: delayId, type: SupportedEvent.Delay, duration: -30 } as OntimeDelay,
|
|
{
|
|
id: '2',
|
|
type: SupportedEvent.Event,
|
|
timeStart: 0,
|
|
timeEnd: 10,
|
|
duration: 10,
|
|
revision: 1,
|
|
delay: -30,
|
|
} as OntimeEvent,
|
|
{
|
|
id: '3',
|
|
type: SupportedEvent.Event,
|
|
timeStart: 20,
|
|
timeEnd: 40,
|
|
duration: 20,
|
|
revision: 1,
|
|
delay: -30,
|
|
} as OntimeEvent,
|
|
];
|
|
|
|
const expected = [
|
|
{
|
|
id: '2',
|
|
type: SupportedEvent.Event,
|
|
timeStart: 0,
|
|
timeEnd: 10,
|
|
duration: 10,
|
|
revision: 2,
|
|
delay: 0,
|
|
} as OntimeEvent,
|
|
{
|
|
id: '3',
|
|
type: SupportedEvent.Event,
|
|
timeStart: 0,
|
|
timeEnd: 20,
|
|
duration: 20,
|
|
revision: 2,
|
|
delay: 0,
|
|
} as OntimeEvent,
|
|
];
|
|
|
|
const updatedRundown = _applyDelay(delayId, testRundown);
|
|
expect(updatedRundown).toStrictEqual(expected);
|
|
});
|
|
});
|
|
});
|