@@ -10,6 +10,7 @@ import * as Fiber from "effect/Fiber";
1010import * as Duration from "effect/Duration" ;
1111import * as Effect from "effect/Effect" ;
1212import * as Layer from "effect/Layer" ;
13+ import * as Queue from "effect/Queue" ;
1314import * as Ref from "effect/Ref" ;
1415import * as Schema from "effect/Schema" ;
1516import * as Stream from "effect/Stream" ;
@@ -116,7 +117,19 @@ const decodeProbe = Schema.decodeUnknownSync(
116117) ;
117118const encodeBody = Schema . encodeSync ( Schema . fromJsonString ( Schema . Unknown ) ) ;
118119const makeHubTest = Effect . fn ( "test.makeHubTest" ) ( function * ( failed : string [ ] = [ ] ) {
119- const settings = yield * ServerSettings . ServerSettingsService ;
120+ const baseSettings = yield * ServerSettings . ServerSettingsService ;
121+ const changeObserved = yield * Deferred . make < void > ( ) ;
122+ const changes = yield * Queue . unbounded < import ( "@t3tools/contracts" ) . ServerSettings > ( ) ;
123+ const settings = {
124+ ...baseSettings ,
125+ streamChanges : Stream . fromQueue ( changes ) . pipe (
126+ Stream . flatMap ( ( next ) =>
127+ Stream . make ( next ) . pipe ( Stream . ensuring ( Deferred . succeed ( changeObserved , undefined ) ) ) ,
128+ ) ,
129+ ) ,
130+ updateSettings : ( ...args : Parameters < typeof baseSettings . updateSettings > ) =>
131+ baseSettings . updateSettings ( ...args ) . pipe ( Effect . tap ( ( next ) => Queue . offer ( changes , next ) ) ) ,
132+ } ;
120133 const readStarted = yield * Deferred . make < void > ( ) ;
121134 const releaseRead = yield * Deferred . make < void > ( ) ;
122135 const mode = yield * Ref . make ( {
@@ -196,7 +209,7 @@ const makeHubTest = Effect.fn("test.makeHubTest")(function* (failed: string[] =
196209 Stream . filter ( ( snapshots ) => snapshots . length === 1 ) ,
197210 Stream . runHead ,
198211 ) ;
199- return { sources, settings, mode, readStarted, releaseRead } ;
212+ return { sources, settings, mode, readStarted, releaseRead, changeObserved } ;
200213} ) ;
201214const provideHubTest = < A , E > (
202215 effect : Effect . Effect < A , E , ServerSettings . ServerSettingsService | import ( "effect/Scope" ) . Scope > ,
@@ -328,7 +341,8 @@ it.effect(
328341 ( ) =>
329342 provideHubTest (
330343 Effect . gen ( function * ( ) {
331- const { sources, settings, mode, readStarted, releaseRead } = yield * makeHubTest ( ) ;
344+ const { sources, settings, mode, readStarted, releaseRead, changeObserved } =
345+ yield * makeHubTest ( ) ;
332346 yield * Ref . update ( mode , ( m ) => ( { ...m , blocked : true , listFailed : true } ) ) ;
333347 const pending = yield * sources . refresh . pipe ( Effect . forkChild ) ;
334348 yield * Deferred . await ( readStarted ) ;
@@ -339,6 +353,7 @@ it.effect(
339353 yield * Ref . update ( mode , ( m ) => ( { ...m , blocked : false } ) ) ;
340354 yield * Deferred . succeed ( releaseRead , undefined ) ;
341355 yield * Fiber . join ( pending ) ;
356+ yield * Deferred . await ( changeObserved ) ;
342357 yield * sources . refresh ;
343358 expect ( ( yield * sources . current ) [ 0 ] ?. accounts ) . toEqual ( [ ] ) ;
344359 } ) ,
0 commit comments