feat(FN-1876): merge fusion/fn-1876
This commit is contained in:
@@ -661,15 +661,17 @@ export function TaskDetailModal({
|
||||
});
|
||||
}, [task.id, onMergeTask, onClose, addToast]);
|
||||
|
||||
const handleRetry = useCallback(async () => {
|
||||
const handleRetry = useCallback(() => {
|
||||
if (!onRetryTask) return;
|
||||
try {
|
||||
await onRetryTask(task.id);
|
||||
onClose();
|
||||
addToast(`Retrying ${task.id}...`, "info");
|
||||
} catch (err: any) {
|
||||
addToast(err.message, "error");
|
||||
}
|
||||
onClose();
|
||||
addToast(`Retrying ${task.id}...`, "info");
|
||||
onRetryTask(task.id)
|
||||
.then(() => {
|
||||
addToast(`Retry started for ${task.id}`, "success");
|
||||
})
|
||||
.catch((err: any) => {
|
||||
addToast(err.message, "error");
|
||||
});
|
||||
}, [task.id, onRetryTask, onClose, addToast]);
|
||||
|
||||
const handleDuplicate = useCallback(async () => {
|
||||
|
||||
@@ -291,7 +291,41 @@ describe("TaskDetailModal", () => {
|
||||
expect(retryButtons).toHaveLength(1);
|
||||
});
|
||||
|
||||
it("shows 'Move to Todo' in Move dropdown for in-review tasks (not 'Retry')", () => {
|
||||
it("closes modal immediately when Retry is clicked (before API call)", async () => {
|
||||
const onClose = vi.fn();
|
||||
const onRetryTask = vi.fn(async () => ({}) as Task);
|
||||
|
||||
render(
|
||||
<TaskDetailModal
|
||||
task={makeTask({ column: "in-review", status: "failed" })}
|
||||
onClose={onClose}
|
||||
onMoveTask={noopMove}
|
||||
onDeleteTask={noopDelete}
|
||||
onMergeTask={noopMerge}
|
||||
onOpenDetail={noopOpenDetail}
|
||||
onRetryTask={onRetryTask}
|
||||
addToast={noop}
|
||||
/>,
|
||||
);
|
||||
|
||||
// Open Actions dropdown and click Retry
|
||||
const actionsBtn = screen.getByRole("button", { name: /actions/i });
|
||||
await act(async () => {
|
||||
fireEvent.click(actionsBtn);
|
||||
});
|
||||
|
||||
const retryBtn = screen.getByRole("menuitem", { name: "Retry" });
|
||||
await act(async () => {
|
||||
fireEvent.click(retryBtn);
|
||||
});
|
||||
|
||||
// Modal should close immediately (optimistic close before API call)
|
||||
expect(onClose).toHaveBeenCalledTimes(1);
|
||||
// onRetryTask should still be called with the correct task ID
|
||||
expect(onRetryTask).toHaveBeenCalledWith("FN-099");
|
||||
});
|
||||
|
||||
it("shows 'Move to Todo' in Move dropdown for in-review tasks (not 'Retry')", () => {
|
||||
render(
|
||||
<TaskDetailModal
|
||||
task={makeTask({ column: "in-review" })}
|
||||
|
||||
Reference in New Issue
Block a user