@@ -50,7 +50,10 @@ function update(version: string): V2Event {
5050 }
5151}
5252
53- async function mount ( discover ?: ( ) => Promise < { client : OpencodeClient ; api : OpenCodeClient } > , log ?: LogSink ) {
53+ async function mount (
54+ reconnect ?: ( attempt : number ) => Promise < { client : OpencodeClient ; api : OpenCodeClient } > ,
55+ log ?: LogSink ,
56+ ) {
5457 const events = createEventStream ( )
5558 const calls = createFetch ( undefined , events )
5659 const seen : V2Event [ ] = [ ]
@@ -64,7 +67,7 @@ async function mount(discover?: () => Promise<{ client: OpencodeClient; api: Ope
6467
6568 const app = await testRender ( ( ) => (
6669 < TestTuiContexts log = { log } >
67- < SDKProvider client = { createClient ( calls . fetch ) } api = { createApi ( calls . fetch ) } discover = { discover } >
70+ < SDKProvider client = { createClient ( calls . fetch ) } api = { createApi ( calls . fetch ) } reconnect = { reconnect } >
6871 < ProjectProvider >
6972 < Probe
7073 onReady = { async ( ctx ) => {
@@ -183,27 +186,28 @@ describe("useEvent", () => {
183186 }
184187 } )
185188
186- test ( "rediscovers the server after the event stream drops" , async ( ) => {
187- let calls = 0
189+ test ( "reconnects to the server after the event stream drops" , async ( ) => {
190+ const attempts : number [ ] = [ ]
188191 const replacementEvents = createEventStream ( )
189192 const replacementCalls = createFetch ( undefined , replacementEvents )
190193 const replacement = { client : createClient ( replacementCalls . fetch ) , api : createApi ( replacementCalls . fetch ) }
191- const { app, events, sdk, seen } = await mount ( async ( ) => {
192- calls += 1
194+ const { app, events, sdk, seen } = await mount ( async ( attempt ) => {
195+ attempts . push ( attempt )
193196 return replacement
194197 } )
195198
196199 try {
197200 await wait ( ( ) => sdk . connection . status ( ) === "connected" )
198- // Discovery only runs when the stream is down, never while connected.
199- expect ( calls ) . toBe ( 0 )
201+ // Reconnection only runs when the stream is down, never while connected.
202+ expect ( attempts ) . toEqual ( [ ] )
200203 events . disconnect ( )
201- await wait ( ( ) => sdk . connection . status ( ) === "connected" && calls > 0 )
204+ await wait ( ( ) => sdk . connection . status ( ) === "connected" && attempts . length > 0 )
202205 replacementEvents . emit ( event ( vcs ( "rediscovered" ) , { directory : "/tmp/rediscovered" } ) )
203206 await wait ( ( ) => seen . some ( ( item ) => item . type === "vcs.branch.updated" && item . data . branch === "rediscovered" ) )
204207
205208 expect ( sdk . client ) . toBe ( replacement . client )
206209 expect ( sdk . api ) . toBe ( replacement . api )
210+ expect ( attempts ) . toEqual ( [ 1 ] )
207211 const history = sdk . connection . internal . history ( )
208212 expect ( history . map ( ( event ) => [ event . data . status , event . data . attempt ] ) ) . toEqual ( [
209213 [ "connecting" , 0 ] ,
@@ -218,7 +222,7 @@ describe("useEvent", () => {
218222 }
219223 } )
220224
221- test ( "keeps the current client when discovery fails" , async ( ) => {
225+ test ( "keeps the current client when reconnection fails" , async ( ) => {
222226 let calls = 0
223227 const { app, events, sdk, seen } = await mount ( async ( ) => {
224228 calls += 1
@@ -229,7 +233,7 @@ describe("useEvent", () => {
229233 await wait ( ( ) => sdk . connection . status ( ) === "connected" )
230234 const original = sdk . client
231235 events . disconnect ( )
232- // Discovery rejects; the loop retries against the last known transport,
236+ // Reconnection rejects; the loop retries against the last known transport,
233237 // which succeeds once the fixture accepts the reconnect.
234238 await wait ( ( ) => calls > 0 && sdk . connection . status ( ) === "connected" )
235239 events . emit ( event ( vcs ( "recovered" ) , { directory : "/tmp/recovered" } ) )
0 commit comments