import { LangUtils } from "../../src/utils/LangUtils"; describe("LangUtils", () => { const defaultLangNavigator = "en_US"; function deleteAllCookies() { document.cookie.split(';').forEach(cookie => { const eqPos = cookie.indexOf('='); const name = eqPos > -1 ? cookie.substring(0, eqPos) : cookie; document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:00 GMT'; }); } function mockNavigatorLanguage(language: string) { Object.defineProperty(navigator, "language", { value: language, configurable: true, }); } beforeEach(() => { deleteAllCookies(); document.documentElement.lang = ""; mockNavigatorLanguage(defaultLangNavigator); }); describe("convertLanguage", () => { it("should convert 'en' to EN_US", () => { const result = (LangUtils as any).convertLanguage("en"); expect(result).toBe(LangUtils.ELanguages.EN_US); }); it("should convert 'es' to ES_ES", () => { const result = (LangUtils as any).convertLanguage("es"); expect(result).toBe(LangUtils.ELanguages.ES_ES); }); it("should default to PT_BR for unknown languages", () => { const result = (LangUtils as any).convertLanguage("fr"); expect(result).toBe(LangUtils.ELanguages.PT_BR); }); }); describe("getLanguage", () => { it("should return language from cookie if available", () => { document.cookie = "lang=en_US"; const result = LangUtils.getLanguage(); expect(result).toBe(LangUtils.ELanguages.EN_US); }); it("should return HTML language if no cookie is set", () => { document.documentElement.lang = "es"; const result = LangUtils.getLanguage(); expect(result).toBe(LangUtils.ELanguages.ES_ES); }); it("should default to settings navigator if no cookie or HTML language is set", () => { const result = LangUtils.getLanguage(); expect(result).toBe(defaultLangNavigator); }); it("should default to PT_BR if no cookie or HTML language or config navigator is set", () => { mockNavigatorLanguage(''); const result = LangUtils.getLanguage(); expect(result).toBe(LangUtils.ELanguages.PT_BR); }); }); describe("getHtmlLanguage", () => { it("should return PT_BR in development mode", () => { process.env.NODE_ENV = "development"; const result = LangUtils.getHtmlLanguage(); expect(result).toBe(LangUtils.ELanguages.PT_BR); }); it("should return converted HTML language in production mode", () => { process.env.NODE_ENV = "production"; document.documentElement.lang = "en"; const result = LangUtils.getHtmlLanguage(); expect(result).toBe(LangUtils.ELanguages.EN_US); }); }); describe("setHtmlLanguage", () => { it("should set the HTML lang attribute and update the cookie", () => { LangUtils.setHtmlLanguage(LangUtils.ELanguages.ES_ES); expect(document.documentElement.lang).toBe(LangUtils.ELanguages.ES_ES); expect(document.cookie).toContain("lang=es_ES"); }); }); describe("getLanguageFromCookie", () => { it("should return the language from the cookie if it exists", () => { document.cookie = "lang=en_US"; const result = LangUtils.getLanguageFromCookie(); expect(result).toBe("en_US"); }); it("should return null if the cookie does not exist", () => { const result = LangUtils.getLanguageFromCookie(); expect(result).toBeNull(); }); }); describe("applyLanguageFromCookie", () => { it("should set the HTML lang attribute based on the cookie", () => { document.cookie = "lang=es_ES"; LangUtils.applyLanguageFromCookie(); expect(document.documentElement.lang).toBe(LangUtils.ELanguages.ES_ES); }); it("should do nothing if the cookie does not exist", () => { LangUtils.applyLanguageFromCookie(); expect(document.documentElement.lang).toBe(""); }); }); });