import * as React from "react"; import { describe, it, expect, vi, beforeEach } from "vitest"; import { AdminBrandingProvider } from "../../src/lib/admin-branding-context"; import { render } from "../utils/render.tsx"; // Mock router — provide a token so the page reaches the "register" step const mockUseSearch = vi.fn().mockReturnValue({ token: "valid-invite-token" }); vi.mock("@tanstack/react-router", async () => { const actual = await vi.importActual("@tanstack/react-router"); return { ...actual, useSearch: (...args: unknown[]) => mockUseSearch(...args), }; }); // Mock API const mockValidateInviteToken = vi.fn().mockResolvedValue({ email: "invitee@example.com", role: 30, roleName: "Author", }); vi.mock("../../src/lib/api", async () => { const actual = await vi.importActual("../../src/lib/api"); return { ...actual, validateInviteToken: (...args: unknown[]) => mockValidateInviteToken(...args), }; }); // Mock WebAuthn so PasskeyRegistration doesn't bail out Object.defineProperty(window, "PublicKeyCredential", { value: function PublicKeyCredential() {}, writable: true, }); // Import after mocks const { InviteAcceptPage } = await import("../../src/components/InviteAcceptPage"); describe("InviteAcceptPage", () => { beforeEach(() => { mockUseSearch.mockReturnValue({ token: "valid-invite-token" }); mockValidateInviteToken.mockClear(); mockValidateInviteToken.mockResolvedValue({ email: "invitee@example.com", role: 30, roleName: "Author", }); }); // Regression test for #639 / PR #705: the invite-accept page must reflect // the configured admin.logo/siteName (white-label branding), not the // stock hardcoded EmDash mark — same as LoginPage/SignupPage. it("renders the configured admin logo/site name instead of the stock mark", async () => { const screen = await render( , ); const logoImg = screen.getByRole("img", { name: "Acme CMS" }); await expect.element(logoImg).toBeInTheDocument(); expect(logoImg.element().getAttribute("src")).toBe("https://example.com/logo.png"); expect(screen.getByRole("img", { name: "EmDash" }).query()).toBeNull(); }); it("falls back to the stock EmDash mark when no admin branding is configured", async () => { const screen = await render(); await expect.element(screen.getByRole("img", { name: "EmDash" })).toBeInTheDocument(); }); });