feat(FN-4648): complete Step 1 — add hard merge blocker helper
Fusion-Task-Id: FN-4648 Fusion-Task-Lineage: 82289e69-7e72-40e4-acaf-b98ad82ad354
This commit is contained in:
@@ -2,6 +2,7 @@ import { describe, it, expect } from "vitest";
|
||||
import type { StepStatus } from "../types.js";
|
||||
import {
|
||||
getTaskCompletionBlocker,
|
||||
getTaskHardMergeBlocker,
|
||||
getTaskMergeBlocker,
|
||||
isTaskReadyForMerge,
|
||||
resolveTaskMergeTarget,
|
||||
@@ -284,6 +285,45 @@ describe("getTaskMergeBlocker", () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe("getTaskHardMergeBlocker", () => {
|
||||
it("ignores paused when no hard blockers exist", () => {
|
||||
expect(getTaskHardMergeBlocker({ ...baseTask, paused: true })).toBeUndefined();
|
||||
});
|
||||
|
||||
it("ignores failed status when no hard blockers exist", () => {
|
||||
expect(getTaskHardMergeBlocker({ ...baseTask, status: "failed" })).toBeUndefined();
|
||||
});
|
||||
|
||||
it("still blocks on awaiting-user-review", () => {
|
||||
expect(getTaskHardMergeBlocker({ ...baseTask, status: "awaiting-user-review" }))
|
||||
.toContain("awaiting-user-review");
|
||||
});
|
||||
|
||||
it("still blocks on incomplete steps", () => {
|
||||
expect(getTaskHardMergeBlocker({
|
||||
...baseTask,
|
||||
steps: [{ name: "Step 1", status: "pending" }],
|
||||
})).toBe("task has incomplete steps");
|
||||
});
|
||||
|
||||
it("still blocks on failed pre-merge workflow step", () => {
|
||||
expect(getTaskHardMergeBlocker({
|
||||
...baseTask,
|
||||
workflowStepResults: [{
|
||||
workflowStepId: "WS-001",
|
||||
workflowStepName: "Pre-merge Check",
|
||||
phase: "pre-merge",
|
||||
status: "failed",
|
||||
}],
|
||||
})).toBe("task has failed pre-merge workflow steps");
|
||||
});
|
||||
|
||||
it("still blocks when task is not in-review", () => {
|
||||
expect(getTaskHardMergeBlocker({ ...baseTask, column: "todo" }))
|
||||
.toContain("must be in 'in-review'");
|
||||
});
|
||||
});
|
||||
|
||||
describe("isTaskReadyForMerge", () => {
|
||||
it("returns true for a clean task in review", () => {
|
||||
expect(isTaskReadyForMerge(baseTask)).toBe(true);
|
||||
|
||||
@@ -152,6 +152,7 @@ export {
|
||||
export type { CapacityRiskSignal } from "./capacity.js";
|
||||
export {
|
||||
getTaskMergeBlocker,
|
||||
getTaskHardMergeBlocker,
|
||||
getTaskCompletionBlocker,
|
||||
isTaskReadyForMerge,
|
||||
resolveTaskMergeTarget,
|
||||
|
||||
@@ -116,6 +116,17 @@ export function getTaskMergeBlocker(
|
||||
return undefined;
|
||||
}
|
||||
|
||||
export function getTaskHardMergeBlocker(
|
||||
task: Pick<Task, "column" | "paused" | "status" | "error" | "steps" | "workflowStepResults">,
|
||||
): string | undefined {
|
||||
return getTaskMergeBlocker({
|
||||
...task,
|
||||
paused: false,
|
||||
status: task.status === "failed" ? undefined : task.status,
|
||||
error: undefined,
|
||||
});
|
||||
}
|
||||
|
||||
export function isTaskReadyForMerge(
|
||||
task: Pick<Task, "column" | "paused" | "status" | "error" | "steps" | "workflowStepResults">,
|
||||
): boolean {
|
||||
|
||||
Reference in New Issue
Block a user