import { afterEach, describe, expect, it, vi } from 'vitest' import { initializeLocale, locale, setLocale, t, formatNumber } from './index' afterEach(() => { vi.restoreAllMocks() localStorage.clear() initializeLocale() }) describe('Resolve the language before rendering', () => { it('keeps English default with a French browser', () => { vi.spyOn(navigator, 'language', 'get').mockReturnValue('fr-FR') localStorage.clear() initializeLocale() expect([locale.value, document.documentElement.lang]).toEqual(['en', 'en']) }) it.each([null, 'en', 'fr', 'unsupported'])( 'resolves stored %s independently of browser language', (stored) => { if (stored) localStorage.setItem('renewcms-language', stored) initializeLocale() expect([locale.value, document.documentElement.lang]).toEqual( stored === 'fr' ? ['fr', 'fr'] : ['en', 'en'], ) }, ) it('defaults to English when preference storage is unreadable', () => { setLocale('fr') vi.spyOn(Storage.prototype, 'getItem').mockImplementation(() => { throw new Error('denied') }) initializeLocale() expect([locale.value, document.documentElement.lang]).toEqual(['en', 'en']) }) }) describe('Remember language on this browser', () => { it('restores the selected French language on initialization', () => { setLocale('fr') initializeLocale() expect(locale.value).toBe('fr') }) it('switches when storage cannot be written', () => { vi.spyOn(Storage.prototype, 'setItem').mockImplementation(() => { throw new Error('denied') }) setLocale('fr') expect([t('Log in'), document.documentElement.lang]).toEqual(['Se connecter', 'fr']) }) it('formats numbers according to the selected locale', () => { setLocale('fr') expect(formatNumber(1234.5)).toBe(new Intl.NumberFormat('fr').format(1234.5)) }) })