AkurAI Build
Menu

popagent

public

Latest change d77ed9d7b57cc5959f67dcccd4281e5328052d08 - Make Popagent Docs canonical 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("parses Bun's production Markdown module output", () => {
    const bundled = `<h1>Changelog</h1>
<h2>[1.2.3] - 2026-08-15</h2>
<h3>Fixed</h3>
<ul>
<li>Preserved <code>older</code> release entries.</li>
</ul>`;
    expect(parseChangelog(bundled)).toEqual([
      { title: "1.2.3", date: "2026-08-15", groups: [{ title: "Fixed", items: ["Preserved `older` release entries."] }] },
    ]);
  });

  test("bundles released versions instead of unreleased changes", () => {
    const releases = parseChangelog(changelogMarkdown);
    expect(releases[0]?.title).toBe("1.0.14");
    expect(releases.some((release) => release.title === "Unreleased")).toBe(false);
    expect(releases.map((release) => release.title)).toEqual(["1.0.14", "1.0.13", "1.0.12", "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.");
  });
});