init
This commit is contained in:
commit
932d4ad420
46 changed files with 5800 additions and 0 deletions
57
tests/lib/issue.test.ts
Normal file
57
tests/lib/issue.test.ts
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
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()
|
||||
})
|
||||
})
|
||||
Loading…
Add table
Add a link
Reference in a new issue