From 06eb310c344bb075ceaf9e4a8b339059f44bff98 Mon Sep 17 00:00:00 2001 From: Roo Code Date: Wed, 3 Dec 2025 16:37:10 +0000 Subject: [PATCH] fix: make ChatView focus grabbing test more robust Add delays to wait for debounced focus effects to complete before asserting. The useDebounceEffect has a 50ms delay, and the test was flaky because state changes could trigger the debounced effect after mockFocus.mockClear() was called. --- .../components/chat/__tests__/ChatView.spec.tsx | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/webview-ui/src/components/chat/__tests__/ChatView.spec.tsx b/webview-ui/src/components/chat/__tests__/ChatView.spec.tsx index 7a6d0a0bc1..35126c9ba8 100644 --- a/webview-ui/src/components/chat/__tests__/ChatView.spec.tsx +++ b/webview-ui/src/components/chat/__tests__/ChatView.spec.tsx @@ -468,7 +468,12 @@ describe("ChatView - Focus Grabbing Tests", () => { expect(getByTestId("chat-textarea")).toBeInTheDocument() }) - // Clear any initial calls after state has settled + // Wait for any debounced focus effects to complete (useDebounceEffect has 50ms delay) + await act(async () => { + await new Promise((resolve) => setTimeout(resolve, 100)) + }) + + // Clear any initial calls after state has settled and debounce completed mockFocus.mockClear() // Add follow-up question @@ -489,12 +494,13 @@ describe("ChatView - Focus Grabbing Tests", () => { ], }) - // Wait for state update to complete - await waitFor(() => { - expect(getByTestId("chat-textarea")).toBeInTheDocument() + // Wait for state update to complete and any debounced effects + await act(async () => { + await new Promise((resolve) => setTimeout(resolve, 100)) }) // Should not grab focus for follow-up questions + // The followup case sets enableButtons to true, which prevents focus grabbing expect(mockFocus).not.toHaveBeenCalled() }) })