45 lines
2.2 KiB
TypeScript
45 lines
2.2 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
|
|
import {
|
|
formatServerDateTime,
|
|
serverDateTimeInputToIso,
|
|
toServerDateTimeInputValue,
|
|
} from '../src/time/ServerDateTime.js';
|
|
|
|
describe('formatServerDateTime', () => {
|
|
it('formats ISO instants with the fixed UTC+9 service offset', () => {
|
|
expect(formatServerDateTime('2026-08-13T00:05:06.000Z')).toBe('2026-08-13 09:05:06');
|
|
expect(formatServerDateTime('0185-01-02T00:04:05.000Z')).toBe('0185-01-02 09:04:05');
|
|
expect(formatServerDateTime('2026-08-13T18:05:06.000Z', { format: 'date' })).toBe('2026-08-14');
|
|
expect(formatServerDateTime('2026-08-13T18:05:06.000Z', { format: 'hourMinute' })).toBe('03:05');
|
|
});
|
|
|
|
it('preserves timezone-less legacy wall-clock values', () => {
|
|
expect(formatServerDateTime('0185-01-02 03:04:05')).toBe('0185-01-02 03:04:05');
|
|
expect(formatServerDateTime('0185-01-02T03:04:05', { format: 'monthDayTime' })).toBe('01-02 03:04');
|
|
expect(formatServerDateTime('2026-08-13 09:05:06', { format: 'minuteSecond' })).toBe('05:06');
|
|
});
|
|
|
|
it('offers explicit shapes and predictable fallbacks', () => {
|
|
const value = '2026-08-13T00:05:06.000Z';
|
|
expect(formatServerDateTime(value, { format: 'dateTimeMinutes' })).toBe('2026-08-13 09:05');
|
|
expect(formatServerDateTime(value, { format: 'timeSeconds' })).toBe('09:05:06');
|
|
expect(formatServerDateTime(value, { format: 'monthDayTimeSeconds' })).toBe('08-13 09:05:06');
|
|
expect(formatServerDateTime(undefined, { fallback: '-' })).toBe('-');
|
|
expect(formatServerDateTime('not-a-date')).toBe('not-a-date');
|
|
});
|
|
});
|
|
|
|
describe('server datetime-local conversion', () => {
|
|
it('does not depend on the browser or process timezone', () => {
|
|
expect(serverDateTimeInputToIso('2026-08-13T09:05')).toBe('2026-08-13T00:05:00.000Z');
|
|
expect(toServerDateTimeInputValue('2026-08-13T00:05:00.000Z')).toBe('2026-08-13T09:05');
|
|
});
|
|
|
|
it('rejects invalid local input', () => {
|
|
expect(serverDateTimeInputToIso('2026-02-30T09:05')).toBeUndefined();
|
|
expect(serverDateTimeInputToIso('')).toBeUndefined();
|
|
expect(toServerDateTimeInputValue('not-a-date')).toBe('');
|
|
});
|
|
});
|