import { intervalToAbbreviatedDurationString, addDurationToDate, parseDuration, isValidDuration, isValidGoDuration, durationToMilliseconds, isValidGrafanaDuration, } from './durationutil'; describe('Duration util', () => { describe('intervalToAbbreviatedDurationString', () => { it('creates a duration string for a provided interval', () => { const startDate = new Date(); const endDate = addDurationToDate(startDate, { months: 1, weeks: 1, days: 1, hours: 1, minutes: 1, seconds: 1 }); expect(intervalToAbbreviatedDurationString({ start: startDate, end: endDate })).toEqual('1M 8d 1h 1m 1s'); }); it('should return an empty string if start date is after end date', () => { const endDate = new Date(); const startDate = addDurationToDate(endDate, { minutes: 1 }); expect(intervalToAbbreviatedDurationString({ start: startDate, end: endDate })).toEqual(''); }); }); describe('parseDuration', () => { it('parses a duration string', () => { const durationString = '3M 5d 20m'; expect(parseDuration(durationString)).toEqual({ months: 3, days: 5, minutes: 20 }); }); it('strips out non valid durations', () => { const durationString = '3M 6v 5b 4m'; expect(parseDuration(durationString)).toEqual({ months: 3, minutes: 4 }); }); }); describe('isValidDuration', () => { it('valid duration string returns true', () => { const durationString = '3M 5d 20m'; expect(isValidDuration(durationString)).toEqual(true); }); it('invalid duration string returns false', () => { const durationString = '3M 6v 5b 4m'; expect(isValidDuration(durationString)).toEqual(false); }); }); describe('isValidGoDuration', () => { it('valid duration string returns true', () => { const durationString = '3h 4m 1s 2ms 3us 5ns'; expect(isValidGoDuration(durationString)).toEqual(true); }); it('valid float number duration string returns true', () => { const durationString = '3.1h 4.0m 0.1s 2.11ms 0.03us 5.3333ns'; expect(isValidGoDuration(durationString)).toEqual(true); }); it('invalid duration string returns false', () => { const durationString = '3M 6v 5b 4m'; expect(isValidGoDuration(durationString)).toEqual(false); }); it('invalid float number duration string returns false', () => { const durationString = '3.h -4.0m 0.s 2.ms -0.us 5.ns'; expect(isValidGoDuration(durationString)).toEqual(false); }); }); describe('isValidGrafanaDuration', () => { it('valid duration string returns true', () => { const durationString = '7y 6M 5w 4d 3h 4m 1s 2ms 3us 5ns'; expect(isValidGrafanaDuration(durationString)).toEqual(true); }); it('valid float number duration string returns true', () => { const durationString = '7.1y 6.1M 5.1w 4.1d 3.1h 4.0m 0.1s 2.11ms 0.03us 5.3333ns'; expect(isValidGrafanaDuration(durationString)).toEqual(true); }); it('invalid duration string returns false', () => { const durationString = '3M 6v 5b 4m'; expect(isValidGrafanaDuration(durationString)).toEqual(false); }); it('invalid float number duration string returns false', () => { const durationString = '3.h -4.0m 0.s 2.ms -0.us 5.ns'; expect(isValidGrafanaDuration(durationString)).toEqual(false); }); }); describe('durationToMilliseconds', () => { it('converts a duration to milliseconds', () => { const duration = { hours: 1, minutes: 30, seconds: 45 }; const now = new Date('2023-07-12'); const result = addDurationToDate(now, duration).getTime() - now.getTime(); expect(result).toEqual(durationToMilliseconds(duration)); }); }); });