refactor: runtime service (#715)

* refactor: rename PlaybackService > RuntimeService

* refactor: stateful runtime service

* refactor: merge event loading

* refactor: roll is part of state mutation
This commit is contained in:
Carlos Valente
2024-01-16 19:54:40 +01:00
committed by GitHub
parent ee121bcfcb
commit a2950442d8
27 changed files with 2198 additions and 2467 deletions
@@ -1,5 +1,5 @@
import { expect } from 'vitest';
import { dayInMs } from '../timeConstants';
import { MILLIS_PER_HOUR } from './conversionUtils';
import { millisToString } from './timeFormatting';
describe('millisToString()', () => {
@@ -22,8 +22,8 @@ describe('millisToString()', () => {
{ millis: -3600000, expected: '-01:00:00' },
{ millis: -36000000, expected: '-10:00:00' },
{ millis: -86399000, expected: '-23:59:59' },
{ millis: -86400000, expected: '-00:00:00' },
{ millis: -86401000, expected: '-00:00:01' },
{ millis: -86400000, expected: '-24:00:00' },
{ millis: -86401000, expected: '-24:00:01' },
];
testScenarios.forEach((scenario) => {
@@ -31,6 +31,10 @@ describe('millisToString()', () => {
});
});
it('handles times over 24 hours', () => {
expect(millisToString(dayInMs + MILLIS_PER_HOUR)).toBe('25:00:00');
});
test('random properties', () => {
const testScenarios = [
{ millis: 300, expected: '00:00:00' },
@@ -41,27 +45,8 @@ describe('millisToString()', () => {
{ millis: 3600000, expected: '01:00:00' },
{ millis: 36000000, expected: '10:00:00' },
{ millis: 86399000, expected: '23:59:59' },
{ millis: 86400000, expected: '00:00:00' },
{ millis: 86401000, expected: '00:00:01' },
];
testScenarios.forEach((scenario) => {
expect(millisToString(scenario.millis)).toBe(scenario.expected);
});
});
test.skip('random properties without seconds', () => {
const testScenarios = [
{ millis: 300, expected: '00:00' },
{ millis: 1000, expected: '00:00' },
{ millis: 1500, expected: '00:00' },
{ millis: 60000, expected: '00:01' },
{ millis: 600000, expected: '00:10' },
{ millis: 3600000, expected: '01:00' },
{ millis: 36000000, expected: '10:00' },
{ millis: 86399000, expected: '23:59' },
{ millis: 86400000, expected: '00:00' },
{ millis: 86401000, expected: '00:00' },
{ millis: 86400000, expected: '24:00:00' },
{ millis: 86401000, expected: '24:00:01' },
];
testScenarios.forEach((scenario) => {
@@ -69,98 +54,3 @@ describe('millisToString()', () => {
});
});
});
/**
* import { formatDisplay } from './formatDisplay';
describe('test string from formatDisplay function', () => {
it('test with null values', () => {
const t = { val: null, result: '00:00:00' };
expect(formatDisplay(t.val, false)).toBe(t.result);
});
it('test with not numbers', () => {
const t = { val: 'test', result: '00:00:00' };
// @ts-expect-error -- indulge me for the test
expect(formatDisplay(t.val, false)).toBe(t.result);
});
it('test with valid millis', () => {
const t = { val: 3600000, result: '01:00:00' };
expect(formatDisplay(t.val, false)).toBe(t.result);
});
it('test with negative millis', () => {
const t = { val: -3600000, result: '01:00:00' };
expect(formatDisplay(t.val, false)).toBe(t.result);
});
it('test with 0', () => {
const t = { val: 0, result: '00:00:00' };
expect(formatDisplay(t.val, false)).toBe(t.result);
});
it('test with -0', () => {
const t = { val: -0, result: '00:00:00' };
expect(formatDisplay(t.val, false)).toBe(t.result);
});
it('test with 86400 (24 hours)', () => {
const t = { val: 86400000, result: '00:00:00' };
expect(formatDisplay(t.val, false)).toBe(t.result);
});
it('test with 86401 (24 hours and 1 second)', () => {
const t = { val: 86401000, result: '00:00:01' };
expect(formatDisplay(t.val, false)).toBe(t.result);
});
it('test with -86401 (-24 hours and 1 second)', () => {
const t = { val: -86401000, result: '00:00:01' };
expect(formatDisplay(t.val, false)).toBe(t.result);
});
});
describe('test string from formatDisplay function with hidezero', () => {
it('test with null values', () => {
const t = { val: null, result: '00:00' };
expect(formatDisplay(t.val, true)).toBe(t.result);
});
it('test with valid millis', () => {
const t = { val: 3600000, result: '01:00:00' };
expect(formatDisplay(t.val, true)).toBe(t.result);
});
it('test with negative millis', () => {
const t = { val: -3600000, result: '01:00:00' };
expect(formatDisplay(t.val, true)).toBe(t.result);
});
it('test with 0', () => {
const t = { val: 0, result: '00:00' };
expect(formatDisplay(t.val, true)).toBe(t.result);
});
it('test with -0', () => {
const t = { val: -0, result: '00:00' };
expect(formatDisplay(t.val, true)).toBe(t.result);
});
it('test with 86400 (24 hours)', () => {
const t = { val: 86400000, result: '00:00' };
expect(formatDisplay(t.val, true)).toBe(t.result);
});
it('test with 86401 (24 hours and 1 second)', () => {
const t = { val: 86401000, result: '00:01' };
expect(formatDisplay(t.val, true)).toBe(t.result);
});
it('test with -86401 (-24 hours and 1 second)', () => {
const t = { val: -86401000, result: '00:01' };
expect(formatDisplay(t.val, true)).toBe(t.result);
});
});
*/
@@ -25,7 +25,7 @@ export function millisToString(millis?: MaybeNumber, options?: FormatOptions): s
const absoluteMillis = Math.abs(millis);
const seconds = millisToSeconds(absoluteMillis) % 60;
const minutes = millisToMinutes(absoluteMillis) % 60;
const hours = millisToHours(absoluteMillis) % 24;
const hours = millisToHours(absoluteMillis);
const isNegative = millis < 0;
@@ -1,10 +1,14 @@
import { Playback } from 'ontime-types';
/**
* Simple rules to determine whether a playback action is valid
*/
export function validatePlayback(currentPlayback: Playback) {
return {
start: currentPlayback !== Playback.Stop,
pause: currentPlayback === Playback.Play || currentPlayback === Playback.Roll,
roll: true,
start: currentPlayback !== Playback.Stop && currentPlayback !== Playback.Roll,
pause: currentPlayback === Playback.Play,
roll: currentPlayback !== Playback.Roll,
stop: currentPlayback !== Playback.Stop,
reload: currentPlayback !== Playback.Stop && currentPlayback !== Playback.Roll,
};
}