@@ -62,6 +62,11 @@ const baseServerConfig: ServerConfig = {
6262
6363const serverApi = {
6464 getConfig : vi . fn < ( ) => Promise < ServerConfig > > ( ) ,
65+ refreshProviders : vi . fn <
66+ ( ) => Promise < {
67+ providers : ReadonlyArray < ServerProvider > ;
68+ } >
69+ > ( ) ,
6570 subscribeConfig : vi . fn ( ( listener : ( event : ServerConfigStreamEvent ) => void ) =>
6671 registerListener ( configListeners , listener ) ,
6772 ) ,
@@ -101,6 +106,7 @@ beforeEach(() => {
101106 vi . clearAllMocks ( ) ;
102107 lifecycleListeners . clear ( ) ;
103108 configListeners . clear ( ) ;
109+ serverApi . refreshProviders . mockResolvedValue ( { providers : defaultProviders } ) ;
104110 resetServerStateForTests ( ) ;
105111} ) ;
106112
@@ -123,6 +129,7 @@ describe("serverState", () => {
123129 expect ( serverApi . subscribeConfig ) . toHaveBeenCalledOnce ( ) ;
124130 expect ( serverApi . subscribeLifecycle ) . toHaveBeenCalledOnce ( ) ;
125131 expect ( serverApi . getConfig ) . toHaveBeenCalledOnce ( ) ;
132+ expect ( serverApi . refreshProviders ) . toHaveBeenCalledOnce ( ) ;
126133 expect ( configListener ) . toHaveBeenCalledWith (
127134 {
128135 issues : [ ] ,
@@ -168,10 +175,15 @@ describe("serverState", () => {
168175 expect ( getServerConfig ( ) ) . toEqual ( streamedConfig ) ;
169176 } ) ;
170177
178+ await waitFor ( ( ) => {
179+ expect ( serverApi . refreshProviders ) . toHaveBeenCalledOnce ( ) ;
180+ } ) ;
181+
171182 deferred . resolve ( baseServerConfig ) ;
172183 await new Promise ( ( resolve ) => setTimeout ( resolve , 0 ) ) ;
173184
174185 expect ( getServerConfig ( ) ) . toEqual ( streamedConfig ) ;
186+ expect ( serverApi . refreshProviders ) . toHaveBeenCalledOnce ( ) ;
175187 stop ( ) ;
176188 } ) ;
177189
@@ -274,24 +286,22 @@ describe("serverState", () => {
274286 } ) ;
275287
276288 expect ( providersListener ) . toHaveBeenLastCalledWith ( { providers : nextProviders } ) ;
277- expect ( configListener ) . toHaveBeenNthCalledWith (
278- 2 ,
289+ expect ( configListener . mock . calls ) . toContainEqual ( [
279290 {
280291 issues : [ { kind : "keybindings.malformed-config" , message : "bad json" } ] ,
281292 providers : defaultProviders ,
282293 settings : DEFAULT_SERVER_SETTINGS ,
283294 } ,
284295 "keybindingsUpdated" ,
285- ) ;
286- expect ( configListener ) . toHaveBeenNthCalledWith (
287- 3 ,
296+ ] ) ;
297+ expect ( configListener . mock . calls ) . toContainEqual ( [
288298 {
289299 issues : [ { kind : "keybindings.malformed-config" , message : "bad json" } ] ,
290300 providers : nextProviders ,
291301 settings : DEFAULT_SERVER_SETTINGS ,
292302 } ,
293303 "providerStatuses" ,
294- ) ;
304+ ] ) ;
295305 expect ( configListener ) . toHaveBeenLastCalledWith (
296306 {
297307 issues : [ { kind : "keybindings.malformed-config" , message : "bad json" } ] ,
@@ -308,4 +318,39 @@ describe("serverState", () => {
308318 unsubscribeConfig ( ) ;
309319 stop ( ) ;
310320 } ) ;
321+
322+ it ( "applies eager refreshProviders results without waiting for stream events" , async ( ) => {
323+ const refreshedProviders : ReadonlyArray < ServerProvider > = [
324+ {
325+ ...defaultProviders [ 0 ] ! ,
326+ checkedAt : "2026-01-03T00:00:00.000Z" ,
327+ usage : {
328+ updatedAt : "2026-01-03T00:00:00.000Z" ,
329+ buckets : [
330+ {
331+ id : "weekly" ,
332+ label : "Weekly usage limit" ,
333+ usedPercent : 12 ,
334+ remainingPercent : 88 ,
335+ resetsAt : "2026-01-08T16:19:00.000Z" ,
336+ } ,
337+ ] ,
338+ } ,
339+ } ,
340+ ] ;
341+ serverApi . getConfig . mockResolvedValueOnce ( baseServerConfig ) ;
342+ serverApi . refreshProviders . mockResolvedValueOnce ( { providers : refreshedProviders } ) ;
343+
344+ const stop = startServerStateSync ( serverApi ) ;
345+
346+ await waitFor ( ( ) => {
347+ expect ( getServerConfig ( ) ) . toEqual ( {
348+ ...baseServerConfig ,
349+ providers : refreshedProviders ,
350+ } ) ;
351+ } ) ;
352+
353+ expect ( serverApi . refreshProviders ) . toHaveBeenCalledOnce ( ) ;
354+ stop ( ) ;
355+ } ) ;
311356} ) ;
0 commit comments