UNPKG

@qntm-code/utils

Version:

A collection of useful utility functions with associated TypeScript types. All functions have been unit tested.

158 lines (157 loc) 8.36 kB
import { formatTime } from '.'; import { TimeUnit } from '../dates'; describe(`formatTime`, () => { describe(`default options`, () => { const suites = [ { time: 0, expected: `0s` }, { time: 499, expected: `0s` }, { time: 500, expected: `1s` }, { time: 1000, expected: `1s` }, { time: 1001, expected: `1s` }, { time: 10000, expected: `10s` }, { time: 10001, expected: `10s` }, { time: 59999, expected: `1m` }, { time: 60000, expected: `1m` }, { time: 69999, expected: `1m 10s` }, { time: 600000, expected: `10m` }, { time: 610000, expected: `10m 10s` }, { time: 3600000, expected: `1h` }, ]; runSuites(suites); }); describe(`with options`, () => { describe(`forceAllUnits`, () => { const options = { forceAllUnits: false }; const suites = [ { time: 0, expected: `0s`, options }, { time: 1, expected: `0s`, options }, { time: 1000, expected: `1s`, options }, { time: 10000, expected: `10s`, options }, { time: 60000, expected: `1m`, options }, { time: 60001, expected: `1m`, options }, { time: 70000, expected: `1m 10s`, options }, { time: 600000, expected: `10m`, options }, { time: 601000, expected: `10m 1s`, options }, { time: 610000, expected: `10m 10s`, options }, { time: 3600000, expected: `1h`, options }, { time: 3601000, expected: `1h 1s`, options }, { time: 3610000, expected: `1h 10s`, options }, { time: 3660000, expected: `1h 1m`, options }, { time: 3661000, expected: `1h 1m 1s`, options }, { time: 3670000, expected: `1h 1m 10s`, options }, { time: 4200000, expected: `1h 10m`, options }, { time: 4201000, expected: `1h 10m 1s`, options }, { time: 4210000, expected: `1h 10m 10s`, options }, { time: 36000000, expected: `10h`, options }, { time: 36001000, expected: `10h 1s`, options }, { time: 36010000, expected: `10h 10s`, options }, { time: 36060000, expected: `10h 1m`, options }, { time: 36061000, expected: `10h 1m 1s`, options }, { time: 36070000, expected: `10h 1m 10s`, options }, { time: 36600000, expected: `10h 10m`, options }, { time: 36601000, expected: `10h 10m 1s`, options }, { time: 36610000, expected: `10h 10m 10s`, options }, ]; runSuites(suites); }); describe(`timeUnit`, () => { const options = { timeUnit: TimeUnit.Seconds }; const suites = [ { time: 0, expected: `0s`, options }, { time: 0.5, expected: `1s`, options }, { time: 1, expected: `1s`, options }, { time: 60, expected: `1m`, options }, { time: 3600, expected: `1h`, options }, ]; runSuites(suites); }); describe(`secondsDecimalPlaces`, () => { describe(`3 decimal places`, () => { const suites = [ { time: 0, expected: `0s`, options: { secondsDecimalPlaces: 3 } }, { time: 1, expected: `0.001s`, options: { secondsDecimalPlaces: 3 } }, { time: 10, expected: `0.01s`, options: { secondsDecimalPlaces: 3 } }, { time: 100, expected: `0.1s`, options: { secondsDecimalPlaces: 3 } }, ]; runSuites(suites); }); describe(`2 decimal places`, () => { const suites = [ { time: 0, expected: `0s`, options: { secondsDecimalPlaces: 2 } }, { time: 1, expected: `0s`, options: { secondsDecimalPlaces: 2 } }, { time: 10, expected: `0.01s`, options: { secondsDecimalPlaces: 2 } }, { time: 100, expected: `0.1s`, options: { secondsDecimalPlaces: 2 } }, ]; runSuites(suites); }); describe(`1 decimal place`, () => { const suites = [ { time: 0, expected: `0s`, options: { secondsDecimalPlaces: 1, forceAllUnits: false } }, { time: 1, expected: `0s`, options: { secondsDecimalPlaces: 1, forceAllUnits: false } }, { time: 10, expected: `0s`, options: { secondsDecimalPlaces: 1, forceAllUnits: false } }, { time: 100, expected: `0.1s`, options: { secondsDecimalPlaces: 1, forceAllUnits: false } }, ]; runSuites(suites); }); }); describe(`padDecimals`, () => { describe(`3 decimal places`, () => { const suites = [ { time: 0, expected: `0.000s`, options: { padDecimals: true, secondsDecimalPlaces: 3 } }, { time: 1, expected: `0.001s`, options: { padDecimals: true, secondsDecimalPlaces: 3 } }, { time: 10, expected: `0.010s`, options: { padDecimals: true, secondsDecimalPlaces: 3 } }, { time: 100, expected: `0.100s`, options: { padDecimals: true, secondsDecimalPlaces: 3 } }, ]; runSuites(suites); }); describe(`2 decimal places`, () => { const suites = [ { time: 0, expected: `0.00s`, options: { padDecimals: true, secondsDecimalPlaces: 2 } }, { time: 1, expected: `0.00s`, options: { padDecimals: true, secondsDecimalPlaces: 2 } }, { time: 10, expected: `0.01s`, options: { padDecimals: true, secondsDecimalPlaces: 2 } }, { time: 100, expected: `0.10s`, options: { padDecimals: true, secondsDecimalPlaces: 2 } }, ]; runSuites(suites); }); describe(`1 decimal place`, () => { const suites = [ { time: 0, expected: `0.0s`, options: { padDecimals: true, secondsDecimalPlaces: 1 } }, { time: 1, expected: `0.0s`, options: { padDecimals: true, secondsDecimalPlaces: 1 } }, { time: 10, expected: `0.0s`, options: { padDecimals: true, secondsDecimalPlaces: 1 } }, { time: 100, expected: `0.1s`, options: { padDecimals: true, secondsDecimalPlaces: 1 } }, ]; runSuites(suites); }); }); describe(`suffixes`, () => { const options = { hourSuffix: ' HOURS', minuteSuffix: ' MINUTES', secondSuffix: ' SECONDS', secondsDecimalPlaces: 2, padDecimals: true, }; const suites = [ { time: 0, expected: `0.00 SECONDS`, options }, { time: 9, expected: `0.01 SECONDS`, options }, { time: 10, expected: `0.01 SECONDS`, options }, { time: 499, expected: `0.50 SECONDS`, options }, { time: 500, expected: `0.50 SECONDS`, options }, { time: 1000, expected: `1.00 SECONDS`, options }, { time: 1001, expected: `1.00 SECONDS`, options }, { time: 10000, expected: `10.00 SECONDS`, options }, { time: 10001, expected: `10.00 SECONDS`, options }, { time: 59999, expected: `1 MINUTES`, options }, { time: 60000, expected: `1 MINUTES`, options }, { time: 69999, expected: `1 MINUTES 10.00 SECONDS`, options }, { time: 600000, expected: `10 MINUTES`, options }, { time: 610000, expected: `10 MINUTES 10.00 SECONDS`, options }, { time: 3600000, expected: `1 HOURS`, options }, ]; runSuites(suites); }); }); }); function runSuites(suites) { suites.forEach(({ time, expected, options }) => it(`should format ${time}${options?.timeUnit ?? 'ms'} to ${expected}`, () => expect(formatTime(time, options)).toBe(expected))); }