import { describe, expect, test } from "vitest"; import { type ChangelogEntry, normalizeChangelogLinks } from "../src/utils/changelog.ts"; const entry: ChangelogEntry = { major: 0, minor: 79, patch: 0, content: "", }; describe("normalizeChangelogLinks", () => { test("rewrites package-relative changelog links to tag-pinned GitHub source links", () => { const markdown = [ "[Project Trust](README.md#project-trust)", "[Extensions](docs/extensions.md#project_trust)", "[Examples](examples/extensions/)", "[Root README](../../README.md#supply-chain-hardening)", ].join("\n"); expect(normalizeChangelogLinks(markdown, entry)).toBe( [ "[Project Trust](https://github.com/earendil-works/pi/blob/v0.79.0/packages/coding-agent/README.md#project-trust)", "[Extensions](https://github.com/earendil-works/pi/blob/v0.79.0/packages/coding-agent/docs/extensions.md#project_trust)", "[Examples](https://github.com/earendil-works/pi/tree/v0.79.0/packages/coding-agent/examples/extensions/)", "[Root README](https://github.com/earendil-works/pi/blob/v0.79.0/README.md#supply-chain-hardening)", ].join("\n"), ); }); test("canonicalizes old repository URLs without changing external links", () => { const markdown = [ "[#5167](https://github.com/earendil-works/pi-mono/pull/5167)", "[#4163](https://github.com/badlogic/pi-mono/issues/4163)", "[Agent README](https://github.com/badlogic/pi-mono/blob/main/packages/agent/README.md)", "[External](https://example.com/docs)", "[Local anchor](#settings)", ].join("\n"); expect(normalizeChangelogLinks(markdown, "0.79.0")).toBe( [ "[#5167](https://github.com/earendil-works/pi/pull/5167)", "[#4163](https://github.com/earendil-works/pi/issues/4163)", "[Agent README](https://github.com/earendil-works/pi/blob/v0.79.0/packages/agent/README.md)", "[External](https://example.com/docs)", "[Local anchor](#settings)", ].join("\n"), ); }); });