import { describe, expect, it } from "vitest";
import { parseIssueReferences } from "@/lib/pr-issue-linking";
describe("parseIssueReferences", () => {
it("parses basic closing and related references", () => {
const refs = parseIssueReferences("Fixes #12 and also touches #20");
expect(refs).toContainEqual({ number: 12, type: "fixes" });
expect(refs).toContainEqual({ number: 20, type: "relates" });
});
it("parses scoped repository references for closing keywords", () => {
const refs = parseIssueReferences("closes acme/platform#101");
expect(refs).toContainEqual({ number: 101, type: "closes" });
});
it("does not downgrade closes/fixes to relates when both patterns match", () => {
const refs = parseIssueReferences("Resolves #88 and #88 is part of rollout");
const only = refs.filter((r) => r.number === 88);
expect(only).toHaveLength(1);
expect(only[0]).toEqual({ number: 88, type: "closes" });
});
it("supports multiple closing keywords in one body", () => {
const refs = parseIssueReferences("Fixes #3, closes org/repo#4, and relates to #5");
expect(refs).toContainEqual({ number: 3, type: "fixes" });
expect(refs).toContainEqual({ number: 4, type: "closes" });
expect(refs).toContainEqual({ number: 5, type: "relates" });
});
});