@@ -143,13 +143,24 @@ describe('ReactSDKClient', () => {
143
143
} ) ;
144
144
145
145
it ( 'fulfills the returned promise with success: true when a user is set' , async ( ) => {
146
- instance . setUser ( {
146
+ jest . spyOn ( instance , 'fetchQualifiedSegments' ) . mockImplementation ( async ( ) => true ) ;
147
+ await instance . setUser ( {
147
148
id : 'user12345' ,
148
149
} ) ;
149
150
const result = await instance . onReady ( ) ;
150
151
expect ( result . success ) . toBe ( true ) ;
151
152
} ) ;
152
153
154
+ it ( 'fulfills the returned promise with success: false when fetchqualifiedsegment is false' , async ( ) => {
155
+ jest . spyOn ( instance , 'fetchQualifiedSegments' ) . mockImplementation ( async ( ) => false ) ;
156
+
157
+ await instance . setUser ( {
158
+ id : 'user12345' ,
159
+ } ) ;
160
+ const result = await instance . onReady ( ) ;
161
+ expect ( result . success ) . toBe ( false ) ;
162
+ } ) ;
163
+
153
164
describe ( 'if Optimizely client is null' , ( ) => {
154
165
beforeEach ( ( ) => {
155
166
// Mocks dataReadyPromise value instead of _client = null because test initialization of instance causes dataReadyPromise to return { success: true }
@@ -164,7 +175,7 @@ describe('ReactSDKClient', () => {
164
175
} ) ;
165
176
166
177
it ( 'fulfills the returned promise with success: false when a user is set' , async ( ) => {
167
- instance . setUser ( {
178
+ await instance . setUser ( {
168
179
id : 'user12345' ,
169
180
} ) ;
170
181
const result = await instance . onReady ( ) ;
@@ -178,7 +189,7 @@ describe('ReactSDKClient', () => {
178
189
resolveInnerClientOnReady = res ;
179
190
} ) ;
180
191
mockInnerClientOnReady . mockReturnValueOnce ( mockReadyPromise ) ;
181
- instance . setUser ( {
192
+ await instance . setUser ( {
182
193
id : 'user999' ,
183
194
} ) ;
184
195
resolveInnerClientOnReady ! ( { success : true } ) ;
@@ -194,7 +205,8 @@ describe('ReactSDKClient', () => {
194
205
resolveInnerClientOnReady = res ;
195
206
} ) ;
196
207
mockInnerClientOnReady . mockReturnValueOnce ( mockReadyPromise ) ;
197
- instance . setUser ( {
208
+ jest . spyOn ( instance , 'fetchQualifiedSegments' ) . mockImplementation ( async ( ) => true ) ;
209
+ await instance . setUser ( {
198
210
id : 'user999' ,
199
211
} ) ;
200
212
resolveInnerClientOnReady ! ( { success : true } ) ;
@@ -204,9 +216,9 @@ describe('ReactSDKClient', () => {
204
216
} ) ;
205
217
206
218
describe ( 'setUser' , ( ) => {
207
- it ( 'updates the user object with id and attributes' , ( ) => {
219
+ it ( 'updates the user object with id and attributes' , async ( ) => {
208
220
const instance = createInstance ( config ) ;
209
- instance . setUser ( {
221
+ await instance . setUser ( {
210
222
id : 'xxfueaojfe8&86' ,
211
223
attributes : {
212
224
foo : 'bar' ,
@@ -220,11 +232,11 @@ describe('ReactSDKClient', () => {
220
232
} ) ;
221
233
} ) ;
222
234
223
- it ( 'adds and removes update handlers' , ( ) => {
235
+ it ( 'adds and removes update handlers' , async ( ) => {
224
236
const instance = createInstance ( config ) ;
225
237
const onUserUpdateListener = jest . fn ( ) ;
226
238
const dispose = instance . onUserUpdate ( onUserUpdateListener ) ;
227
- instance . setUser ( {
239
+ await instance . setUser ( {
228
240
id : 'newUser' ,
229
241
} ) ;
230
242
expect ( onUserUpdateListener ) . toBeCalledTimes ( 1 ) ;
@@ -233,17 +245,32 @@ describe('ReactSDKClient', () => {
233
245
attributes : { } ,
234
246
} ) ;
235
247
dispose ( ) ;
236
- instance . setUser ( {
248
+ await instance . setUser ( {
237
249
id : 'newUser2' ,
238
250
} ) ;
239
251
expect ( onUserUpdateListener ) . toBeCalledTimes ( 1 ) ;
240
252
} ) ;
241
253
254
+ it ( 'calls fetchqualifiedsegements internally on each setuser call' , async ( ) => {
255
+ const instance = createInstance ( config ) ;
256
+ jest . spyOn ( instance , 'fetchQualifiedSegments' ) . mockImplementation ( async ( ) => true ) ;
257
+
258
+ await instance . setUser ( {
259
+ id : 'xxfueaojfe8&86' ,
260
+ } ) ;
261
+
262
+ await instance . setUser ( {
263
+ id : 'xxfueaojfe8&87' ,
264
+ } ) ;
265
+
266
+ expect ( instance . fetchQualifiedSegments ) . toBeCalledTimes ( 2 ) ;
267
+ } ) ;
268
+
242
269
describe ( 'pre-set user and user overrides' , ( ) => {
243
270
let instance : ReactSDKClient ;
244
- beforeEach ( ( ) => {
271
+ beforeEach ( async ( ) => {
245
272
instance = createInstance ( config ) ;
246
- instance . setUser ( {
273
+ await instance . setUser ( {
247
274
id : 'user1' ,
248
275
attributes : {
249
276
foo : 'bar' ,
@@ -898,7 +925,7 @@ describe('ReactSDKClient', () => {
898
925
} ) ;
899
926
900
927
describe ( 'if Optimizely client is null' , ( ) => {
901
- it ( 'does not return an object with variables of all types returned from the inner sdk ' , ( ) => {
928
+ it ( 'does not return an object with variables of all types returned from the inner sdk ' , async ( ) => {
902
929
( mockInnerClient . getOptimizelyConfig as jest . Mock ) . mockReturnValue ( {
903
930
featuresMap : {
904
931
feat1 : {
@@ -956,7 +983,7 @@ describe('ReactSDKClient', () => {
956
983
}
957
984
) ;
958
985
const instance = createInstance ( config ) ;
959
- instance . setUser ( {
986
+ await instance . setUser ( {
960
987
id : 'user1123' ,
961
988
} ) ;
962
989
// @ts -ignore
@@ -966,7 +993,7 @@ describe('ReactSDKClient', () => {
966
993
} ) ;
967
994
} ) ;
968
995
969
- it ( 'returns an object with variables of all types returned from the inner sdk ' , ( ) => {
996
+ it ( 'returns an object with variables of all types returned from the inner sdk ' , async ( ) => {
970
997
( mockInnerClient . getOptimizelyConfig as jest . Mock ) . mockReturnValue ( {
971
998
featuresMap : {
972
999
feat1 : {
@@ -1024,7 +1051,7 @@ describe('ReactSDKClient', () => {
1024
1051
}
1025
1052
) ;
1026
1053
const instance = createInstance ( config ) ;
1027
- instance . setUser ( {
1054
+ await instance . setUser ( {
1028
1055
id : 'user1123' ,
1029
1056
} ) ;
1030
1057
const result = instance . getFeatureVariables ( 'feat1' ) ;
@@ -1042,7 +1069,7 @@ describe('ReactSDKClient', () => {
1042
1069
1043
1070
describe ( 'getAllFeatureVariables' , ( ) => {
1044
1071
describe ( 'if Optimizely client is null' , ( ) => {
1045
- it ( 'does not return an object with variables of all types returned from the inner sdk ' , ( ) => {
1072
+ it ( 'does not return an object with variables of all types returned from the inner sdk ' , async ( ) => {
1046
1073
const anyClient = mockInnerClient . getAllFeatureVariables as jest . Mock ;
1047
1074
anyClient . mockReturnValue ( {
1048
1075
bvar : true ,
@@ -1056,14 +1083,14 @@ describe('ReactSDKClient', () => {
1056
1083
const instance = createInstance ( config ) ;
1057
1084
// @ts -ignore
1058
1085
instance . _client = null ;
1059
- instance . setUser ( {
1086
+ await instance . setUser ( {
1060
1087
id : 'user1123' ,
1061
1088
} ) ;
1062
1089
const result = instance . getAllFeatureVariables ( 'feat1' , 'user1' ) ;
1063
1090
expect ( result ) . toEqual ( { } ) ;
1064
1091
} ) ;
1065
1092
1066
- it ( 'cannot use pre-set and override user for getAllFeatureVariables' , ( ) => {
1093
+ it ( 'cannot use pre-set and override user for getAllFeatureVariables' , async ( ) => {
1067
1094
const mockFn = mockInnerClient . getAllFeatureVariables as jest . Mock ;
1068
1095
mockFn . mockReturnValue ( {
1069
1096
bvar : true ,
@@ -1077,7 +1104,7 @@ describe('ReactSDKClient', () => {
1077
1104
const instance = createInstance ( config ) ;
1078
1105
// @ts -ignore
1079
1106
instance . _client = null ;
1080
- instance . setUser ( {
1107
+ await instance . setUser ( {
1081
1108
id : 'user1' ,
1082
1109
attributes : {
1083
1110
foo : 'bar' ,
@@ -1096,7 +1123,7 @@ describe('ReactSDKClient', () => {
1096
1123
expect ( result ) . toEqual ( { } ) ;
1097
1124
} ) ;
1098
1125
1099
- it ( 'returns an object with variables of all types returned from the inner sdk ' , ( ) => {
1126
+ it ( 'returns an object with variables of all types returned from the inner sdk ' , async ( ) => {
1100
1127
const anyClient = mockInnerClient . getAllFeatureVariables as jest . Mock ;
1101
1128
anyClient . mockReturnValue ( {
1102
1129
bvar : true ,
@@ -1108,7 +1135,7 @@ describe('ReactSDKClient', () => {
1108
1135
} ,
1109
1136
} ) ;
1110
1137
const instance = createInstance ( config ) ;
1111
- instance . setUser ( {
1138
+ await instance . setUser ( {
1112
1139
id : 'user1123' ,
1113
1140
} ) ;
1114
1141
const result = instance . getAllFeatureVariables ( 'feat1' , 'user1' ) ;
@@ -1123,7 +1150,7 @@ describe('ReactSDKClient', () => {
1123
1150
} ) ;
1124
1151
} ) ;
1125
1152
1126
- it ( 'can use pre-set and override user for getAllFeatureVariables' , ( ) => {
1153
+ it ( 'can use pre-set and override user for getAllFeatureVariables' , async ( ) => {
1127
1154
const mockFn = mockInnerClient . getAllFeatureVariables as jest . Mock ;
1128
1155
mockFn . mockReturnValue ( {
1129
1156
bvar : true ,
@@ -1135,7 +1162,7 @@ describe('ReactSDKClient', () => {
1135
1162
} ,
1136
1163
} ) ;
1137
1164
const instance = createInstance ( config ) ;
1138
- instance . setUser ( {
1165
+ await instance . setUser ( {
1139
1166
id : 'user1' ,
1140
1167
attributes : {
1141
1168
foo : 'bar' ,
@@ -1200,7 +1227,7 @@ describe('ReactSDKClient', () => {
1200
1227
} ) ;
1201
1228
1202
1229
it ( 'should return false if fetch fails' , async ( ) => {
1203
- instance . setUser ( {
1230
+ await instance . setUser ( {
1204
1231
id : 'user1' ,
1205
1232
} ) ;
1206
1233
@@ -1211,7 +1238,7 @@ describe('ReactSDKClient', () => {
1211
1238
} ) ;
1212
1239
1213
1240
it ( 'should return true if fetch successful' , async ( ) => {
1214
- instance . setUser ( {
1241
+ await instance . setUser ( {
1215
1242
id : 'user1' ,
1216
1243
} ) ;
1217
1244
@@ -1224,9 +1251,9 @@ describe('ReactSDKClient', () => {
1224
1251
1225
1252
describe ( 'onForcedVariationsUpdate' , ( ) => {
1226
1253
let instance : ReactSDKClient ;
1227
- beforeEach ( ( ) => {
1254
+ beforeEach ( async ( ) => {
1228
1255
instance = createInstance ( config ) ;
1229
- instance . setUser ( {
1256
+ await instance . setUser ( {
1230
1257
id : 'xxfueaojfe8&86' ,
1231
1258
attributes : {
1232
1259
foo : 'bar' ,
@@ -1278,10 +1305,10 @@ describe('ReactSDKClient', () => {
1278
1305
} ) ;
1279
1306
1280
1307
describe ( 'if Optimizely client is null' , ( ) => {
1281
- it ( 'should return false' , ( ) => {
1308
+ it ( 'should return false' , async ( ) => {
1282
1309
// @ts -ignore
1283
1310
instance . _client = null ;
1284
- instance . setUser ( {
1311
+ await instance . setUser ( {
1285
1312
id : 'user1' ,
1286
1313
} ) ;
1287
1314
const mockFn = mockOptimizelyUserContext . removeAllForcedDecisions as jest . Mock ;
@@ -1295,8 +1322,8 @@ describe('ReactSDKClient', () => {
1295
1322
} ) ;
1296
1323
} ) ;
1297
1324
1298
- it ( 'should return true if user context has been set ' , ( ) => {
1299
- instance . setUser ( {
1325
+ it ( 'should return true if user context has been set ' , async ( ) => {
1326
+ await instance . setUser ( {
1300
1327
id : 'user1' ,
1301
1328
} ) ;
1302
1329
const mockFn = mockOptimizelyUserContext . removeAllForcedDecisions as jest . Mock ;
@@ -1312,9 +1339,9 @@ describe('ReactSDKClient', () => {
1312
1339
1313
1340
describe ( 'setForcedDecision' , ( ) => {
1314
1341
let instance : ReactSDKClient ;
1315
- beforeEach ( ( ) => {
1342
+ beforeEach ( async ( ) => {
1316
1343
instance = createInstance ( config ) ;
1317
- instance . setUser ( {
1344
+ await instance . setUser ( {
1318
1345
id : 'user1' ,
1319
1346
attributes : {
1320
1347
foo : 'bar' ,
@@ -1421,9 +1448,9 @@ describe('ReactSDKClient', () => {
1421
1448
1422
1449
describe ( 'removeForcedDecision' , ( ) => {
1423
1450
let instance : ReactSDKClient ;
1424
- beforeEach ( ( ) => {
1451
+ beforeEach ( async ( ) => {
1425
1452
instance = createInstance ( config ) ;
1426
- instance . setUser ( {
1453
+ await instance . setUser ( {
1427
1454
id : 'user1' ,
1428
1455
attributes : {
1429
1456
foo : 'bar' ,
0 commit comments