Make UI language, timestamps and live feedback consistent
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import { afterEach, describe, expect, it, vi } from 'vitest';
|
||||
import { get } from 'svelte/store';
|
||||
import { availableTimeZones, createTimeFormatter, DEFAULT_TIME_ZONE, validTimeZone } from '../../src/lib/time-zone.js';
|
||||
import { availableTimeZones, createTimeFormatter, DEFAULT_TIME_ZONE, validTimeZone, timestampISO } from '../../src/lib/time-zone.js';
|
||||
import { startTimeZonePreference, timeFormat, timeZone, timeZonePersistenceError, TIME_ZONE_STORAGE_KEY } from '../../src/lib/ui/stores/time-zone.js';
|
||||
|
||||
let stop: (() => void) | undefined;
|
||||
@@ -52,9 +52,29 @@ describe('timezone formatting', () => {
|
||||
it('renders missing or invalid timestamps without crashing the page', () => {
|
||||
for (const value of [null, undefined, '', 'bad timestamp', NaN, new Date(NaN)]) {
|
||||
expect(ny.dateTime(value)).toBe('—');
|
||||
expect(ny.relative(value)).toBe('—');
|
||||
expect(timestampISO(value)).toBeUndefined();
|
||||
}
|
||||
});
|
||||
|
||||
it('shares compact recent times, exact older dates, and UTC normalization', () => {
|
||||
const now = Date.parse('2026-10-07T18:00:00Z');
|
||||
expect(ny.relative(now - 2_000, now)).toBe('Just now');
|
||||
expect(ny.relative('2026-10-07 17:59:48', now)).toBe('12 s ago');
|
||||
expect(ny.relative(now - 120_000, now)).toBe('2 min ago');
|
||||
expect(ny.relative(now - 23 * 3_600_000, now)).toBe('23 h ago');
|
||||
expect(ny.relative('2026-10-06T17:00:00Z', now)).toBe('Yesterday, 1:00 PM');
|
||||
expect(ny.relative('2026-10-05T17:00:00Z', now)).toBe('Oct 5, 2026, 1:00 PM EDT');
|
||||
expect(ny.relative('2026-10-08T18:00:00Z', now)).toBe('Oct 8, 2026, 2:00 PM EDT');
|
||||
expect(timestampISO('2026-10-07 17:59:48')).toBe('2026-10-07T17:59:48.000Z');
|
||||
});
|
||||
|
||||
it('uses timezone calendar dates for yesterday across DST and year boundaries', () => {
|
||||
expect(ny.relative('2026-11-01T04:30:00Z', Date.parse('2026-11-02T05:15:00Z'))).toBe('Yesterday, 12:30 AM');
|
||||
expect(ny.relative('2025-12-31T05:00:00Z', Date.parse('2026-01-01T06:00:00Z'))).toBe('Yesterday, 12:00 AM');
|
||||
expect(createTimeFormatter('invalid').relative('2026-10-05T17:00:00Z', Date.parse('2026-10-07T18:00:00Z'))).toBe('Oct 5, 2026, 1:00 PM EDT');
|
||||
});
|
||||
|
||||
it('offers valid zones including New York and UTC, with an older-browser fallback', () => {
|
||||
expect(availableTimeZones()).toContain(DEFAULT_TIME_ZONE);
|
||||
expect(availableTimeZones()).toContain('UTC');
|
||||
|
||||
Reference in New Issue
Block a user