33import { screen , fireEvent , render } from "@testing-library/react"
44import { act } from "react"
55import { QueryClient , QueryClientProvider } from "@tanstack/react-query"
6+ import { vi } from "vitest"
67
78import { ModelInfo } from "@roo-code/types"
89
@@ -58,6 +59,13 @@ describe("ModelPicker", () => {
5859
5960 beforeEach ( ( ) => {
6061 vi . clearAllMocks ( )
62+ vi . useFakeTimers ( )
63+ } )
64+
65+ afterEach ( ( ) => {
66+ // Clear any pending timers to prevent test flakiness
67+ vi . clearAllTimers ( )
68+ vi . useRealTimers ( )
6169 } )
6270
6371 it ( "calls setApiConfigurationField when a model is selected" , async ( ) => {
@@ -71,7 +79,7 @@ describe("ModelPicker", () => {
7179
7280 // Wait for popover to open and animations to complete.
7381 await act ( async ( ) => {
74- await new Promise ( ( resolve ) => setTimeout ( resolve , 100 ) )
82+ vi . advanceTimersByTime ( 100 )
7583 } )
7684
7785 await act ( async ( ) => {
@@ -87,6 +95,11 @@ describe("ModelPicker", () => {
8795 fireEvent . click ( modelItem )
8896 } )
8997
98+ // Advance timers to trigger the setTimeout in onSelect
99+ await act ( async ( ) => {
100+ vi . advanceTimersByTime ( 100 )
101+ } )
102+
90103 // Verify the API config was updated.
91104 expect ( mockSetApiConfigurationField ) . toHaveBeenCalledWith ( defaultProps . modelIdKey , "model2" )
92105 } )
@@ -102,7 +115,7 @@ describe("ModelPicker", () => {
102115
103116 // Wait for popover to open and animations to complete.
104117 await act ( async ( ) => {
105- await new Promise ( ( resolve ) => setTimeout ( resolve , 100 ) )
118+ vi . advanceTimersByTime ( 100 )
106119 } )
107120
108121 const customModelId = "custom-model-id"
@@ -115,7 +128,7 @@ describe("ModelPicker", () => {
115128
116129 // Wait for the UI to update
117130 await act ( async ( ) => {
118- await new Promise ( ( resolve ) => setTimeout ( resolve , 100 ) )
131+ vi . advanceTimersByTime ( 100 )
119132 } )
120133
121134 // Find and click the "Use custom" option
@@ -125,6 +138,11 @@ describe("ModelPicker", () => {
125138 fireEvent . click ( customOption )
126139 } )
127140
141+ // Advance timers to trigger the setTimeout in onSelect
142+ await act ( async ( ) => {
143+ vi . advanceTimersByTime ( 100 )
144+ } )
145+
128146 // Verify the API config was updated with the custom model ID
129147 expect ( mockSetApiConfigurationField ) . toHaveBeenCalledWith ( defaultProps . modelIdKey , customModelId )
130148 } )
0 commit comments