feat(FN-2934): merge fusion/fn-2934

- test(FN-2934): complete Step 2 — cover paused triage actions visibility
- feat(FN-2934): complete Step 1 — show actions for paused triage tasks
- feat(FN-2930): merge fusion/fn-2930

Fusion-Task-Id: FN-2934
This commit is contained in:
Fusion
2026-04-29 01:09:36 -07:00
committed by gsxdsm
parent f04333672c
commit ba09646c2d
2 changed files with 51 additions and 1 deletions

View File

@@ -2147,7 +2147,7 @@ export function TaskDetailModal({
)}
{/* Actions dropdown — less common operations */}
{(task.column !== "triage" || task.status === "awaiting-approval" || canRetryTask) && (
{(task.column !== "triage" || task.status === "awaiting-approval" || canRetryTask || task.paused) && (
<div className="detail-actions-dropdown" ref={actionsMenuRef}>
<button
className="btn btn-sm"

View File

@@ -3846,6 +3846,56 @@ describe("TaskDetailModal", () => {
expect(screen.queryByText("Refine")).toBeNull();
});
it("renders Actions dropdown for a paused triage task", () => {
render(
<TaskDetailModal
task={makeTask({ column: "triage", paused: true })}
onClose={noop}
onMoveTask={noopMove}
onDeleteTask={noopDelete}
onMergeTask={noopMerge}
onOpenDetail={noopOpenDetail}
addToast={noop}
/>,
);
expect(screen.getByRole("button", { name: /actions/i })).toBeTruthy();
});
it("renders Unpause button for a paused triage task", () => {
render(
<TaskDetailModal
task={makeTask({ column: "triage", paused: true })}
onClose={noop}
onMoveTask={noopMove}
onDeleteTask={noopDelete}
onMergeTask={noopMerge}
onOpenDetail={noopOpenDetail}
addToast={noop}
/>,
);
fireEvent.click(screen.getByRole("button", { name: /actions/i }));
expect(screen.getByRole("menuitem", { name: "Unpause" })).toBeTruthy();
});
it("does NOT render Actions dropdown for a non-paused, non-awaiting-approval, non-retryable triage task", () => {
render(
<TaskDetailModal
task={makeTask({ column: "triage", paused: false, status: "todo" })}
onClose={noop}
onMoveTask={noopMove}
onDeleteTask={noopDelete}
onMergeTask={noopMerge}
onOpenDetail={noopOpenDetail}
addToast={noop}
/>,
);
expect(screen.queryByRole("button", { name: /actions/i })).toBeNull();
});
it("clicking Refine opens the refinement modal", () => {
render(
<TaskDetailModal