Files
diegosouzapw--omniroute/tests/unit/audit-eventtype-i18n.test.ts
2026-07-13 13:39:12 +08:00

38 lines
2.1 KiB
TypeScript

import test from "node:test";
import assert from "node:assert/strict";
import { readFileSync } from "node:fs";
import { join } from "node:path";
import { normalizeComplianceEventTypes } from "../../src/i18n/request";
const root = join(import.meta.dirname, "../..");
const read = (p: string) => readFileSync(join(root, p), "utf8");
const rawEn = JSON.parse(read("src/i18n/messages/en.json"));
const rawPt = JSON.parse(read("src/i18n/messages/pt-BR.json"));
const en = normalizeComplianceEventTypes(rawEn);
const pt = normalizeComplianceEventTypes(rawPt);
function getNestedValue(record: Record<string, unknown>, dottedKey: string): unknown {
return dottedKey.split(".").reduce<unknown>((cursor, segment) => {
if (!cursor || typeof cursor !== "object" || Array.isArray(cursor)) return undefined;
return (cursor as Record<string, unknown>)[segment];
}, record);
}
test("audit: compliance.eventTypes exists with en/pt-BR parity and key coverage", () => {
const rawEnKeys = Object.keys(rawEn.compliance?.eventTypes ?? {});
const rawPtKeys = Object.keys(rawPt.compliance?.eventTypes ?? {});
assert.ok(rawEnKeys.length >= 30, `expected >=30 event-type labels, got ${rawEnKeys.length}`);
assert.deepEqual(rawEnKeys.sort(), rawPtKeys.sort(), "en/pt-BR eventTypes keys must match");
for (const k of ["provider.credentials.created", "auth.login.success", "quota.pool.created", "sync.token.revoked"]) {
assert.ok(getNestedValue(en.compliance.eventTypes as Record<string, unknown>, k), `en missing eventTypes.${k}`);
assert.ok(getNestedValue(pt.compliance.eventTypes as Record<string, unknown>, k), `pt-BR missing eventTypes.${k}`);
}
});
test("audit: ComplianceTab translates action and A2aAuditTab translates task state", () => {
const ct = read("src/app/(dashboard)/dashboard/audit/ComplianceTab.tsx");
const a2a = read("src/app/(dashboard)/dashboard/audit/A2aAuditTab.tsx");
assert.ok(ct.includes("eventTypes.${entry.action}"), "ComplianceTab uses eventTypes i18n lookup");
assert.ok(a2a.includes("a2aState${task.state"), "A2aAuditTab uses a2aState i18n lookup");
});