/** * i18n PR1 — country dataset. * * Validates: * 1. The dataset includes every common ISO-3166-1 alpha-2 code we'd * reasonably want (sanity sample, not exhaustive) * 2. `isValidCountryCode` rejects bogus inputs * 3. `getCountryName` returns localized names; falls back to the code * 4. `detectDefaultCountry` returns the fallback in non-browser envs */ import { describe, it, expect } from 'vitest'; import { ALL_COUNTRY_CODES, ISO_COUNTRIES, isValidCountryCode, getCountryName, detectDefaultCountry, } from '@/lib/i18n/countries'; describe('i18n countries', () => { it('includes core anglophone, EU, MENA, APAC, and Americas codes', () => { const sample = ['US', 'GB', 'PL', 'DE', 'FR', 'AU', 'JP', 'BR', 'AE', 'NG', 'AI']; for (const code of sample) { expect(ISO_COUNTRIES.has(code)).toBe(true); } }); it('has at least 240 codes and is unique', () => { expect(ALL_COUNTRY_CODES.length).toBeGreaterThanOrEqual(240); expect(new Set(ALL_COUNTRY_CODES).size).toBe(ALL_COUNTRY_CODES.length); }); it('isValidCountryCode rejects unknown / lowercased / 3-letter codes', () => { expect(isValidCountryCode('US')).toBe(true); expect(isValidCountryCode('us')).toBe(false); expect(isValidCountryCode('USA')).toBe(false); expect(isValidCountryCode('XX')).toBe(false); expect(isValidCountryCode('')).toBe(false); }); it('getCountryName returns localized names and falls back to the code on error', () => { expect(getCountryName('US', 'en')).toMatch(/United States/); expect(getCountryName('GB', 'en')).toMatch(/United Kingdom/); expect(getCountryName('PL', 'pl')).toMatch(/Polska/i); // Unknown code -> code itself. expect(getCountryName('ZZ', 'en')).toBe('ZZ'); }); it('detectDefaultCountry returns the navigator region when valid', () => { const original = globalThis.navigator; Object.defineProperty(globalThis, 'navigator', { value: { language: 'en-GB' }, configurable: true, }); expect(detectDefaultCountry()).toBe('GB'); Object.defineProperty(globalThis, 'navigator', { value: original, configurable: true, }); }); it('detectDefaultCountry uses the fallback when navigator is unset', () => { const original = globalThis.navigator; // @ts-expect-error force navigator to undefined for the duration of this test delete globalThis.navigator; expect(detectDefaultCountry()).toBe('US'); expect(detectDefaultCountry('GB')).toBe('GB'); Object.defineProperty(globalThis, 'navigator', { value: original, configurable: true, }); }); it('detectDefaultCountry falls back when the navigator region is unknown', () => { const original = globalThis.navigator; Object.defineProperty(globalThis, 'navigator', { value: { language: 'xx-ZZ' }, configurable: true, }); expect(detectDefaultCountry()).toBe('US'); Object.defineProperty(globalThis, 'navigator', { value: original, configurable: true, }); }); });