docs(i18n): update master plan and add v2 phase 0/1 smoke tests
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
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.");
|
||||
Reference in New Issue
Block a user