mirror of
https://github.com/cpvalente/ontime.git
synced 2026-08-06 07:53:54 +00:00
130 lines
4.3 KiB
TypeScript
130 lines
4.3 KiB
TypeScript
import { EndAction, TimerType } from 'ontime-types';
|
|
import { expect } from 'vitest';
|
|
|
|
import { dayInMs } from '../timeConstants.js';
|
|
import { calculateDuration, validateEndAction, validateTimerType, validateTimes } from './validateEvent.js';
|
|
|
|
describe('validateEndAction()', () => {
|
|
it('recognises a string representation of an action', () => {
|
|
const endAction = validateEndAction('load-next');
|
|
expect(endAction).toBe(EndAction.LoadNext);
|
|
});
|
|
it('returns fallback otherwise', () => {
|
|
const emptyAction = validateEndAction('', EndAction.Stop);
|
|
const invalidAction = validateEndAction('this-does-not-exist', EndAction.PlayNext);
|
|
expect(emptyAction).toBe(EndAction.Stop);
|
|
expect(invalidAction).toBe(EndAction.PlayNext);
|
|
});
|
|
});
|
|
|
|
describe('validateTimerType()', () => {
|
|
it('recognises a string representation of an action', () => {
|
|
const timerType = validateTimerType('time-to-end');
|
|
expect(timerType).toBe(TimerType.TimeToEnd);
|
|
});
|
|
it('returns fallback otherwise', () => {
|
|
const emptyType = validateTimerType('', TimerType.Clock);
|
|
const invalidType = validateTimerType('this-does-not-exist', TimerType.CountDown);
|
|
expect(emptyType).toBe(TimerType.Clock);
|
|
expect(invalidType).toBe(TimerType.CountDown);
|
|
});
|
|
});
|
|
|
|
describe('validateTimes()', () => {
|
|
it('passes through a well defined time list', () => {
|
|
const { timeStart, timeEnd, duration } = validateTimes(5, 10, 5);
|
|
expect(timeStart).toBe(5);
|
|
expect(timeEnd).toBe(10);
|
|
expect(duration).toBe(5);
|
|
});
|
|
|
|
it('handles cases when no times are given', () => {
|
|
const { timeStart, timeEnd, duration } = validateTimes(null, undefined, null);
|
|
expect(timeStart).toBe(0);
|
|
expect(timeEnd).toBe(0);
|
|
expect(duration).toBe(0);
|
|
});
|
|
|
|
it('calculates duration', () => {
|
|
const { timeStart, timeEnd, duration } = validateTimes(5, 10);
|
|
expect(timeStart).toBe(5);
|
|
expect(timeEnd).toBe(10);
|
|
expect(duration).toBe(5);
|
|
});
|
|
|
|
it('calculates end time', () => {
|
|
const { timeStart, timeEnd, duration } = validateTimes(5, undefined, 10);
|
|
expect(timeStart).toBe(5);
|
|
expect(timeEnd).toBe(15);
|
|
expect(duration).toBe(10);
|
|
});
|
|
|
|
it('handles events that finish the day after', () => {
|
|
const { timeStart, timeEnd, duration } = validateTimes(100, 10);
|
|
expect(timeStart).toBe(100);
|
|
expect(timeEnd).toBe(10);
|
|
expect(duration).toBe(dayInMs - 90);
|
|
});
|
|
|
|
it('corrects time in case of conflicts', () => {
|
|
const { timeStart, timeEnd, duration } = validateTimes(5, 15, 15);
|
|
expect(timeStart).toBe(5);
|
|
expect(timeEnd).toBe(15);
|
|
expect(duration).toBe(10);
|
|
});
|
|
|
|
it('calculates start time', () => {
|
|
const { timeStart, timeEnd, duration } = validateTimes(undefined, 15, 10);
|
|
expect(timeStart).toBe(5);
|
|
expect(timeEnd).toBe(15);
|
|
expect(duration).toBe(10);
|
|
});
|
|
|
|
it('calculates start and end time', () => {
|
|
const { timeStart, timeEnd, duration } = validateTimes(undefined, undefined, 10);
|
|
expect(timeStart).toBe(0);
|
|
expect(timeEnd).toBe(10);
|
|
expect(duration).toBe(10);
|
|
});
|
|
|
|
it('ensures values are integers', () => {
|
|
const { timeStart, timeEnd, duration } = validateTimes(0.000001, 10.312335342, 10);
|
|
expect(timeStart).toBe(0);
|
|
expect(timeEnd).toBe(10);
|
|
expect(duration).toBe(10);
|
|
});
|
|
|
|
it('ensures values dont overflow dayMs', () => {
|
|
const start = 86100000;
|
|
const endOverDay = 87420000;
|
|
const durationNormal = 1320000;
|
|
|
|
const { timeStart, timeEnd, duration } = validateTimes(start, endOverDay, durationNormal);
|
|
expect(timeStart).toBe(start);
|
|
expect(timeEnd).toBe(1020000);
|
|
expect(duration).toBe(durationNormal);
|
|
});
|
|
});
|
|
|
|
describe('calculateDuration()', () => {
|
|
describe('Given start and end values', () => {
|
|
it('is the difference between end and start', () => {
|
|
const duration = calculateDuration(10, 20);
|
|
expect(duration).toBe(10);
|
|
});
|
|
});
|
|
|
|
describe('Handles edge cases', () => {
|
|
it('handles events that go over midnight', () => {
|
|
const duration = calculateDuration(51, 50);
|
|
expect(duration).toBe(dayInMs - 1);
|
|
});
|
|
it('handles no difference', () => {
|
|
const duration1 = calculateDuration(0, 0);
|
|
const duration2 = calculateDuration(dayInMs, dayInMs);
|
|
expect(duration1).toBe(0);
|
|
expect(duration2).toBe(0);
|
|
});
|
|
});
|
|
});
|