feat(FN-3141): add regression test for description auto-save refresh

Adds a regression test covering description auto-save refresh behavior in the TaskDetailModal component.

Fusion-Task-Id: FN-3141
This commit is contained in:
Fusion
2026-05-02 00:40:16 -07:00
committed by gsxdsm
parent d227c6416b
commit 8dadbd6dc2
2 changed files with 45 additions and 2 deletions

View File

@@ -854,12 +854,13 @@ export function TaskDetailModal({
const handleAutoSaveDescription = useCallback(async (description: string) => {
try {
await updateTask(task.id, { description }, projectId);
const updatedTask = await updateTask(task.id, { description }, projectId);
onTaskUpdated?.(updatedTask);
addToast("Description saved", "success");
} catch (err) {
addToast(`Failed to save: ${getErrorMessage(err)}`, "error");
}
}, [task.id, addToast, projectId]);
}, [task.id, addToast, projectId, onTaskUpdated]);
// Handle keyboard shortcuts for edit mode
const handleEditKeyDown = useCallback((e: KeyboardEvent) => {

View File

@@ -5140,6 +5140,48 @@ describe("TaskDetailModal", () => {
expect(descTextarea.value).toBe("My Description");
});
it("propagates auto-saved description updates via onTaskUpdated", async () => {
const { updateTask } = await import("../../api");
const mockUpdateTask = vi.mocked(updateTask);
const onTaskUpdated = vi.fn();
const initialTask = makeTask({
id: "FN-001",
column: "todo",
title: "My Task",
description: "Old Description",
});
const updatedTask = {
...initialTask,
description: "New Description",
};
mockUpdateTask.mockResolvedValueOnce(updatedTask);
const { container } = render(
<TaskDetailModal
task={initialTask}
onClose={noop}
onMoveTask={noopMove}
onDeleteTask={noopDelete}
onMergeTask={noopMerge}
onOpenDetail={noopOpenDetail}
onTaskUpdated={onTaskUpdated}
addToast={noop}
/>,
);
fireEvent.click(container.querySelector(".modal-edit-btn")!);
const descTextarea = container.querySelector("#task-form-description") as HTMLTextAreaElement;
fireEvent.change(descTextarea, { target: { value: "New Description" } });
await waitFor(() => {
expect(mockUpdateTask).toHaveBeenCalledWith("FN-001", { description: "New Description" }, undefined);
expect(onTaskUpdated).toHaveBeenCalledWith(updatedTask);
}, { timeout: 3500 });
});
it("uses updated model values in edit mode after saving from the Model tab", async () => {
const { fetchModels, updateTask } = await import("../../api");
const mockFetchModels = vi.mocked(fetchModels);