From 2a0eb8e38b4f907796c21b802469233474467760 Mon Sep 17 00:00:00 2001 From: Param Harrison Date: Wed, 14 Oct 2026 14:40:08 +0300 Subject: [PATCH 1/2] factory: claim #195 by runner-20609-1791978008054 From cacfd9f8d4679ef5af46a41d1f332fa62ec92495 Mon Sep 17 00:00:00 2001 From: Param Harrison Date: Wed, 14 Oct 2026 14:47:32 +0300 Subject: [PATCH 2/2] factory: build #195 --- src/cli.ts | 5 ++++- tests/cli.test.ts | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/cli.ts b/src/cli.ts index 53f3a8f..51132ee 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -50,6 +50,7 @@ export function run(argv: string[], db: ReturnType): string { if (command === "export") { if (!arg) return "splitbill export : missing group id"; + if (!db.query("SELECT 1 FROM groups WHERE id = ?").get(arg)) return `no such group: ${arg}`; return exportCsv(db, arg).trimEnd(); } @@ -59,5 +60,7 @@ export function run(argv: string[], db: ReturnType): string { if (import.meta.main) { const db = openDb(process.env.SPLITBILL_DB ?? "splitbill.sqlite"); seedDemoData(db); - console.log(run(process.argv.slice(2), db)); + const output = run(process.argv.slice(2), db); + console.log(output); + if (output.startsWith("no such group: ")) process.exitCode = 1; } diff --git a/tests/cli.test.ts b/tests/cli.test.ts index b87c924..e3e92ec 100644 --- a/tests/cli.test.ts +++ b/tests/cli.test.ts @@ -38,6 +38,20 @@ describe("splitbill export", () => { const output = run(["export", "flat-4b"], setupDb()); expect(output.split("\n")[0]).toBe("date,payer,description,amount"); }); + + test("export reports an unknown group", () => { + const output = run(["export", "no-such-group"], setupDb()); + expect(output).toBe("no such group: no-such-group"); + expect(output).not.toContain("date,payer,description,amount"); + }); + + test("export exits non-zero for an unknown group", () => { + const result = Bun.spawnSync(["bun", "src/cli.ts", "export", "no-such-group"], { + env: { ...process.env, SPLITBILL_DB: ":memory:" }, + }); + expect(result.stdout.toString().trim()).toBe("no such group: no-such-group"); + expect(result.exitCode).not.toBe(0); + }); }); describe("splitbill with no command", () => {