// SPDX-License-Identifier: LicenseRef-ConusAI-Template-1.0 // A role has one name. The invitation page says the role a link joins with by the name Settings > Members gives the // same role (kit-tenancy's roleName over the built-in roles: a member is an editor), in English and in Lithuanian, from // the app's own catalogues. import { createI18n } from "@conusai-kit/i18n" import { roleName } from "@conusai-kit/tenancy/ui" import { describe, expect, it, vi } from "vitest" const mocks = vi.hoisted(() => ({ pageContext: vi.fn(), call: vi.fn() })) vi.mock("@tanstack/react-start/server", () => ({ getRequest: () => new Request("http://app.test/"), setResponseStatus: vi.fn(), setResponseHeader: vi.fn(), })) vi.mock("../apps/web/src/server/page", () => ({ pageContext: mocks.pageContext })) vi.mock("@conusai-kit/auth", async (importOriginal) => ({ ...(await importOriginal>()), loadAuthConfig: () => ({ provider: "oidc", devLogin: true }), })) vi.mock("../apps/web/src/server/better-auth", () => ({ MIN_PASSWORD_LENGTH: 12, betterAuthFormLabels: () => ({ submit: "Go" }), })) vi.mock("@app/modules/account/ui", () => ({ analyticsLabels: () => ({}), deletionLabels: () => ({}), exportLabels: () => ({}), pageLabels: () => ({ title: "Account" }), })) vi.mock("@conusai-kit/tenancy", async (importOriginal) => ({ ...(await importOriginal>()), invitationRead: "invitation.read", })) const { appCatalogues } = await import("../apps/web/src/ui/messages") const { invitationData } = await import("../apps/web/src/server/account-pages") describe("the invitation page", () => { it.each(["en", "lt"] as const)("names the role as the members table does, in %s", async (locale) => { const i18n = createI18n(locale, appCatalogues) mocks.pageContext.mockResolvedValue({ i18n, caller: { call: mocks.call }, path: "/here", signedIn: false }) for (const [role, roleKey] of [ ["viewer", "viewer"], ["member", "editor"], ["admin", "admin"], ["owner", "owner"], ] as const) { mocks.call.mockResolvedValue({ invitationId: "inv-1", state: "open", email: "guest@example.test", organization: { slug: "acme", name: "Acme" }, role, roleKey, expiresAt: "2026-11-10T09:00:00.000Z", }) const inTable = roleName(i18n, { key: roleKey, name: roleKey, builtIn: true }) expect(inTable, `${locale} ${roleKey} has a translated name`).not.toBe(roleKey) const { lead } = await invitationData({ org: "acme", token: "token" }) expect(lead).toBe(i18n.message("invite.lead", { email: "guest@example.test", org: "Acme", role: inTable })) } }) })