Tracer bullet for gitea-axi: runnable npm package on axi-sdk-js with gitea-js as the sole HTTP layer, ESM on Node 20+. - issue list with --state/--limit, default fields, count line from X-Total-Count, type=issues guard, explicit empty state, and next-step suggestions - repo context detection from the git origin remote (SSH/scp/HTTPS), tea credential discovery with the three-way login-matching split, and -R/--repo and --login overrides (flag > env > auto) - token retrieval via tea login helper get: tea's login list JSON carries no token (ADR 0001 amended) - full AxiError classification table with path-based 404 split, TOON errors on stdout, exit codes 0/1/2 - test mode (GITEA_AXI_API_URL/TOKEN/REPO) suppressing subprocesses, fixture server, and vitest suites driving the CLI seam (50 tests)
43 lines
952 B
TypeScript
43 lines
952 B
TypeScript
import { runCli } from "../src/cli.js";
|
|
|
|
export interface CliResult {
|
|
stdout: string;
|
|
exitCode: number;
|
|
}
|
|
|
|
export interface CliTestOptions {
|
|
env?: Record<string, string | undefined>;
|
|
cwd?: string;
|
|
}
|
|
|
|
/**
|
|
* Drive the CLI seam: argv in, stdout and exit code out. The environment is
|
|
* fully explicit — nothing leaks in from the test process's own env.
|
|
*/
|
|
export async function runCliTest(
|
|
argv: string[],
|
|
options: CliTestOptions = {},
|
|
): Promise<CliResult> {
|
|
let stdout = "";
|
|
const exitCode = await runCli({
|
|
argv,
|
|
env: options.env ?? {},
|
|
cwd: options.cwd ?? process.cwd(),
|
|
stdout: {
|
|
write: (chunk: string) => {
|
|
stdout += chunk;
|
|
},
|
|
},
|
|
});
|
|
process.exitCode = 0;
|
|
return { stdout, exitCode };
|
|
}
|
|
|
|
export function testModeEnv(apiUrl: string): Record<string, string> {
|
|
return {
|
|
GITEA_AXI_API_URL: apiUrl,
|
|
GITEA_AXI_TOKEN: "test-token",
|
|
GITEA_AXI_REPO: "testowner/testrepo",
|
|
};
|
|
}
|