59 lines
2.3 KiB
TypeScript
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}",
|
|
)
|
|
})
|
|
})
|