opencode-config/.opencode/draw-image/tests/cli.test.ts
Sergey 56b67d2d5c
feat(draw-image): SVG template renderer for on-brand covers (#134)
* feat(draw-image): add SVG template render engine

* feat(draw-image): add opencode plugin and tool tests

* test(draw-image): add vitest unit integration e2e suite

* chore(draw-image): wire CI dependabot docs and ADR

* docs(handoff): set PR number

* docs(handoff): fix PR number placeholder in frontmatter

* fix(ci): use tempfile and trailing newline in draw-image tests

---------

Co-authored-by: opencode-agent <agent@opencode.local>
2026-07-29 23:42:50 +03:00

57 lines
No EOL
1.6 KiB
TypeScript

import { describe, test, expect } from "vitest"
function parseArgs(argv: string[]): Record<string, string> {
const out: Record<string, string> = {}
for (let i = 0; i < argv.length; i++) {
const a = argv[i]
if (a.startsWith("--")) {
const key = a.slice(2)
const val = argv[i + 1] ?? ""
out[key] = val
i++
}
}
return out
}
function parseSlotsArg(slotsStr: string | undefined): Record<string, string> {
const slots: Record<string, string> = {}
if (slotsStr) {
for (const pair of slotsStr.split(",")) {
const eq = pair.indexOf("=")
if (eq !== -1) slots[pair.slice(0, eq).trim()] = pair.slice(eq + 1).trim()
}
}
return slots
}
describe("cli — arg parsing", () => {
test("parses title and out", () => {
const opts = parseArgs(["--title", "Hello", "--out", "/tmp/x.png"])
expect(opts.title).toBe("Hello")
expect(opts.out).toBe("/tmp/x.png")
})
test("default out is ./assets/cover.png", () => {
const opts = parseArgs(["--title", "Test"])
const out = opts.out ?? "./assets/cover.png"
expect(out).toBe("./assets/cover.png")
})
test("parses slots string into object", () => {
const slots = parseSlotsArg("icon=mic,sub-icon=opencode,badge=./x.svg")
expect(slots.icon).toBe("mic")
expect(slots["sub-icon"]).toBe("opencode")
expect(slots.badge).toBe("./x.svg")
})
test("empty slots string yields empty object", () => {
expect(parseSlotsArg(undefined)).toEqual({})
expect(parseSlotsArg("")).toEqual({})
})
test("subtitle is optional", () => {
const opts = parseArgs(["--title", "Test"])
expect(opts.subtitle).toBeUndefined()
})
})