import { describe, it, expect } from "vitest" import * as fs from "fs" import { parseIssue, validateStatusTransition } from "../../lib/issue" describe("parseIssue", () => { it("parses all required fields", () => { const raw = fs.readFileSync("tests/_mocks/todo-basic.txt", "utf-8") const issueText = raw.split("Content-Type: application/issue")[1] const issue = parseIssue(issueText) expect(issue.id).toBe(1) expect(issue.type).toBe("feature") expect(issue.status).toBe("open") expect(issue.priority).toBe("high") expect(issue.description).toContain("Implement streaming JSON parser.") }) it("parses empty relationships", () => { const raw = ` ID: 2 Type: bugfix Title: T Status: open Priority: low Created: 2026-02-01 Relationships: Description: X ` const issue = parseIssue(raw) expect(issue.relationships).toEqual({}) }) }) describe("validateStatusTransition", () => { it("allows valid transitions", () => { expect(validateStatusTransition("open", "in-progress")).toBeNull() expect(validateStatusTransition("open", "hold")).toBeNull() expect(validateStatusTransition("open", "cancelled")).toBeNull() expect(validateStatusTransition("in-progress", "done")).toBeNull() expect(validateStatusTransition("in-progress", "open")).toBeNull() expect(validateStatusTransition("done", "open")).toBeNull() expect(validateStatusTransition("cancelled", "open")).toBeNull() expect(validateStatusTransition("hold", "in-progress")).toBeNull() }) it("rejects invalid transitions", () => { expect(validateStatusTransition("open", "done")).not.toBeNull() expect(validateStatusTransition("done", "in-progress")).not.toBeNull() expect(validateStatusTransition("done", "cancelled")).not.toBeNull() expect(validateStatusTransition("cancelled", "done")).not.toBeNull() }) it("allows no-op (same status)", () => { expect(validateStatusTransition("open", "open")).toBeNull() expect(validateStatusTransition("done", "done")).toBeNull() }) })