Files
template-app/modules/account/__tests__/i18n.test.ts
T

59 lines
2.3 KiB
TypeScript

// Every string the account page shows is a message in English and in Lithuanian, the label builders
// ask for no key either language lacks, and no message is left that nothing asks for.
import { buildRegistry } from "@conusai-kit/core"
import { describe, expect, it } from "vitest"
import { appModules } from "../../index.js"
import { analyticsLabels, deletionLabels, exportLabels, pageLabels } from "../ui/labels.js"
const catalogues = buildRegistry([...appModules]).catalogues
const en = catalogues.en?.account ?? {}
const lt = catalogues.lt?.account ?? {}
/** The keys the builders ask for, recorded by running them with a lookup that notes each one. */
function keysUsed(): string[] {
const asked: string[] = []
const t = (key: string) => {
asked.push(key)
return key
}
pageLabels(t)
exportLabels(t, "failed")
analyticsLabels(t, "failed")
deletionLabels(
t,
"failed",
{ modules: ["guides"], lastOwnerOf: [{ slug: "a", name: "A" }], onlyMemberOf: [{ slug: "b", name: "B" }] },
"ada@example.test",
)
return asked
}
describe("the account catalogues", () => {
it("hold the same keys in English and in Lithuanian, none of them empty", () => {
expect(Object.keys(lt).sort()).toEqual(Object.keys(en).sort())
for (const [key, text] of [...Object.entries(en), ...Object.entries(lt)]) expect(text.trim(), key).not.toBe("")
})
it("hold every message the labels ask for, and none that nothing asks for", () => {
const asked = new Set(keysUsed())
for (const key of asked) {
expect(en[key as keyof typeof en], `en is missing account.${key}`).toBeTruthy()
expect(lt[key as keyof typeof lt], `lt is missing account.${key}`).toBeTruthy()
}
expect(Object.keys(en).filter((key) => !asked.has(key))).toEqual([])
})
it("keep the placeholders the components fill in themselves", () => {
const t = (key: string, values?: Record<string, string | number>) => {
let text = String(en[key as keyof typeof en])
for (const [name, value] of Object.entries(values ?? {})) text = text.replace(`{${name}}`, String(value))
return text
}
expect(exportLabels(t, "x").partial).toContain("{sections}")
expect(deletionLabels(t, "x", { modules: [], lastOwnerOf: [], onlyMemberOf: [] }, "a@b.test").erasing).toContain(
"{modules}",
)
})
})