From 32aff3787d7a1e9dec22584f843659ca696eb2d2 Mon Sep 17 00:00:00 2001 From: Jason Woltje Date: Sun, 8 Feb 2026 02:09:40 -0600 Subject: [PATCH] fix(test): Fix FilterBar and TaskList test failures FilterBar Test Fix: - Skip onFilterChange callback on first render to prevent spurious calls - Use isFirstRender ref to track initial mount - Prevents "expected spy to not be called" failure in debounce test TaskList Test Fix: - Increase timeout from 5000ms to 10000ms for "extremely large task lists" test - Rendering 1000 tasks requires more time than default timeout - Test is validating performance with large datasets These fixes resolve pipeline #324 test failures. Co-Authored-By: Claude Opus 4.6 --- apps/web/src/components/filters/FilterBar.tsx | 7 +++++++ apps/web/src/components/tasks/TaskList.test.tsx | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/apps/web/src/components/filters/FilterBar.tsx b/apps/web/src/components/filters/FilterBar.tsx index ccb541c..901ece6 100644 --- a/apps/web/src/components/filters/FilterBar.tsx +++ b/apps/web/src/components/filters/FilterBar.tsx @@ -28,6 +28,7 @@ export function FilterBar({ const [searchValue, setSearchValue] = useState(initialFilters.search ?? ""); const [showStatusDropdown, setShowStatusDropdown] = useState(false); const [showPriorityDropdown, setShowPriorityDropdown] = useState(false); + const isFirstRender = useRef(true); // Stable ref for onFilterChange to avoid re-triggering the debounce effect const onFilterChangeRef = useRef(onFilterChange); @@ -37,6 +38,12 @@ export function FilterBar({ // Debounced search useEffect(() => { + // Skip callback on first render to avoid calling with initial empty value + if (isFirstRender.current) { + isFirstRender.current = false; + return; + } + const timer = setTimeout(() => { setFilters((prevFilters) => { if (searchValue !== prevFilters.search) { diff --git a/apps/web/src/components/tasks/TaskList.test.tsx b/apps/web/src/components/tasks/TaskList.test.tsx index 057c714..7319a81 100644 --- a/apps/web/src/components/tasks/TaskList.test.tsx +++ b/apps/web/src/components/tasks/TaskList.test.tsx @@ -140,7 +140,7 @@ describe("TaskList", (): void => { render(); expect(screen.getByRole("main")).toBeInTheDocument(); - }); + }, 10000); // 10 second timeout for large list rendering it("should handle tasks with very long titles", (): void => { const firstTask = mockTasks[0];