2025-04-01 10:38:02 +09:00

57 lines
1.7 KiB
TypeScript

import { formatPrometheusDuration, isValidPrometheusDuration, parsePrometheusDuration } from './time';
describe('isValidPrometheusDuration', () => {
const validDurations = ['20h30m10s45ms', '1m30s', '20s4h', '90s', '10s', '20h20h', '2d4h20m'];
it.each(validDurations)('%s should be valid', (duration) => {
expect(isValidPrometheusDuration(duration)).toBe(true);
});
const invalidDurations = ['20h 30m 10s 45ms', '10Y', 'sample text', 'm'];
it.each(invalidDurations)('%s should NOT be valid', (duration) => {
expect(isValidPrometheusDuration(duration)).toBe(false);
});
});
describe('parsePrometheusDuration', () => {
const tests: Array<[string, number]> = [
['1ms', 1],
['1s', 1000],
['1m', 1000 * 60],
['1h', 1000 * 60 * 60],
['1d', 1000 * 60 * 60 * 24],
['1w', 1000 * 60 * 60 * 24 * 7],
['1y', 1000 * 60 * 60 * 24 * 365],
['1d10h17m36s789ms', 123456789],
['1w4d10h20m54s321ms', 987654321],
['1y1w1d1h1m1s1ms', 32230861001],
];
test.each(tests)('.parsePrometheusDuration(%s)', (input, expected) => {
expect(parsePrometheusDuration(input)).toBe(expected);
});
});
describe('formatPrometheusDuration', () => {
it('should return "0s" for 0 milliseconds', () => {
const result = formatPrometheusDuration(0);
expect(result).toBe('0s');
});
const tests: Array<[number, string]> = [
[0, '0s'],
[1000, '1s'],
[60000, '1m'],
[3600000, '1h'],
[86400000, '1d'],
[604800000, '1w'],
[31536000000, '1y'],
[123456789, '1d10h17m36s789ms'],
[987654321, '1w4d10h20m54s321ms'],
[32230861001, '1y1w1d1h1m1s1ms'],
];
test.each(tests)('.formatPrometheusDuration(%s)', (input, expected) => {
expect(formatPrometheusDuration(input)).toBe(expected);
});
});