Files
Clintchiz 586a6db8ff
Quality / quality (ubuntu-latest) (push) Failing after 21s
Quality / quality (windows-latest) (push) Canceled after 0s
release: WRNexusJS 0.8.0
2026-08-02 23:18:51 +05:30

42 lines
1.6 KiB
TypeScript

import { expect, test } from "bun:test";
import { mkdirSync, mkdtempSync, writeFileSync } from "node:fs";
import { tmpdir } from "node:os";
import { join } from "node:path";
import {
createLocaleFormatter,
formatMessage,
loadRouteMessages,
resolveI18n,
withTenantMessages,
} from "../src/index.ts";
test("formats ICU plural, exact and gender-aware select messages", () => {
expect(
formatMessage("{count, plural, =0 {None} one {# item} other {# items}}", { count: 2 }, "en"),
).toBe("2 items");
expect(
formatMessage(
"{gender, select, female {She} male {He} other {They}} approved",
{ gender: "female" },
"en",
),
).toBe("She approved");
});
test("supports calendars, tenant overrides and route-scoped loading", () => {
const formatter = createLocaleFormatter("en-US", "UTC", "indian");
expect(
formatter.date(new Date("2026-08-02T00:00:00Z"), { year: "numeric", calendar: "indian" }),
).toBeTruthy();
const base = resolveI18n({ en: { title: "Default" } }, { default: "en" });
expect(withTenantMessages(base, { en: { title: "Tenant" } }).messages.en?.title).toBe("Tenant");
expect(base.messages.en?.title).toBe("Default");
const root = mkdtempSync(join(tmpdir(), "wrnexus-i18n-route-"));
mkdirSync(join(root, "en/routes/users"), { recursive: true });
writeFileSync(join(root, "en/common.json"), JSON.stringify({ common: "Common" }));
writeFileSync(join(root, "en/routes/users/index.json"), JSON.stringify({ title: "Users" }));
expect(loadRouteMessages(root, "en", "/users/index")).toEqual({
common: "Common",
title: "Users",
});
});