yishentu--claudian
81 行
2.5 KiB
TypeScript
81 行
2.5 KiB
TypeScript
import { formatDurationMmSs, getTodayDate } from '../../../src/utils/date';
|
|
|
|
describe('getTodayDate', () => {
|
|
it('returns readable date with ISO suffix', () => {
|
|
const result = getTodayDate();
|
|
expect(result).toMatch(/\(\d{4}-\d{2}-\d{2}\)$/);
|
|
});
|
|
|
|
it('includes day of week and full date', () => {
|
|
const result = getTodayDate();
|
|
const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
|
|
const months = ['January', 'February', 'March', 'April', 'May', 'June',
|
|
'July', 'August', 'September', 'October', 'November', 'December'];
|
|
const now = new Date();
|
|
expect(result).toContain(days[now.getDay()]);
|
|
expect(result).toContain(months[now.getMonth()]);
|
|
expect(result).toContain(String(now.getFullYear()));
|
|
});
|
|
|
|
it('ISO portion matches current date', () => {
|
|
const result = getTodayDate();
|
|
const isoMatch = result.match(/\((\d{4}-\d{2}-\d{2})\)/);
|
|
expect(isoMatch).not.toBeNull();
|
|
const today = new Date().toISOString().split('T')[0];
|
|
expect(isoMatch![1]).toBe(today);
|
|
});
|
|
});
|
|
|
|
describe('formatDurationMmSs', () => {
|
|
it('formats 0 seconds as 0s', () => {
|
|
expect(formatDurationMmSs(0)).toBe('0s');
|
|
});
|
|
|
|
it('formats 59 seconds as 59s', () => {
|
|
expect(formatDurationMmSs(59)).toBe('59s');
|
|
});
|
|
|
|
it('formats 60 seconds as 1m 0s', () => {
|
|
expect(formatDurationMmSs(60)).toBe('1m 0s');
|
|
});
|
|
|
|
it('formats 61 seconds as 1m 1s', () => {
|
|
expect(formatDurationMmSs(61)).toBe('1m 1s');
|
|
});
|
|
|
|
it('formats single digit seconds without leading zero', () => {
|
|
expect(formatDurationMmSs(5)).toBe('5s');
|
|
});
|
|
|
|
it('formats minutes and seconds correctly', () => {
|
|
expect(formatDurationMmSs(125)).toBe('2m 5s');
|
|
});
|
|
|
|
it('formats large durations correctly', () => {
|
|
// 10 minutes 30 seconds = 630 seconds
|
|
expect(formatDurationMmSs(630)).toBe('10m 30s');
|
|
});
|
|
|
|
it('formats hour+ durations correctly', () => {
|
|
// 1 hour 5 minutes = 65 minutes = 3900 seconds
|
|
expect(formatDurationMmSs(3900)).toBe('65m 0s');
|
|
});
|
|
|
|
describe('input validation', () => {
|
|
it('returns 0s for negative values', () => {
|
|
expect(formatDurationMmSs(-1)).toBe('0s');
|
|
expect(formatDurationMmSs(-60)).toBe('0s');
|
|
expect(formatDurationMmSs(-100)).toBe('0s');
|
|
});
|
|
|
|
it('returns 0s for NaN', () => {
|
|
expect(formatDurationMmSs(NaN)).toBe('0s');
|
|
});
|
|
|
|
it('returns 0s for Infinity', () => {
|
|
expect(formatDurationMmSs(Infinity)).toBe('0s');
|
|
expect(formatDurationMmSs(-Infinity)).toBe('0s');
|
|
});
|
|
});
|
|
});
|