2
2
* @jest -environment jsdom
3
3
*/
4
4
5
+ import { EppoValue } from '@eppo/js-client-sdk-common/dist/eppo_value' ;
5
6
import * as td from 'testdouble' ;
6
7
import mock from 'xhr-mock' ;
7
8
8
9
import {
9
10
IAssignmentTestCase ,
11
+ ValueTestType ,
10
12
readAssignmentTestData ,
11
13
readMockRacResponse ,
12
14
} from '../test/testHelpers' ;
@@ -207,22 +209,37 @@ describe('EppoJSClient E2E test', () => {
207
209
'test variation assignment splits' ,
208
210
( {
209
211
experiment,
210
- valueType = 'string' ,
212
+ valueType = ValueTestType . StringType ,
211
213
subjects,
212
214
subjectsWithAttributes,
213
215
expectedAssignments,
214
216
} : IAssignmentTestCase ) => {
215
- `---- Test Case for ${ experiment } Experiment ----` ;
216
-
217
- if ( valueType === 'string' ) {
218
- const assignments = subjectsWithAttributes
219
- ? getAssignmentsWithSubjectAttributes ( subjectsWithAttributes , experiment )
220
- : getAssignments ( subjects , experiment ) ;
221
- expect ( assignments ) . toEqual ( expectedAssignments ) ;
222
- expect ( assignments . length ) . toBeGreaterThan ( 0 ) ;
223
- } else {
224
- // skip for now
225
- expect ( true ) . toBe ( true ) ;
217
+ console . log ( `---- Test Case for ${ experiment } Experiment ----` ) ;
218
+ const assignments = subjectsWithAttributes
219
+ ? getAssignmentsWithSubjectAttributes ( subjectsWithAttributes , experiment , valueType )
220
+ : getAssignments ( subjects , experiment , valueType ) ;
221
+
222
+ switch ( valueType ) {
223
+ case ValueTestType . BoolType : {
224
+ const boolAssignments = assignments . map ( ( a ) => a ?. boolValue ?? null ) ;
225
+ expect ( boolAssignments ) . toEqual ( expectedAssignments ) ;
226
+ break ;
227
+ }
228
+ case ValueTestType . NumericType : {
229
+ const numericAssignments = assignments . map ( ( a ) => a ?. numericValue ?? null ) ;
230
+ expect ( numericAssignments ) . toEqual ( expectedAssignments ) ;
231
+ break ;
232
+ }
233
+ case ValueTestType . StringType : {
234
+ const stringAssignments = assignments . map ( ( a ) => a ?. stringValue ?? null ) ;
235
+ expect ( stringAssignments ) . toEqual ( expectedAssignments ) ;
236
+ break ;
237
+ }
238
+ case ValueTestType . JSONType : {
239
+ const jsonStringAssignments = assignments . map ( ( a ) => a ?. stringValue ?? null ) ;
240
+ expect ( jsonStringAssignments ) . toEqual ( expectedAssignments ) ;
241
+ break ;
242
+ }
226
243
}
227
244
} ,
228
245
) ;
@@ -232,9 +249,35 @@ describe('EppoJSClient E2E test', () => {
232
249
} ) ;
233
250
} ) ;
234
251
235
- function getAssignments ( subjects : string [ ] , experiment : string ) : ( string | null ) [ ] {
252
+ function getAssignments (
253
+ subjects : string [ ] ,
254
+ experiment : string ,
255
+ valueTestType : ValueTestType = ValueTestType . StringType ,
256
+ ) : ( EppoValue | null ) [ ] {
236
257
return subjects . map ( ( subjectKey ) => {
237
- return globalClient . getAssignment ( subjectKey , experiment ) ;
258
+ switch ( valueTestType ) {
259
+ case ValueTestType . BoolType : {
260
+ const ba = globalClient . getBoolAssignment ( subjectKey , experiment ) ;
261
+ if ( ba === null ) return null ;
262
+ return EppoValue . Bool ( ba ) ;
263
+ }
264
+ case ValueTestType . NumericType : {
265
+ const na = globalClient . getNumericAssignment ( subjectKey , experiment ) ;
266
+ if ( na === null ) return null ;
267
+ return EppoValue . Numeric ( na ) ;
268
+ }
269
+ case ValueTestType . StringType : {
270
+ const sa = globalClient . getStringAssignment ( subjectKey , experiment ) ;
271
+ if ( sa === null ) return null ;
272
+ return EppoValue . String ( sa ) ;
273
+ }
274
+ case ValueTestType . JSONType : {
275
+ const sa = globalClient . getJSONStringAssignment ( subjectKey , experiment ) ;
276
+ const oa = globalClient . getParsedJSONAssignment ( subjectKey , experiment ) ;
277
+ if ( oa == null || sa === null ) return null ;
278
+ return EppoValue . JSON ( sa , oa ) ;
279
+ }
280
+ }
238
281
} ) ;
239
282
}
240
283
@@ -245,9 +288,52 @@ describe('EppoJSClient E2E test', () => {
245
288
subjectAttributes : Record < string , any > ;
246
289
} [ ] ,
247
290
experiment : string ,
248
- ) : ( string | null ) [ ] {
291
+ valueTestType : ValueTestType = ValueTestType . StringType ,
292
+ ) : ( EppoValue | null ) [ ] {
249
293
return subjectsWithAttributes . map ( ( subject ) => {
250
- return globalClient . getAssignment ( subject . subjectKey , experiment , subject . subjectAttributes ) ;
294
+ switch ( valueTestType ) {
295
+ case ValueTestType . BoolType : {
296
+ const ba = globalClient . getBoolAssignment (
297
+ subject . subjectKey ,
298
+ experiment ,
299
+ subject . subjectAttributes ,
300
+ ) ;
301
+ if ( ba === null ) return null ;
302
+ return EppoValue . Bool ( ba ) ;
303
+ }
304
+ case ValueTestType . NumericType : {
305
+ const na = globalClient . getNumericAssignment (
306
+ subject . subjectKey ,
307
+ experiment ,
308
+ subject . subjectAttributes ,
309
+ ) ;
310
+ if ( na === null ) return null ;
311
+ return EppoValue . Numeric ( na ) ;
312
+ }
313
+ case ValueTestType . StringType : {
314
+ const sa = globalClient . getStringAssignment (
315
+ subject . subjectKey ,
316
+ experiment ,
317
+ subject . subjectAttributes ,
318
+ ) ;
319
+ if ( sa === null ) return null ;
320
+ return EppoValue . String ( sa ) ;
321
+ }
322
+ case ValueTestType . JSONType : {
323
+ const sa = globalClient . getJSONStringAssignment (
324
+ subject . subjectKey ,
325
+ experiment ,
326
+ subject . subjectAttributes ,
327
+ ) ;
328
+ const oa = globalClient . getParsedJSONAssignment (
329
+ subject . subjectKey ,
330
+ experiment ,
331
+ subject . subjectAttributes ,
332
+ ) ;
333
+ if ( oa == null || sa === null ) return null ;
334
+ return EppoValue . JSON ( sa , oa ) ;
335
+ }
336
+ }
251
337
} ) ;
252
338
}
253
339
} ) ;
0 commit comments