fix(relativeTime): guard against Invalid Date producing NaN strings
Some checks failed
CI / Unit & Component Tests (pull_request) Failing after 2m36s
CI / OCR Service Tests (pull_request) Successful in 28s
CI / Backend Unit Tests (pull_request) Failing after 2m53s
CI / OCR Service Tests (push) Has been cancelled
CI / Backend Unit Tests (push) Has been cancelled
CI / Unit & Component Tests (push) Has started running

If a row ever receives a malformed uploadedAt (e.g. manual SQL migration,
backend regression), the helper now falls back to "vor 0 Minute(n)"
rather than rendering "vor NaN Tag(en)" to the user.

Addresses Nora's review suggestion.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit was merged in pull request #298.
This commit is contained in:
Marcel
2026-04-20 22:46:53 +02:00
parent 35303831f7
commit 6f3aa056a1
2 changed files with 10 additions and 0 deletions

View File

@@ -31,4 +31,11 @@ describe('relativeTimeDe', () => {
expect(relativeTimeDe(NOW, NOW)).toMatch(/0/);
expect(relativeTimeDe(NOW, NOW)).toMatch(/Minute/i);
});
it('falls back to 0 minutes when the input Date is invalid', () => {
const invalid = new Date('not-a-real-date');
// Never crash the UI if the backend ever ships a malformed uploadedAt.
expect(relativeTimeDe(invalid, NOW)).toMatch(/0/);
expect(relativeTimeDe(invalid, NOW)).toMatch(/Minute/i);
});
});

View File

@@ -2,6 +2,9 @@ import * as m from '$lib/paraglide/messages.js';
export function relativeTimeDe(from: Date, now: Date = new Date()): string {
const minutes = Math.round((now.getTime() - from.getTime()) / 60_000);
// Malformed input (e.g. Invalid Date from a broken backend string) must not
// crash the dashboard — fall back to "0 Minuten" rather than render NaN.
if (!Number.isFinite(minutes)) return m.comment_time_minutes({ count: 0 });
if (minutes < 60) return m.comment_time_minutes({ count: minutes });
if (minutes < 1440) return m.comment_time_hours({ count: Math.round(minutes / 60) });
return m.comment_time_days({ count: Math.round(minutes / 1440) });