import { describe, expect, it } from "vitest"; import type { Request } from "express"; import { buildInviteOnboardingTextDocument } from "../routes/access.js"; function buildReq(host: string): Request { return { protocol: "http", header(name: string) { if (name.toLowerCase() === "host") return host; return undefined; }, } as unknown as Request; } describe("buildInviteOnboardingTextDocument", () => { it("renders a plain-text onboarding doc with expected endpoint references", () => { const req = buildReq("localhost:3100"); const invite = { id: "invite-1", companyId: "company-1", inviteType: "company_join", allowedJoinTypes: "agent", tokenHash: "hash", defaultsPayload: null, expiresAt: new Date("2026-03-05T00:00:00.000Z"), invitedByUserId: null, revokedAt: null, acceptedAt: null, createdAt: new Date("2026-03-04T00:00:00.000Z"), updatedAt: new Date("2026-03-04T00:00:00.000Z"), } as const; const text = buildInviteOnboardingTextDocument(req, "token-123", invite as any, { deploymentMode: "local_trusted", deploymentExposure: "private", bindHost: "127.0.0.1", allowedHostnames: [], }); expect(text).toContain("Paperclip OpenClaw Onboarding"); expect(text).toContain("/api/invites/token-123/accept"); expect(text).toContain("/api/join-requests/{requestId}/claim-api-key"); expect(text).toContain("/api/invites/token-123/onboarding.txt"); }); it("includes loopback diagnostics for authenticated/private onboarding", () => { const req = buildReq("localhost:3100"); const invite = { id: "invite-2", companyId: "company-1", inviteType: "company_join", allowedJoinTypes: "both", tokenHash: "hash", defaultsPayload: null, expiresAt: new Date("2026-03-05T00:00:00.000Z"), invitedByUserId: null, revokedAt: null, acceptedAt: null, createdAt: new Date("2026-03-04T00:00:00.000Z"), updatedAt: new Date("2026-03-04T00:00:00.000Z"), } as const; const text = buildInviteOnboardingTextDocument(req, "token-456", invite as any, { deploymentMode: "authenticated", deploymentExposure: "private", bindHost: "127.0.0.1", allowedHostnames: [], }); expect(text).toContain("Connectivity diagnostics"); expect(text).toContain("loopback hostname"); }); });