File size: 2,137 Bytes
e18726e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | import { Command } from "commander";
import { afterEach, describe, expect, it, vi } from "vitest";
import type { callGatewayFromCli } from "../cli/gateway-rpc.js";
import { registerMeetingPluginCli } from "./plugin-cli.js";
import type { MeetingPluginConfig } from "./plugin-config.js";
function createCli(callGateway: typeof callGatewayFromCli) {
const program = new Command();
registerMeetingPluginCli({
callGateway,
commandName: "testmeetings",
config: {} as MeetingPluginConfig,
descriptions: {
root: "test meetings",
join: "join",
leave: "leave",
status: "status",
setup: "setup",
testSpeech: "test speech",
testListen: "test listen",
},
methodPrefix: "testmeetings",
program,
resolveGatewayTimeoutMs: () => 1_000,
});
return program;
}
describe("meeting plugin CLI options", () => {
afterEach(() => {
process.exitCode = undefined;
vi.restoreAllMocks();
});
it("rejects misspelled setup modes and transports before gateway dispatch", async () => {
const callGateway = vi.fn();
const cli = createCli(callGateway as unknown as typeof callGatewayFromCli);
await expect(
cli.parseAsync(["testmeetings", "setup", "--mode", "agnt"], { from: "user" }),
).rejects.toThrow("mode must be agent, bidi, or transcribe; received agnt");
await expect(
cli.parseAsync(["testmeetings", "setup", "--transport", "definitely-not-a-transport"], {
from: "user",
}),
).rejects.toThrow(
"transport must be chrome or chrome-node; received definitely-not-a-transport",
);
expect(callGateway).not.toHaveBeenCalled();
});
it("sets a failing process exit code for unhealthy setup status", async () => {
vi.spyOn(process.stdout, "write").mockImplementation(() => true);
const callGateway = vi.fn(async () => ({ ok: false, checks: [] }));
await createCli(callGateway as unknown as typeof callGatewayFromCli).parseAsync(
["testmeetings", "setup"],
{ from: "user" },
);
expect(callGateway).toHaveBeenCalledOnce();
expect(process.exitCode).toBe(1);
});
});
|