diff --git a/src/cli/relay.e2e.test.ts b/src/cli/relay.e2e.test.ts new file mode 100644 index 000000000..5a47151cc --- /dev/null +++ b/src/cli/relay.e2e.test.ts @@ -0,0 +1,44 @@ +import { describe, expect, it, vi, beforeEach } from "vitest"; + +// Mocks must be defined via vi.hoisted to avoid TDZ with ESM hoisting. +const { monitorWebProvider, pickProvider, logWebSelfId, monitorTwilio } = + vi.hoisted(() => { + return { + monitorWebProvider: vi.fn().mockResolvedValue(undefined), + pickProvider: vi.fn().mockResolvedValue("web"), + logWebSelfId: vi.fn(), + monitorTwilio: vi.fn().mockResolvedValue(undefined), + }; + }); + +vi.mock("../provider-web.js", () => ({ + monitorWebProvider, + pickProvider, + logWebSelfId, +})); + +vi.mock("../twilio/monitor.js", () => ({ + monitorTwilio, +})); + +import { buildProgram } from "./program.js"; + +describe("CLI relay command (e2e-ish)", () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + + it("runs relay in web mode without crashing", async () => { + const program = buildProgram(); + program.exitOverride(); // throw instead of exiting process on error + + await expect( + program.parseAsync(["relay", "--provider", "web"], { from: "user" }), + ).resolves.toBeInstanceOf(Object); + + expect(pickProvider).toHaveBeenCalledWith("web"); + expect(logWebSelfId).toHaveBeenCalledTimes(1); + expect(monitorWebProvider).toHaveBeenCalledWith(false); + expect(monitorTwilio).not.toHaveBeenCalled(); + }); +}); diff --git a/src/provider-web.test.ts b/src/provider-web.test.ts index afb1c0d16..4bd90f922 100644 --- a/src/provider-web.test.ts +++ b/src/provider-web.test.ts @@ -184,10 +184,10 @@ describe("provider-web", () => { exit: vi.fn(), }; - logWebSelfId(runtime as never); + logWebSelfId(runtime as never, true); expect(runtime.log).toHaveBeenCalledWith( - expect.stringContaining("+12345"), + "Web Provider: +12345 (jid 12345@s.whatsapp.net)", ); existsSpy.mockRestore(); readSpy.mockRestore(); diff --git a/src/provider-web.ts b/src/provider-web.ts index 469eadd32..88d6c34bc 100644 --- a/src/provider-web.ts +++ b/src/provider-web.ts @@ -375,9 +375,9 @@ export function logWebSelfId( ? `${e164 ?? "unknown"}${jid ? ` (jid ${jid})` : ""}` : "unknown"; const prefix = includeProviderPrefix - ? "Provider: web (personal WhatsApp Web session) — " + ? "Web Provider: " : ""; - runtime.log(info(`${prefix}Listening on web session: ${details}`)); + runtime.log(info(`${prefix}${details}`)); } export async function pickProvider(pref: Provider | "auto"): Promise {