Browse Source

fix(tests): make formatTimeOnly assertions locale-agnostic (#1213)

  formatTimeOnly calls date.toLocaleTimeString([], …) which respects the
  user's locale by design — the en_DK.UTF-8 locale uses "." as the time
  separator, so the function correctly returns "02.30 pm" / "14.30" for
  a Danish-English user. The two assertions hard-coded ":" as the
  separator, which made the tests fail under any locale that doesn't
  use ":". The implementation was right, the tests were wrong.

  Switch the regex to use \D+ (any non-digit, one or more) for the
  separator. This tests the actual contract — "hours and minutes,
  separated somehow" — without coupling to a separator that varies by
  locale (en_DK uses ".", some en_* locales use a narrow no-break space
  at U+202F, most others use ":").

  Verified passing under en_DK.UTF-8, en_US.UTF-8, and de_DE.UTF-8.
  Audited every other toLocaleTimeString / toLocaleString call site in
  the test suite — no other places hard-code separator characters.
maziggy 3 weeks ago
parent
commit
02fbebba9f
2 changed files with 3 additions and 2 deletions
  1. 0 0
      CHANGELOG.md
  2. 3 2
      frontend/src/__tests__/utils/date.test.ts

File diff suppressed because it is too large
+ 0 - 0
CHANGELOG.md


+ 3 - 2
frontend/src/__tests__/utils/date.test.ts

@@ -296,14 +296,15 @@ describe('formatTimeOnly', () => {
   it('formats time with 12h format', () => {
   it('formats time with 12h format', () => {
     const date = new Date(2025, 5, 15, 14, 30);
     const date = new Date(2025, 5, 15, 14, 30);
     const result = formatTimeOnly(date, '12h');
     const result = formatTimeOnly(date, '12h');
-    expect(result).toMatch(/2:30|02:30/);
+    // Locale-agnostic: separator is "." in en_DK, " " (NBSP) in some, ":" elsewhere.
+    expect(result).toMatch(/\b0?2\D+30\b/);
     expect(result.toUpperCase()).toContain('PM');
     expect(result.toUpperCase()).toContain('PM');
   });
   });
 
 
   it('formats time with 24h format', () => {
   it('formats time with 24h format', () => {
     const date = new Date(2025, 5, 15, 14, 30);
     const date = new Date(2025, 5, 15, 14, 30);
     const result = formatTimeOnly(date, '24h');
     const result = formatTimeOnly(date, '24h');
-    expect(result).toContain('14:30');
+    expect(result).toMatch(/\b14\D+30\b/);
   });
   });
 });
 });
 
 

Some files were not shown because too many files changed in this diff