import test from "node:test"; import assert from "node:assert/strict"; import { buildLukeDeliveryPlan } from "../src/report-delivery.js"; test("buildLukeDeliveryPlan requires a plausible recipient email", () => { const plan = buildLukeDeliveryPlan({ recipientEmail: "invalid-email", subject: "DFW ↔ BLQ flight report", body: "Summary", attachmentPath: "/tmp/report.pdf" }); assert.equal(plan.ready, false); assert.equal(plan.needsRecipientEmail, true); assert.equal(plan.command, null); }); test("buildLukeDeliveryPlan uses Luke's wrapper path when recipient is valid", () => { const plan = buildLukeDeliveryPlan({ recipientEmail: "stefano@fiorinis.com", subject: "DFW ↔ BLQ flight report", body: "Summary", attachmentPath: "/tmp/report.pdf" }); assert.equal(plan.ready, true); assert.match(String(plan.command), /gog-luke gmail send/); assert.match(String(plan.command), /stefano@fiorinis.com/); assert.match(String(plan.command), /report\.pdf/); }); test("buildLukeDeliveryPlan safely quotes shell-sensitive content", () => { const plan = buildLukeDeliveryPlan({ recipientEmail: "stefano@fiorinis.com", subject: "Luke's flight report; rm -rf /", body: "It's ready.", attachmentPath: "/tmp/report's-final.pdf" }); assert.equal(plan.ready, true); assert.match(String(plan.command), /--subject 'Luke'"'"'s flight report; rm -rf \/'/); assert.match(String(plan.command), /--attach '\/tmp\/report'"'"'s-final\.pdf'/); });