From 332bba36079f51282871a5eec213298cc3fee1e1 Mon Sep 17 00:00:00 2001 From: marius-at-atb <134292729+marius-at-atb@users.noreply.github.com> Date: Thu, 25 Sep 2025 12:20:37 +0200 Subject: [PATCH 1/3] Support planner web langauge --- src/__tests__/utils.test.ts | 77 ++++++++++++++++++++++--------------- src/utils.ts | 9 +---- 2 files changed, 48 insertions(+), 38 deletions(-) diff --git a/src/__tests__/utils.test.ts b/src/__tests__/utils.test.ts index 0119f65..e2343c2 100644 --- a/src/__tests__/utils.test.ts +++ b/src/__tests__/utils.test.ts @@ -1,4 +1,16 @@ -import {nullishToOptional, formatNumberToString, Language} from '../utils'; +import {nullishToOptional, formatNumberToString} from '../utils'; + +export enum AppLanguage { + Norwegian = 'nb', + English = 'en', + Nynorsk = 'nn', +} + +export enum PlannerWebLanguage { + Norwegian = 'no', + English = 'en-US', + Nynorsk = 'nn', +} describe('nullishToOptional', () => { it('should return undefined for nullish values', () => { @@ -14,38 +26,43 @@ describe('nullishToOptional', () => { }); }); -describe('formatNumberToString', () => { - it('should format integer without decimals by default', () => { - expect(formatNumberToString(10, Language.Norwegian)).toBe('10'); - }); +function runFormatNumberToStringTests( + Enum: typeof AppLanguage | typeof PlannerWebLanguage, + enumName: string, +) { + describe(`formatNumberToString with ${enumName}`, () => { + it('should format integer without decimals by default', () => { + expect(formatNumberToString(10, Enum.Norwegian)).toBe('10'); + }); - it('should format number with one decimal to two decimals by default', () => { - expect(formatNumberToString(10.1, Language.Norwegian)).toBe('10,10'); - }); + it('should format number with one decimal to two decimals by default', () => { + expect(formatNumberToString(10.1, Enum.Norwegian)).toBe('10,10'); + }); - it('should round and format number with more than two decimals', () => { - expect(formatNumberToString(10.125, Language.Norwegian)).toBe('10,13'); - expect(formatNumberToString(10.999, Language.Norwegian)).toBe('11'); - }); + it('should round and format number with more than two decimals', () => { + expect(formatNumberToString(10.125, Enum.Norwegian)).toBe('10,13'); + expect(formatNumberToString(10.999, Enum.Norwegian)).toBe('11'); + }); - it('should use minDigits and maxDigits when provided', () => { - expect(formatNumberToString(10.1, Language.Norwegian, 1, 1)).toBe('10,1'); - expect(formatNumberToString(10.1, Language.Norwegian, 3, 3)).toBe('10,100'); - expect(formatNumberToString(10, Language.Norwegian, 1, 1)).toBe('10,0'); - expect(formatNumberToString(10, Language.Norwegian, 0, 3)).toBe('10'); - }); + it('should use minDigits and maxDigits when provided', () => { + expect(formatNumberToString(10.1, Enum.Norwegian, 1, 1)).toBe('10,1'); + expect(formatNumberToString(10.1, Enum.Norwegian, 3, 3)).toBe('10,100'); + expect(formatNumberToString(10, Enum.Norwegian, 1, 1)).toBe('10,0'); + expect(formatNumberToString(10, Enum.Norwegian, 0, 3)).toBe('10'); + }); - it('should prioritize maxDigits if it is less than minDigits', () => { - expect(formatNumberToString(10.1234, Language.Norwegian, 3, 1)).toBe( - '10,1', - ); - }); + it('should prioritize maxDigits if it is less than minDigits', () => { + expect(formatNumberToString(10.1234, Enum.Norwegian, 3, 1)).toBe('10,1'); + }); - it('should use correct locale for formatting', () => { - expect(formatNumberToString(1234.5, Language.English)).toBe('1,234.50'); - // Norwegian locale uses non-breaking space as thousand separator - expect(formatNumberToString(1234.5, Language.Norwegian)).toBe( - '1\u00a0234,50', - ); + it('should use correct locale for formatting', () => { + expect(formatNumberToString(1234.5, Enum.English)).toBe('1,234.50'); + expect(formatNumberToString(1234.5, Enum.Norwegian)).toBe( + '1\u00a0234,50', + ); + }); }); -}); +} + +runFormatNumberToStringTests(AppLanguage, 'AppLanguage'); +runFormatNumberToStringTests(PlannerWebLanguage, 'PlannerWebLanguage'); diff --git a/src/utils.ts b/src/utils.ts index adbfba5..60ca88b 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -14,13 +14,6 @@ export function nullishToOptional( return value ?? undefined; } -// Language should be imported from translations if that is also moved to utils one day. -export enum Language { - Norwegian = 'nb', - English = 'en', - Nynorsk = 'nn', -} - /** * A utility function to format a number to a string with a given * number of decimals. @@ -41,7 +34,7 @@ export enum Language { */ export const formatNumberToString = ( num: number, - language: Language, + language: Intl.LocalesArgument, minDigits: number = 0, maxDigits: number = 2, ) => { From 8ea00ef4478620807b7fa165b69d57d4f89733b3 Mon Sep 17 00:00:00 2001 From: marius-at-atb <134292729+marius-at-atb@users.noreply.github.com> Date: Thu, 25 Sep 2025 12:29:28 +0200 Subject: [PATCH 2/3] Add some more tests for Norwegian --- src/__tests__/utils.test.ts | 53 +++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/src/__tests__/utils.test.ts b/src/__tests__/utils.test.ts index e2343c2..b2f57d1 100644 --- a/src/__tests__/utils.test.ts +++ b/src/__tests__/utils.test.ts @@ -61,6 +61,59 @@ function runFormatNumberToStringTests( '1\u00a0234,50', ); }); + + it('should show decimals on whole numbers if minDigits is set', () => { + expect(formatNumberToString(11.0, Enum.Norwegian, 2)).toBe('11,00'); + expect(formatNumberToString(11, Enum.Norwegian, 2)).toBe('11,00'); + expect(formatNumberToString(11.0, Enum.Norwegian, 2, 3)).toBe('11,00'); + expect(formatNumberToString(11, Enum.Norwegian, 2, 3)).toBe('11,00'); + }); + + it('should show number of decimals up to given maxDigits on decimal numbers', () => { + expect(formatNumberToString(10.2, Enum.Norwegian, undefined, 3)).toBe( + '10,20', + ); + expect(formatNumberToString(10.23, Enum.Norwegian, undefined, 3)).toBe( + '10,23', + ); + expect(formatNumberToString(10.233, Enum.Norwegian, undefined, 3)).toBe( + '10,233', + ); + expect(formatNumberToString(10.237, Enum.Norwegian, undefined, 3)).toBe( + '10,237', + ); + expect(formatNumberToString(10.2346, Enum.Norwegian, undefined, 3)).toBe( + '10,235', + ); + }); + + it('should always round to whole number when minDigits and maxDigits are 0', () => { + expect(formatNumberToString(10.2, Enum.Norwegian, 0, 0)).toBe('10'); + expect(formatNumberToString(10.23, Enum.Norwegian, 0, 0)).toBe('10'); + expect(formatNumberToString(10.233, Enum.Norwegian, 0, 0)).toBe('10'); + expect(formatNumberToString(10.237, Enum.Norwegian, 0, 0)).toBe('10'); + }); + + it('should always show 3 digits', () => { + expect(formatNumberToString(10.2, Enum.Norwegian, 3, 3)).toBe('10,200'); + expect(formatNumberToString(10.23, Enum.Norwegian, 3, 3)).toBe('10,230'); + expect(formatNumberToString(10.233, Enum.Norwegian, 3, 3)).toBe('10,233'); + expect(formatNumberToString(10.2376, Enum.Norwegian, 3, 3)).toBe( + '10,238', + ); + }); + + it('should always show 1 digit', () => { + expect(formatNumberToString(10, Enum.Norwegian, 1, 1)).toBe('10,0'); + expect(formatNumberToString(10.23, Enum.Norwegian, 1, 1)).toBe('10,2'); + expect(formatNumberToString(10.233, Enum.Norwegian, 1, 1)).toBe('10,2'); + }); + + it('should show max 1 digit', () => { + expect(formatNumberToString(10, Enum.Norwegian, 0, 1)).toBe('10'); + expect(formatNumberToString(10.2, Enum.Norwegian, 0, 1)).toBe('10,2'); + expect(formatNumberToString(10.233, Enum.Norwegian, 0, 1)).toBe('10,2'); + }); }); } From 215eff7cd52f1c01029ff8b1f7bed4027c6c79fb Mon Sep 17 00:00:00 2001 From: marius-at-atb <134292729+marius-at-atb@users.noreply.github.com> Date: Thu, 25 Sep 2025 13:00:09 +0200 Subject: [PATCH 3/3] fix: no need to export Languages --- src/__tests__/utils.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/__tests__/utils.test.ts b/src/__tests__/utils.test.ts index b2f57d1..bda467d 100644 --- a/src/__tests__/utils.test.ts +++ b/src/__tests__/utils.test.ts @@ -1,12 +1,12 @@ import {nullishToOptional, formatNumberToString} from '../utils'; -export enum AppLanguage { +enum AppLanguage { Norwegian = 'nb', English = 'en', Nynorsk = 'nn', } -export enum PlannerWebLanguage { +enum PlannerWebLanguage { Norwegian = 'no', English = 'en-US', Nynorsk = 'nn',