@@ -16,7 +16,7 @@ import { SplitTreatments } from '../SplitTreatments';
1616import { SplitContext } from '../SplitContext' ;
1717import { ISplitTreatmentsChildProps } from '../types' ;
1818
19- function validateTreatments ( { treatments, isReady, isReadyFromCache} : ISplitTreatmentsChildProps ) {
19+ function validateTreatments ( { treatments, isReady, isReadyFromCache } : ISplitTreatmentsChildProps ) {
2020 if ( isReady || isReadyFromCache ) {
2121 expect ( treatments ) . toEqual ( {
2222 split_test : {
@@ -34,12 +34,12 @@ function validateTreatments({ treatments, isReady, isReadyFromCache}: ISplitTrea
3434 }
3535}
3636
37- test ( 'useSplitTreatments' , ( ) => {
37+ test ( 'useSplitTreatments' , async ( ) => {
3838 const outerFactory = SplitSdk ( sdkBrowser ) ;
3939 const mainClient = outerFactory . client ( ) as any ;
4040 const user2Client = outerFactory . client ( 'user_2' ) as any ;
4141
42- let countSplitContext = 0 , countSplitTreatments = 0 , countUseSplitTreatments = 0 , countUseSplitTreatmentsUser2 = 0 ;
42+ let countSplitContext = 0 , countSplitTreatments = 0 , countUseSplitTreatments = 0 , countUseSplitTreatmentsUser2 = 0 , countUseSplitTreatmentsUser2WithUpdate = 0 ;
4343
4444 render (
4545 < SplitFactory factory = { outerFactory } >
@@ -51,7 +51,7 @@ test('useSplitTreatments', () => {
5151 { ( ) => { countSplitTreatments ++ ; return null } }
5252 </ SplitTreatments >
5353 { React . createElement ( ( ) => {
54- const context = useSplitTreatments ( [ 'split_test' ] , { att1 : 'att1' } ) ;
54+ const context = useSplitTreatments ( [ 'split_test' ] , { att1 : 'att1' } ) ;
5555 expect ( context . client ) . toBe ( mainClient ) ; // Assert that the main client was retrieved.
5656 validateTreatments ( context ) ;
5757 countUseSplitTreatments ++ ;
@@ -64,16 +64,24 @@ test('useSplitTreatments', () => {
6464 countUseSplitTreatmentsUser2 ++ ;
6565 return null ;
6666 } ) }
67+ { React . createElement ( ( ) => {
68+ const context = useSplitTreatments ( [ 'split_test' ] , undefined , 'user_2' , { updateOnSdkUpdate : true } ) ;
69+ expect ( context . client ) . toBe ( user2Client ) ;
70+ validateTreatments ( context ) ;
71+ countUseSplitTreatmentsUser2WithUpdate ++ ;
72+ return null ;
73+ } ) }
6774 </ >
6875 </ SplitFactory >
6976 ) ;
7077
71- act ( ( ) => mainClient . __emitter__ . emit ( Event . SDK_READY_FROM_CACHE ) ) ;
72- act ( ( ) => mainClient . __emitter__ . emit ( Event . SDK_READY ) ) ;
73- act ( ( ) => mainClient . __emitter__ . emit ( Event . SDK_UPDATE ) ) ;
74- act ( ( ) => user2Client . __emitter__ . emit ( Event . SDK_READY_FROM_CACHE ) ) ;
75- act ( ( ) => user2Client . __emitter__ . emit ( Event . SDK_READY ) ) ;
76- act ( ( ) => user2Client . __emitter__ . emit ( Event . SDK_UPDATE ) ) ;
78+ // Awaiting to make sure each event is processed with a different lastUpdate timestamp.
79+ await act ( ( ) => mainClient . __emitter__ . emit ( Event . SDK_READY_FROM_CACHE ) ) ;
80+ await act ( ( ) => mainClient . __emitter__ . emit ( Event . SDK_READY ) ) ;
81+ await act ( ( ) => mainClient . __emitter__ . emit ( Event . SDK_UPDATE ) ) ;
82+ await act ( ( ) => user2Client . __emitter__ . emit ( Event . SDK_READY_FROM_CACHE ) ) ;
83+ await act ( ( ) => user2Client . __emitter__ . emit ( Event . SDK_READY ) ) ;
84+ await act ( ( ) => user2Client . __emitter__ . emit ( Event . SDK_UPDATE ) ) ;
7785
7886 // SplitContext renders 3 times: initially, when ready from cache, and when ready.
7987 expect ( countSplitContext ) . toEqual ( 3 ) ;
@@ -86,6 +94,8 @@ test('useSplitTreatments', () => {
8694
8795 // 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.
8896 expect ( countUseSplitTreatmentsUser2 ) . toEqual ( countSplitContext + 2 ) ;
89- expect ( user2Client . getTreatmentsWithConfig ) . toHaveBeenCalledTimes ( 2 ) ;
97+ // If it is used with `updateOnSdkUpdate: true`, it also renders when the client emits an SDK_UPDATE event.
98+ expect ( countUseSplitTreatmentsUser2WithUpdate ) . toEqual ( countSplitContext + 3 ) ;
99+ expect ( user2Client . getTreatmentsWithConfig ) . toHaveBeenCalledTimes ( 5 ) ;
90100 expect ( user2Client . getTreatmentsWithConfig ) . toHaveBeenLastCalledWith ( [ 'split_test' ] , undefined ) ;
91101} ) ;
0 commit comments