62 lines
2.1 KiB
TypeScript
62 lines
2.1 KiB
TypeScript
import type { TaskLogEntry } from "@fusion/core";
|
|
import { describe, expect, it } from "vitest";
|
|
|
|
import { findInReviewStallLogEntry } from "../findInReviewStallLogEntry";
|
|
|
|
function makeEntry(action: string, timestamp = "2026-05-13T00:00:00.000Z"): TaskLogEntry {
|
|
return { action, timestamp };
|
|
}
|
|
|
|
describe("findInReviewStallLogEntry", () => {
|
|
it("returns undefined for empty logs", () => {
|
|
expect(findInReviewStallLogEntry({ log: [] }, "merge-blocker")).toBeUndefined();
|
|
});
|
|
|
|
it("returns undefined when no entries match", () => {
|
|
expect(
|
|
findInReviewStallLogEntry(
|
|
{ log: [makeEntry("Something else happened"), makeEntry("Merge retries started")] },
|
|
"merge-blocker",
|
|
),
|
|
).toBeUndefined();
|
|
});
|
|
|
|
it("returns single match as newest entry with reversedIndex 0", () => {
|
|
const entry = makeEntry("In-review stall surfaced [merge-blocker]: blocked");
|
|
const result = findInReviewStallLogEntry({ log: [entry] }, "merge-blocker");
|
|
|
|
expect(result?.entry).toBe(entry);
|
|
expect(result?.reversedIndex).toBe(0);
|
|
expect(result?.code).toBe("merge-blocker");
|
|
});
|
|
|
|
it("returns the most recent matching code", () => {
|
|
const older = makeEntry("In-review stall surfaced [merge-blocker]: older");
|
|
const otherCode = makeEntry("In-review stall surfaced [merge-retries-exhausted]: other");
|
|
const newest = makeEntry("In-review stall surfaced [merge-blocker]: newest");
|
|
|
|
const result = findInReviewStallLogEntry({ log: [older, otherCode, newest] }, "merge-blocker");
|
|
|
|
expect(result?.entry.action).toContain("newest");
|
|
expect(result?.reversedIndex).toBe(0);
|
|
});
|
|
|
|
it("returns undefined when code does not match", () => {
|
|
expect(
|
|
findInReviewStallLogEntry(
|
|
{ log: [makeEntry("In-review stall surfaced [merge-retries-exhausted]: exhausted")] },
|
|
"merge-blocker",
|
|
),
|
|
).toBeUndefined();
|
|
});
|
|
|
|
it("is case-sensitive for the canonical prefix", () => {
|
|
expect(
|
|
findInReviewStallLogEntry(
|
|
{ log: [makeEntry("in-review stall surfaced [merge-blocker]: lower")] },
|
|
"merge-blocker",
|
|
),
|
|
).toBeUndefined();
|
|
});
|
|
});
|