53 lines
1.5 KiB
TypeScript
53 lines
1.5 KiB
TypeScript
import {
|
|
formatDuration,
|
|
parseDuration,
|
|
} from '../../../src/lib/utils/datetime';
|
|
|
|
describe('DateTime Utils', () => {
|
|
describe('formatDuration', () => {
|
|
it('formats minutes to h:mm', () => {
|
|
expect(formatDuration(60)).toBe('1:00');
|
|
expect(formatDuration(90)).toBe('1:30');
|
|
expect(formatDuration(125)).toBe('2:05');
|
|
expect(formatDuration(600)).toBe('10:00');
|
|
});
|
|
|
|
it('handles zero minutes', () => {
|
|
expect(formatDuration(0)).toBe('0:00');
|
|
});
|
|
|
|
it('handles less than 60 minutes', () => {
|
|
expect(formatDuration(45)).toBe('0:45');
|
|
expect(formatDuration(5)).toBe('0:05');
|
|
});
|
|
});
|
|
|
|
describe('parseDuration', () => {
|
|
it('parses h:mm to minutes', () => {
|
|
expect(parseDuration('1:00')).toBe(60);
|
|
expect(parseDuration('1:30')).toBe(90);
|
|
expect(parseDuration('2:05')).toBe(125);
|
|
expect(parseDuration('10:00')).toBe(600);
|
|
});
|
|
|
|
it('returns null for invalid format', () => {
|
|
expect(parseDuration('1:5')).toBeNull(); // missing leading zero
|
|
expect(parseDuration('abc')).toBeNull();
|
|
expect(parseDuration('1:60')).toBeNull(); // invalid minutes
|
|
});
|
|
|
|
it('handles zero duration', () => {
|
|
expect(parseDuration('0:00')).toBe(0);
|
|
});
|
|
});
|
|
|
|
describe('roundtrip conversion', () => {
|
|
it('format and parse roundtrip correctly', () => {
|
|
const minutes = 125;
|
|
const formatted = formatDuration(minutes);
|
|
const parsed = parseDuration(formatted);
|
|
expect(parsed).toBe(minutes);
|
|
});
|
|
});
|
|
});
|