test: speed up cli and command suites

This commit is contained in:
Peter Steinberger
2026-03-31 02:12:23 +01:00
parent 6b6ddcd2a6
commit 3f1d6fe147
83 changed files with 1161 additions and 1054 deletions

View File

@@ -1,37 +1,53 @@
import { Command } from "commander";
import { afterEach, beforeAll, describe, expect, it, vi } from "vitest";
import { createCliRuntimeCapture } from "./test-runtime-capture.js";
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
import { registerDevicesCli } from "./devices-cli.js";
const { defaultRuntime: runtime, resetRuntimeCapture } = createCliRuntimeCapture();
runtime.exit.mockImplementation(() => {});
const callGateway = vi.fn();
const buildGatewayConnectionDetails = vi.fn(() => ({
url: "ws://127.0.0.1:18789",
urlSource: "local loopback",
message: "",
const mocks = vi.hoisted(() => ({
runtime: {
log: vi.fn(),
error: vi.fn(),
exit: vi.fn(),
writeJson: vi.fn(),
},
callGateway: vi.fn(),
buildGatewayConnectionDetails: vi.fn(() => ({
url: "ws://127.0.0.1:18789",
urlSource: "local loopback",
message: "",
})),
listDevicePairing: vi.fn(),
approveDevicePairing: vi.fn(),
summarizeDeviceTokens: vi.fn(),
withProgress: vi.fn(async (_opts: unknown, fn: () => Promise<unknown>) => await fn()),
}));
const listDevicePairing = vi.fn();
const approveDevicePairing = vi.fn();
const summarizeDeviceTokens = vi.fn();
const withProgress = vi.fn(async (_opts: unknown, fn: () => Promise<unknown>) => await fn());
vi.mock("../gateway/call.js", () => ({
const {
runtime,
callGateway,
buildGatewayConnectionDetails,
}));
vi.mock("./progress.js", () => ({
withProgress,
}));
vi.mock("../infra/device-pairing.js", () => ({
listDevicePairing,
approveDevicePairing,
summarizeDeviceTokens,
withProgress,
} = mocks;
vi.mock("../gateway/call.js", () => ({
callGateway: mocks.callGateway,
buildGatewayConnectionDetails: mocks.buildGatewayConnectionDetails,
}));
vi.mock("../runtime.js", async (importOriginal) => ({
...(await importOriginal<typeof import("../runtime.js")>()),
defaultRuntime: runtime,
vi.mock("./progress.js", () => ({
withProgress: mocks.withProgress,
}));
vi.mock("../infra/device-pairing.js", () => ({
listDevicePairing: mocks.listDevicePairing,
approveDevicePairing: mocks.approveDevicePairing,
summarizeDeviceTokens: mocks.summarizeDeviceTokens,
}));
vi.mock("../runtime.js", () => ({
defaultRuntime: mocks.runtime,
writeRuntimeJson: (
targetRuntime: { log: (...args: unknown[]) => void },
value: unknown,
@@ -39,12 +55,6 @@ vi.mock("../runtime.js", async (importOriginal) => ({
) => targetRuntime.log(JSON.stringify(value, null, space > 0 ? space : undefined)),
}));
let registerDevicesCli: typeof import("./devices-cli.js").registerDevicesCli;
beforeAll(async () => {
({ registerDevicesCli } = await import("./devices-cli.js"));
});
async function runDevicesApprove(argv: string[]) {
await runDevicesCommand(["approve", ...argv]);
}
@@ -321,9 +331,12 @@ describe("devices cli list", () => {
});
});
beforeEach(() => {
vi.clearAllMocks();
runtime.exit.mockImplementation(() => {});
});
afterEach(() => {
resetRuntimeCapture();
callGateway.mockClear();
buildGatewayConnectionDetails.mockClear();
buildGatewayConnectionDetails.mockReturnValue({
url: "ws://127.0.0.1:18789",