/ opencodehub / tests / unit / pr-issue-linking.test.ts
swadhinbiswas Improve PR issue reference parsing and add edge-case tests · 2/18/2026
df9f4e4
30 lines · 1.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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" });
  });
});