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

@@ -3,48 +3,83 @@ import os from "node:os";
import path from "node:path";
import { Command } from "commander";
import { beforeEach, describe, expect, it, vi } from "vitest";
import { createCliRuntimeCapture } from "./test-runtime-capture.js";
import { registerSecretsCli } from "./secrets-cli.js";
const callGatewayFromCli = vi.fn();
const runSecretsAudit = vi.fn();
const resolveSecretsAuditExitCode = vi.fn();
const runSecretsConfigureInteractive = vi.fn();
const runSecretsApply = vi.fn();
const confirm = vi.fn();
const mocks = vi.hoisted(() => {
const runtimeLogs: string[] = [];
const runtimeErrors: string[] = [];
const stringifyArgs = (args: unknown[]) => args.map((value) => String(value)).join(" ");
const defaultRuntime = {
log: vi.fn((...args: unknown[]) => {
runtimeLogs.push(stringifyArgs(args));
}),
error: vi.fn((...args: unknown[]) => {
runtimeErrors.push(stringifyArgs(args));
}),
writeStdout: vi.fn((value: string) => {
defaultRuntime.log(value.endsWith("\n") ? value.slice(0, -1) : value);
}),
writeJson: vi.fn((value: unknown, space = 2) => {
defaultRuntime.log(JSON.stringify(value, null, space > 0 ? space : undefined));
}),
exit: vi.fn((code: number) => {
throw new Error(`__exit__:${code}`);
}),
};
return {
callGatewayFromCli: vi.fn(),
runSecretsAudit: vi.fn(),
resolveSecretsAuditExitCode: vi.fn(),
runSecretsConfigureInteractive: vi.fn(),
runSecretsApply: vi.fn(),
confirm: vi.fn(),
defaultRuntime,
runtimeLogs,
runtimeErrors,
};
});
const { defaultRuntime, runtimeLogs, runtimeErrors, resetRuntimeCapture } =
createCliRuntimeCapture();
const {
callGatewayFromCli,
runSecretsAudit,
resolveSecretsAuditExitCode,
runSecretsConfigureInteractive,
runSecretsApply,
confirm,
defaultRuntime,
runtimeLogs,
runtimeErrors,
} = mocks;
vi.mock("./gateway-rpc.js", () => ({
addGatewayClientOptions: (cmd: Command) => cmd,
callGatewayFromCli: (method: string, opts: unknown, params?: unknown, extra?: unknown) =>
callGatewayFromCli(method, opts, params, extra),
mocks.callGatewayFromCli(method, opts, params, extra),
}));
vi.mock("../runtime.js", () => ({
defaultRuntime,
defaultRuntime: mocks.defaultRuntime,
}));
vi.mock("../secrets/audit.js", () => ({
runSecretsAudit: (options: unknown) => runSecretsAudit(options),
runSecretsAudit: (options: unknown) => mocks.runSecretsAudit(options),
resolveSecretsAuditExitCode: (report: unknown, check: boolean) =>
resolveSecretsAuditExitCode(report, check),
mocks.resolveSecretsAuditExitCode(report, check),
}));
vi.mock("../secrets/configure.js", () => ({
runSecretsConfigureInteractive: (options: unknown) => runSecretsConfigureInteractive(options),
runSecretsConfigureInteractive: (options: unknown) =>
mocks.runSecretsConfigureInteractive(options),
}));
vi.mock("../secrets/apply.js", () => ({
runSecretsApply: (options: unknown) => runSecretsApply(options),
runSecretsApply: (options: unknown) => mocks.runSecretsApply(options),
}));
vi.mock("@clack/prompts", () => ({
confirm: (options: unknown) => confirm(options),
confirm: (options: unknown) => mocks.confirm(options),
}));
const { registerSecretsCli } = await import("./secrets-cli.js");
function createManualSecretsPlan() {
return {
version: 1,
@@ -126,13 +161,19 @@ describe("secrets CLI", () => {
};
beforeEach(() => {
resetRuntimeCapture();
runtimeLogs.length = 0;
runtimeErrors.length = 0;
callGatewayFromCli.mockReset();
runSecretsAudit.mockReset();
resolveSecretsAuditExitCode.mockReset();
runSecretsConfigureInteractive.mockReset();
runSecretsApply.mockReset();
confirm.mockReset();
defaultRuntime.log.mockClear();
defaultRuntime.error.mockClear();
defaultRuntime.writeStdout.mockClear();
defaultRuntime.writeJson.mockClear();
defaultRuntime.exit.mockClear();
});
it("calls secrets.reload and prints human output", async () => {