Menu
popagent
publicLatest change 1b788b0b7ca21d50ddf415e619aa8aebe1af721d - Queue local model requests by AkurAI Build
import { describe, expect, test } from "bun:test";
import { renderToStaticMarkup } from "react-dom/server";
import { ChangelogTimeline, parseChangelog } from "./ChangelogPage";
import changelogMarkdown from "../../CHANGELOG.md" with { type: "text" };
const markdown = `# Changelog\n\n## [Unreleased]\n\n### Added\n\n- Shipped the timeline.\n- Kept the force-push button untouched.\n\n## [1.0.0] - 2026-08-15\n\n### Fixed\n\n- Fixed a tiny gremlin.\n`;
describe("changelog presentation", () => {
test("parses releases, categories, and bullet entries", () => {
expect(parseChangelog(markdown)).toEqual([
{ title: "Unreleased", date: undefined, groups: [{ title: "Added", items: ["Shipped the timeline.", "Kept the force-push button untouched."] }] },
{ title: "1.0.0", date: "2026-08-15", groups: [{ title: "Fixed", items: ["Fixed a tiny gremlin."] }] },
]);
});
test("bundles released versions instead of unreleased changes", () => {
const releases = parseChangelog(changelogMarkdown);
expect(releases[0]?.title).toBe("1.0.11");
expect(releases.some((release) => release.title === "Unreleased")).toBe(false);
expect(releases.map((release) => release.title)).toEqual(["1.0.11", "1.0.10", "1.0.9", "1.0.8", "1.0.7", "1.0.6", "1.0.5", "1.0.4", "1.0.3", "1.0.2", "1.0.1", "1.0.0"]);
});
test("renders a repository timeline with release semantics", () => {
const html = renderToStaticMarkup(<ChangelogTimeline markdown={markdown} />);
expect(html).toContain("Release feed");
expect(html).toContain("Unreleased");
expect(html).toContain("1.0.0");
expect(html).toContain("Fixed a tiny gremlin.");
});
});