81 lines
2.4 KiB
TypeScript
81 lines
2.4 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import { resolveLocalePolicy } from "../lib/i18n/locale-resolution";
|
|
|
|
const locales = [
|
|
{ code: "tr", status: "active", textDirection: "ltr" },
|
|
{ code: "en", status: "active", textDirection: "ltr" },
|
|
{ code: "fr", status: "active", textDirection: "ltr" },
|
|
{ code: "de", status: "archived", textDirection: "ltr" },
|
|
{ code: "ar", status: "active", textDirection: "rtl" },
|
|
] as const;
|
|
|
|
const publicLocale = resolveLocalePolicy({
|
|
activeLocales: locales,
|
|
defaultLocale: "en",
|
|
candidates: [],
|
|
});
|
|
assert.equal(publicLocale.locale, "en");
|
|
assert.equal(publicLocale.source, "instance");
|
|
|
|
const freelancerLocale = resolveLocalePolicy({
|
|
activeLocales: locales,
|
|
defaultLocale: "tr",
|
|
candidates: [{ locale: "en", source: "user" }],
|
|
});
|
|
assert.equal(freelancerLocale.locale, "en");
|
|
assert.equal(freelancerLocale.source, "user");
|
|
|
|
const portalPreference = resolveLocalePolicy({
|
|
activeLocales: locales,
|
|
defaultLocale: "tr",
|
|
candidates: [
|
|
{ locale: "en", source: "user" },
|
|
{ locale: "fr", source: "client" },
|
|
],
|
|
});
|
|
assert.equal(portalPreference.locale, "en", "Personal preference must win over the client default");
|
|
|
|
const portalDefault = resolveLocalePolicy({
|
|
activeLocales: locales,
|
|
defaultLocale: "tr",
|
|
candidates: [
|
|
{ locale: null, source: "user" },
|
|
{ locale: "fr", source: "client" },
|
|
],
|
|
});
|
|
assert.equal(portalDefault.locale, "fr");
|
|
assert.equal(portalDefault.source, "client");
|
|
|
|
const invitationLocale = resolveLocalePolicy({
|
|
activeLocales: locales,
|
|
defaultLocale: "tr",
|
|
candidates: [{ locale: "fr", source: "invitation" }],
|
|
});
|
|
assert.equal(invitationLocale.locale, "fr");
|
|
assert.equal(invitationLocale.source, "invitation");
|
|
|
|
const archivedPreference = resolveLocalePolicy({
|
|
activeLocales: locales,
|
|
defaultLocale: "tr",
|
|
candidates: [{ locale: "de", source: "user" }],
|
|
});
|
|
assert.equal(archivedPreference.locale, "tr");
|
|
assert.equal(archivedPreference.source, "instance");
|
|
|
|
const invalidDefault = resolveLocalePolicy({
|
|
activeLocales: locales,
|
|
defaultLocale: "de",
|
|
candidates: [],
|
|
});
|
|
assert.equal(invalidDefault.locale, "tr");
|
|
assert.equal(invalidDefault.source, "fallback");
|
|
|
|
const rtlLocale = resolveLocalePolicy({
|
|
activeLocales: locales,
|
|
defaultLocale: "tr",
|
|
candidates: [{ locale: "ar", source: "user" }],
|
|
});
|
|
assert.equal(rtlLocale.direction, "rtl");
|
|
|
|
console.log("I18n V2 phase 1 locale policy smoke passed.");
|