import { describe, expect, it } from "vitest";
import type { RunRecord } from "./db";
import { isCurrentRun } from "./is-current";
function record(version: number, html: string): RunRecord {
return {
id: `task-a__${String(version).padStart(6, "0")}`,
taskId: "task-a",
version,
html,
content: `content ${version}`,
ts: 1_700_000_000_000 + version,
stats: { outputBytes: html.length, deltaCount: 0 },
templateId: "article-magazine",
};
}
describe("isCurrentRun", () => {
it("flags the newest run when its html matches the editor", () => {
const v2 = record(2, "v2");
const v1 = record(1, "v1");
const runs = [v2, v1];
expect(isCurrentRun(v2, runs, v2.html)).toBe(true);
expect(isCurrentRun(v1, runs, v2.html)).toBe(false);
});
it("does not flag an older byte-identical run as current after restore", () => {
// After restoring v1, commitBase appends a fresh v3 whose html equals v1's html.
// The old isCurrent (pure content equality) wrongly flagged BOTH v3 and v1
// as current and disabled Restore on the genuinely-historical v1.
const sharedHtml = "v1";
const v3 = record(3, sharedHtml);
const v2 = record(2, "v2");
const v1 = record(1, sharedHtml);
const runs = [v3, v2, v1];
expect(isCurrentRun(v3, runs, sharedHtml)).toBe(true);
expect(isCurrentRun(v1, runs, sharedHtml)).toBe(false);
expect(isCurrentRun(v2, runs, sharedHtml)).toBe(false);
});
it("drops the current flag when the editor html drifts from the newest run", () => {
const v2 = record(2, "v2");
const v1 = record(1, "v1");
const runs = [v2, v1];
// User edited the editor after the last commit — no row is live anymore.
expect(isCurrentRun(v2, runs, "v2 edited")).toBe(false);
expect(isCurrentRun(v1, runs, "v2 edited")).toBe(false);
});
it("returns false against an empty runs list", () => {
const orphan = record(1, "v1");
expect(isCurrentRun(orphan, [], orphan.html)).toBe(false);
});
});