feat: add language settings management
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
import assert from "node:assert/strict";
|
||||
import { getSqliteConnection } from "../server/db/client";
|
||||
import type { DomainActor } from "../server/domain/actor";
|
||||
import { DomainError } from "../server/domain/errors";
|
||||
import { I18nService } from "../server/i18n/service";
|
||||
|
||||
const owner: DomainActor = {
|
||||
authUserId: "phase3-owner",
|
||||
role: "freelancer",
|
||||
clientId: null,
|
||||
disabled: false,
|
||||
};
|
||||
const client: DomainActor = {
|
||||
authUserId: "phase3-client-user",
|
||||
role: "client",
|
||||
clientId: "phase3-client",
|
||||
disabled: false,
|
||||
};
|
||||
|
||||
const service = new I18nService(getSqliteConnection().db);
|
||||
service.listLocales(owner);
|
||||
|
||||
assertDomainError(() => service.listLocales(client), "FORBIDDEN");
|
||||
|
||||
const fr = service.createLocale(owner, {
|
||||
code: "fr",
|
||||
name: "French",
|
||||
nativeName: "Français",
|
||||
fallbackLocale: "en",
|
||||
});
|
||||
assert.equal(fr.status, "draft");
|
||||
|
||||
const beforeCompletion = service.getCompletion(owner).find((item) => item.locale === "fr");
|
||||
assert.ok(beforeCompletion);
|
||||
assert.ok(beforeCompletion.missingKeys.includes("navigation.items.projects"));
|
||||
|
||||
service.upsertUiTranslation(owner, {
|
||||
locale: "fr",
|
||||
namespace: "navigation",
|
||||
key: "items.projects",
|
||||
value: "Projets",
|
||||
});
|
||||
|
||||
const exported = service.exportPackage(owner);
|
||||
assert.equal(exported.format, "neta-i18n");
|
||||
assert.equal(exported.translations.some((row) => row.locale === "fr" && row.value === "Projets"), true);
|
||||
|
||||
service.resetUiTranslation(owner, {
|
||||
locale: "fr",
|
||||
namespace: "navigation",
|
||||
key: "items.projects",
|
||||
});
|
||||
assert.equal(
|
||||
service.listUiTranslations(owner).some((row) => row.locale === "fr" && row.value === "Projets"),
|
||||
false,
|
||||
);
|
||||
|
||||
service.importPackage(owner, exported);
|
||||
assert.equal(
|
||||
service.listUiTranslations(owner).some((row) => row.locale === "fr" && row.value === "Projets"),
|
||||
true,
|
||||
);
|
||||
|
||||
service.updateLocale(owner, "fr", { status: "active" });
|
||||
assert.equal(service.setDefaultLocale(owner, "fr").defaultLocale, "fr");
|
||||
assertDomainError(() => service.archiveLocale(owner, "fr"), "CONFLICT");
|
||||
|
||||
console.log("I18n phase 3 settings smoke passed.");
|
||||
|
||||
function assertDomainError(run: () => unknown, code: DomainError["code"]): void {
|
||||
assert.throws(run, (error) => error instanceof DomainError && error.code === code);
|
||||
}
|
||||
Reference in New Issue
Block a user