@@ -34,14 +34,12 @@ function validateTreatments({ treatments, isReady, isReadyFromCache }: ISplitTre
3434 }
3535}
3636
37- test ( 'useSplitTreatments' , async ( ) => {
37+ test ( 'useSplitTreatments must update on SDK events ' , async ( ) => {
3838 const outerFactory = SplitSdk ( sdkBrowser ) ;
3939 const mainClient = outerFactory . client ( ) as any ;
4040 const user2Client = outerFactory . client ( 'user_2' ) as any ;
4141
4242 let countSplitContext = 0 , countSplitTreatments = 0 , countUseSplitTreatments = 0 , countUseSplitTreatmentsUser2 = 0 , countUseSplitTreatmentsUser2WithUpdate = 0 ;
43- const lastUpdateSetUser2 = new Set < number > ( ) ;
44- const lastUpdateSetUser2WithUpdate = new Set < number > ( ) ;
4543
4644 render (
4745 < SplitFactory factory = { outerFactory } >
@@ -63,31 +61,26 @@ test('useSplitTreatments', async () => {
6361 const context = useSplitTreatments ( [ 'split_test' ] , undefined , 'user_2' ) ;
6462 expect ( context . client ) . toBe ( user2Client ) ;
6563 validateTreatments ( context ) ;
66- lastUpdateSetUser2 . add ( context . lastUpdate ) ;
6764 countUseSplitTreatmentsUser2 ++ ;
6865 return null ;
6966 } ) }
7067 { React . createElement ( ( ) => {
7168 const context = useSplitTreatments ( [ 'split_test' ] , undefined , 'user_2' , { updateOnSdkUpdate : true } ) ;
7269 expect ( context . client ) . toBe ( user2Client ) ;
7370 validateTreatments ( context ) ;
74- lastUpdateSetUser2WithUpdate . add ( context . lastUpdate ) ;
7571 countUseSplitTreatmentsUser2WithUpdate ++ ;
7672 return null ;
7773 } ) }
7874 </ >
7975 </ SplitFactory >
8076 ) ;
8177
82- // Adding a delay between events to make sure they are processed with a different lastUpdate timestamp.
83- act ( ( ) => mainClient . __emitter__ . emit ( Event . SDK_READY_FROM_CACHE ) ) ;
84- act ( ( ) => user2Client . __emitter__ . emit ( Event . SDK_READY_FROM_CACHE ) ) ;
85- await new Promise ( resolve => setTimeout ( resolve , 10 ) ) ;
86- act ( ( ) => mainClient . __emitter__ . emit ( Event . SDK_READY ) ) ;
87- act ( ( ) => user2Client . __emitter__ . emit ( Event . SDK_READY ) ) ;
88- await new Promise ( resolve => setTimeout ( resolve , 10 ) ) ;
89- act ( ( ) => mainClient . __emitter__ . emit ( Event . SDK_UPDATE ) ) ;
90- act ( ( ) => user2Client . __emitter__ . emit ( Event . SDK_UPDATE ) ) ;
78+ await act ( ( ) => mainClient . __emitter__ . emit ( Event . SDK_READY_FROM_CACHE ) ) ;
79+ await act ( ( ) => mainClient . __emitter__ . emit ( Event . SDK_READY ) ) ;
80+ await act ( ( ) => mainClient . __emitter__ . emit ( Event . SDK_UPDATE ) ) ;
81+ await act ( ( ) => user2Client . __emitter__ . emit ( Event . SDK_READY_FROM_CACHE ) ) ;
82+ await act ( ( ) => user2Client . __emitter__ . emit ( Event . SDK_READY ) ) ;
83+ await act ( ( ) => user2Client . __emitter__ . emit ( Event . SDK_UPDATE ) ) ;
9184
9285 // SplitContext renders 3 times: initially, when ready from cache, and when ready.
9386 expect ( countSplitContext ) . toEqual ( 3 ) ;
@@ -100,10 +93,8 @@ test('useSplitTreatments', async () => {
10093
10194 // If useSplitTreatments uses a different client than the context one, it renders when the context renders and when the new client is ready and ready from cache.
10295 expect ( countUseSplitTreatmentsUser2 ) . toEqual ( countSplitContext + 2 ) ;
103- expect ( lastUpdateSetUser2 . size ) . toEqual ( 3 ) ;
10496 // If it is used with `updateOnSdkUpdate: true`, it also renders when the client emits an SDK_UPDATE event.
10597 expect ( countUseSplitTreatmentsUser2WithUpdate ) . toEqual ( countSplitContext + 3 ) ;
106- expect ( lastUpdateSetUser2WithUpdate . size ) . toEqual ( 4 ) ;
10798 expect ( user2Client . getTreatmentsWithConfig ) . toHaveBeenCalledTimes ( 5 ) ;
10899 expect ( user2Client . getTreatmentsWithConfig ) . toHaveBeenLastCalledWith ( [ 'split_test' ] , undefined ) ;
109100} ) ;
0 commit comments