45 lines
1.2 KiB
TypeScript
45 lines
1.2 KiB
TypeScript
import { beforeEach, describe, expect, it, vi } 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();
|
|
});
|
|
});
|