import { describe, expect, it } from "vitest" import { dictionaries, getDictionary } from "@/i18n/dictionaries" import { SUPPORTED_LOCALES } from "@/i18n/locales" describe("i18n dictionaries", () => { it("provides dictionaries for every supported locale and no extra locales", () => { expect(Object.keys(dictionaries).sort()).toEqual( [...SUPPORTED_LOCALES].sort(), ) }) it("returns localized login copy for English and Spanish", () => { expect(getDictionary("en").login).toEqual({ title: "Sign In", usernameLabel: "Username", passwordLabel: "Password", submitLabel: "Sign In", }) expect(getDictionary("es").login).toEqual({ title: "Iniciar sesión", usernameLabel: "Usuario", passwordLabel: "Contraseña", submitLabel: "Iniciar sesión", }) }) it("keeps dashboard home dictionary keys aligned across locales", () => { expect(getDictionary("en").dashboardHome).toEqual({ heading: "Dashboard", cards: { items: { title: "Total Items", countLabel: "Total", }, assets: { title: "Total Assets", countLabel: "Total", }, recipients: { title: "Total Recipients", countLabel: "Total", }, }, }) expect(getDictionary("es").dashboardHome).toEqual({ heading: "Panel de control", cards: { items: { title: "Total de artículos", countLabel: "Total", }, assets: { title: "Total de activos", countLabel: "Total", }, recipients: { title: "Total de destinatarios", countLabel: "Total", }, }, }) }) it("has exact structural parity between English and Spanish dictionaries", () => { expect(extractKeyPaths(getDictionary("es"))).toEqual( extractKeyPaths(getDictionary("en")), ) }) }) function extractKeyPaths(value: unknown, prefix = ""): string[] { if (!isPlainObject(value)) return [prefix] return Object.keys(value) .sort() .flatMap((key) => extractKeyPaths(value[key], prefix ? `${prefix}.${key}` : key), ) } function isPlainObject(value: unknown): value is Record { return typeof value === "object" && value !== null && !Array.isArray(value) }