refactor(cli): remove interactive prompts for empty states and add clean repo test
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
import { mkdtempSync } from "node:fs";
|
||||
import { join } from "node:path";
|
||||
import { tmpdir } from "node:os";
|
||||
import { test, expect, describe } from "bun:test";
|
||||
|
||||
async function run(command: string[], cwd: string, env: Record<string, string> = {}) {
|
||||
const proc = Bun.spawn(command, {
|
||||
cwd,
|
||||
stdout: "pipe",
|
||||
stderr: "pipe",
|
||||
env: {
|
||||
PATH: process.env.PATH ?? "",
|
||||
HOME: env.HOME ?? process.env.HOME ?? "",
|
||||
...env,
|
||||
},
|
||||
});
|
||||
|
||||
const [exitCode, stdout, stderr] = await Promise.all([
|
||||
proc.exited,
|
||||
new Response(proc.stdout).text(),
|
||||
new Response(proc.stderr).text(),
|
||||
]);
|
||||
|
||||
return { exitCode, stdout, stderr };
|
||||
}
|
||||
|
||||
describe("commit command", () => {
|
||||
test("clean repository exits without requiring API key", async () => {
|
||||
const repo = mkdtempSync(join(tmpdir(), "gai-clean-repo-"));
|
||||
const home = mkdtempSync(join(tmpdir(), "gai-empty-home-"));
|
||||
|
||||
const init = await run(["git", "init"], repo, { HOME: home });
|
||||
expect(init.exitCode).toBe(0);
|
||||
|
||||
const result = await run(
|
||||
["bun", "run", join(import.meta.dir, "..", "index.ts"), "commit"],
|
||||
repo,
|
||||
{
|
||||
HOME: home,
|
||||
GAI_API_KEY: "",
|
||||
},
|
||||
);
|
||||
|
||||
expect(result.exitCode).toBe(0);
|
||||
expect(result.stdout).toContain("Nothing to commit");
|
||||
expect(result.stdout).toContain("No staged or unstaged changes");
|
||||
expect(result.stderr).not.toContain("API key not set");
|
||||
expect(result.stderr).not.toContain("requires a TTY");
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user