V2 ws store (#310)

* Update TimerService.ts

* refactor: message service publishes to store

* refactor: several type improvements

* V2 ws store wss (#309)

* refactor: shared logging types

* refactor: simplify message service consumption

* refactor: create discrete logging system

* refactor: move socket.io > websocket
This commit is contained in:
Carlos Valente
2023-03-15 22:06:47 +01:00
committed by GitHub
parent 11648ee546
commit 76c8f8a4d5
86 changed files with 1876 additions and 1936 deletions
@@ -0,0 +1,71 @@
import { expect } from 'vitest';
import { millisToString } from './millisToString';
describe('millisToString()', () => {
it('returns fallback if millis is null', () => {
const fallback = 'testFallback';
expect(millisToString(null, true, fallback)).toBe(fallback);
});
it('returns 00:00:00 if 0 is passed', () => {
expect(millisToString(0)).toBe('00:00:00');
});
it('shows negative timers', () => {
const testScenarios = [
{ millis: -300, expected: '-00:00:00' },
{ millis: -1000, expected: '-00:00:01' },
{ millis: -1500, expected: '-00:00:01' },
{ millis: -60000, expected: '-00:01:00' },
{ millis: -600000, expected: '-00:10:00' },
{ 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('random properties', () => {
const testScenarios = [
{ millis: 300, expected: '00:00:00' },
{ millis: 1000, expected: '00:00:01' },
{ millis: 1500, expected: '00:00:01' },
{ millis: 60000, expected: '00:01:00' },
{ millis: 600000, expected: '00:10:00' },
{ 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('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' },
];
testScenarios.forEach((scenario) => {
expect(millisToString(scenario.millis, false)).toBe(scenario.expected);
});
});
});
@@ -0,0 +1,19 @@
import { DateTime } from 'luxon';
/**
* @description Converts milliseconds to string representing time
* @param {number | null} millis - time in milliseconds
* @param {boolean} showSeconds - weather to show the seconds
* @param {string} fallback - what to return if value is null
* @returns {string} String representing time 00:12:02
*/
export function millisToString(millis: number | null, showSeconds = true, fallback = '...') {
if (millis === null) {
return fallback;
}
const isNegative = millis < 0;
const format = `HH:mm${showSeconds ? ':ss' : ''}`;
return `${isNegative ? '-' : ''}${DateTime.fromMillis(Math.abs(millis)).toUTC().toFormat(format)}`;
}