@@ -159,8 +159,8 @@ def test_init(self):
159
159
self .assertEqual (expected_variation_key_map , self .project_config .variation_key_map )
160
160
self .assertEqual (expected_variation_id_map , self .project_config .variation_id_map )
161
161
162
- def test_init__with_more_fields (self ):
163
- """ Test that no issues occur on creating object with datafile consisting of more fields . """
162
+ def test_init__with_v3_datafile (self ):
163
+ """ Test that on creating object, properties are initiated correctly for version 3 datafile . """
164
164
165
165
# Adding some additional fields like live variables and IP anonymization
166
166
config_dict = {
@@ -172,6 +172,21 @@ def test_init__with_more_fields(self):
172
172
'key' : 'is_working' ,
173
173
'defaultValue' : 'true' ,
174
174
'type' : 'boolean' ,
175
+ }, {
176
+ 'id' : '128' ,
177
+ 'key' : 'environment' ,
178
+ 'defaultValue' : 'devel' ,
179
+ 'type' : 'string' ,
180
+ }, {
181
+ 'id' : '129' ,
182
+ 'key' : 'number_of_days' ,
183
+ 'defaultValue' : '192' ,
184
+ 'type' : 'integer' ,
185
+ }, {
186
+ 'id' : '130' ,
187
+ 'key' : 'significance_value' ,
188
+ 'defaultValue' : '0.00098' ,
189
+ 'type' : 'double' ,
175
190
}],
176
191
'events' : [{
177
192
'key' : 'test_event' ,
@@ -230,11 +245,29 @@ def test_init__with_more_fields(self):
230
245
'variations' : [{
231
246
'key' : 'group_exp_1_control' ,
232
247
'id' : '28901' ,
233
- 'variables' : []
248
+ 'variables' : [{
249
+ 'id' : '128' ,
250
+ 'value' : 'prod'
251
+ }, {
252
+ 'id' : '129' ,
253
+ 'value' : '1772'
254
+ }, {
255
+ 'id' : '130' ,
256
+ 'value' : '1.22992'
257
+ }]
234
258
}, {
235
259
'key' : 'group_exp_1_variation' ,
236
260
'id' : '28902' ,
237
- 'variables' : []
261
+ 'variables' : [{
262
+ 'id' : '128' ,
263
+ 'value' : 'stage'
264
+ }, {
265
+ 'id' : '129' ,
266
+ 'value' : '112'
267
+ }, {
268
+ 'id' : '130' ,
269
+ 'value' : '1.211'
270
+ }]
238
271
}],
239
272
'forcedVariations' : {
240
273
'user_1' : 'group_exp_1_control' ,
@@ -276,7 +309,7 @@ def test_init__with_more_fields(self):
276
309
}],
277
310
'trafficAllocation' : [{
278
311
'entityId' : '32222' ,
279
- " endOfRange" : 3000
312
+ ' endOfRange' : 3000
280
313
}, {
281
314
'entityId' : '32223' ,
282
315
'endOfRange' : 7500
@@ -297,7 +330,197 @@ def test_init__with_more_fields(self):
297
330
}
298
331
299
332
test_obj = optimizely .Optimizely (json .dumps (config_dict ))
300
- self .assertTrue (test_obj .is_valid )
333
+ project_config = test_obj .config
334
+ self .assertEqual (config_dict ['accountId' ], project_config .account_id )
335
+ self .assertEqual (config_dict ['projectId' ], project_config .project_id )
336
+ self .assertEqual (config_dict ['revision' ], project_config .revision )
337
+ self .assertEqual (config_dict ['experiments' ], project_config .experiments )
338
+ self .assertEqual (config_dict ['events' ], project_config .events )
339
+ self .assertEqual (config_dict ['variables' ], project_config .feature_flags )
340
+
341
+ expected_group_id_map = {
342
+ '19228' : entities .Group (
343
+ config_dict ['groups' ][0 ]['id' ],
344
+ config_dict ['groups' ][0 ]['policy' ],
345
+ config_dict ['groups' ][0 ]['experiments' ],
346
+ config_dict ['groups' ][0 ]['trafficAllocation' ]
347
+ )
348
+ }
349
+ expected_experiment_key_map = {
350
+ 'test_experiment' : entities .Experiment (
351
+ '111127' , 'test_experiment' , 'Running' , ['11154' ], [{
352
+ 'key' : 'control' ,
353
+ 'id' : '111128' ,
354
+ 'variables' : [{
355
+ 'id' : '127' ,
356
+ 'value' : 'false'
357
+ }]
358
+ }, {
359
+ 'key' : 'variation' ,
360
+ 'id' : '111129' ,
361
+ 'variables' : [{
362
+ 'id' : '127' ,
363
+ 'value' : 'true'
364
+ }]
365
+ }], {
366
+ 'user_1' : 'control' ,
367
+ 'user_2' : 'control'
368
+ }, [{
369
+ 'entityId' : '111128' ,
370
+ 'endOfRange' : 4000
371
+ }, {
372
+ 'entityId' : '' ,
373
+ 'endOfRange' : 5000
374
+ }, {
375
+ 'entityId' : '111129' ,
376
+ 'endOfRange' : 9000
377
+ }],
378
+ '111182' ),
379
+ 'group_exp_1' : entities .Experiment (
380
+ '32222' , 'group_exp_1' , 'Running' , [], [{
381
+ 'key' : 'group_exp_1_control' ,
382
+ 'id' : '28901' ,
383
+ 'variables' : [{
384
+ 'id' : '128' ,
385
+ 'value' : 'prod'
386
+ }, {
387
+ 'id' : '129' ,
388
+ 'value' : '1772'
389
+ }, {
390
+ 'id' : '130' ,
391
+ 'value' : '1.22992'
392
+ }]
393
+ }, {
394
+ 'key' : 'group_exp_1_variation' ,
395
+ 'id' : '28902' ,
396
+ 'variables' : [{
397
+ 'id' : '128' ,
398
+ 'value' : 'stage'
399
+ }, {
400
+ 'id' : '129' ,
401
+ 'value' : '112'
402
+ }, {
403
+ 'id' : '130' ,
404
+ 'value' : '1.211'
405
+ }]
406
+ }], {
407
+ 'user_1' : 'group_exp_1_control' ,
408
+ 'user_2' : 'group_exp_1_control'
409
+ }, [{
410
+ 'entityId' : '28901' ,
411
+ 'endOfRange' : 3000
412
+ }, {
413
+ 'entityId' : '28902' ,
414
+ 'endOfRange' : 9000
415
+ }], '111183' , groupId = '19228' , groupPolicy = 'random'
416
+ ),
417
+ 'group_exp_2' : entities .Experiment (
418
+ '32223' , 'group_exp_2' , 'Running' , [], [{
419
+ 'key' : 'group_exp_2_control' ,
420
+ 'id' : '28905' ,
421
+ 'variables' : []
422
+ }, {
423
+ 'key' : 'group_exp_2_variation' ,
424
+ 'id' : '28906' ,
425
+ 'variables' : []
426
+ }], {
427
+ 'user_1' : 'group_exp_2_control' ,
428
+ 'user_2' : 'group_exp_2_control'
429
+ }, [{
430
+ 'entityId' : '28905' ,
431
+ 'endOfRange' : 8000
432
+ }, {
433
+ 'entityId' : '28906' ,
434
+ 'endOfRange' : 10000
435
+ }], '111184' , groupId = '19228' , groupPolicy = 'random'
436
+ ),
437
+ }
438
+ expected_experiment_id_map = {
439
+ '111127' : expected_experiment_key_map .get ('test_experiment' ),
440
+ '32222' : expected_experiment_key_map .get ('group_exp_1' ),
441
+ '32223' : expected_experiment_key_map .get ('group_exp_2' )
442
+ }
443
+ expected_event_key_map = {
444
+ 'test_event' : entities .Event ('111095' , 'test_event' , ['111127' ]),
445
+ 'Total Revenue' : entities .Event ('111096' , 'Total Revenue' , ['111127' ])
446
+ }
447
+ expected_attribute_key_map = {
448
+ 'test_attribute' : entities .Attribute ('111094' , 'test_attribute' , segmentId = '11133' )
449
+ }
450
+ expected_audience_id_map = {
451
+ '11154' : entities .Audience (
452
+ '11154' , 'Test attribute users' ,
453
+ '["and", ["or", ["or", {"name": "test_attribute", "type": "custom_attribute", "value": "test_value"}]]]' ,
454
+ conditionStructure = ['and' , ['or' , ['or' , 0 ]]],
455
+ conditionList = [['test_attribute' , 'test_value' ]]
456
+ )
457
+ }
458
+ expected_variation_key_map = {
459
+ 'test_experiment' : {
460
+ 'control' : entities .Variation ('111128' , 'control' , [{'id' : '127' , 'value' : 'false' }], {'is_working' : False }),
461
+ 'variation' : entities .Variation ('111129' , 'variation' , [{'id' : '127' , 'value' : 'true' }], {'is_working' : True })
462
+ },
463
+ 'group_exp_1' : {
464
+ 'group_exp_1_control' : entities .Variation (
465
+ '28901' , 'group_exp_1_control' , [
466
+ {'id' : '128' , 'value' : 'prod' }, {'id' : '129' , 'value' : '1772' }, {'id' : '130' , 'value' : '1.22992' }], {
467
+ 'environment' : 'prod' ,
468
+ 'number_of_days' : 1772 ,
469
+ 'significance_value' : 1.22992
470
+ }),
471
+ 'group_exp_1_variation' : entities .Variation (
472
+ '28902' , 'group_exp_1_variation' , [
473
+ {'id' : '128' , 'value' : 'stage' }, {'id' : '129' , 'value' : '112' }, {'id' : '130' , 'value' : '1.211' }], {
474
+ 'environment' : 'stage' ,
475
+ 'number_of_days' : 112 ,
476
+ 'significance_value' : 1.211
477
+ })
478
+ },
479
+ 'group_exp_2' : {
480
+ 'group_exp_2_control' : entities .Variation ('28905' , 'group_exp_2_control' ),
481
+ 'group_exp_2_variation' : entities .Variation ('28906' , 'group_exp_2_variation' )
482
+ }
483
+ }
484
+ expected_variation_id_map = {
485
+ 'test_experiment' : {
486
+ '111128' : entities .Variation ('111128' , 'control' , [{'id' : '127' , 'value' : 'false' }], {'is_working' : False }),
487
+ '111129' : entities .Variation ('111129' , 'variation' , [{'id' : '127' , 'value' : 'true' }], {'is_working' : True })
488
+ },
489
+ 'group_exp_1' : {
490
+ '28901' : entities .Variation ('28901' , 'group_exp_1_control' , [
491
+ {'id' : '128' , 'value' : 'prod' }, {'id' : '129' , 'value' : '1772' }, {'id' : '130' , 'value' : '1.22992' }], {
492
+ 'environment' : 'prod' ,
493
+ 'number_of_days' : 1772 ,
494
+ 'significance_value' : 1.22992
495
+ }),
496
+ '28902' : entities .Variation ('28902' , 'group_exp_1_variation' , [
497
+ {'id' : '128' , 'value' : 'stage' }, {'id' : '129' , 'value' : '112' }, {'id' : '130' , 'value' : '1.211' }], {
498
+ 'environment' : 'stage' ,
499
+ 'number_of_days' : 112 ,
500
+ 'significance_value' : 1.211
501
+ })
502
+ },
503
+ 'group_exp_2' : {
504
+ '28905' : entities .Variation ('28905' , 'group_exp_2_control' ),
505
+ '28906' : entities .Variation ('28906' , 'group_exp_2_variation' )
506
+ }
507
+ }
508
+ expected_feature_flag_id_map = {
509
+ '127' : entities .FeatureFlag ('127' , 'is_working' , 'boolean' , 'true' ),
510
+ '128' : entities .FeatureFlag ('128' , 'environment' , 'string' , 'devel' ),
511
+ '129' : entities .FeatureFlag ('129' , 'number_of_days' , 'integer' , '192' ),
512
+ '130' : entities .FeatureFlag ('130' , 'significance_value' , 'double' , '0.00098' )
513
+ }
514
+
515
+ self .assertEqual (expected_group_id_map , project_config .group_id_map )
516
+ self .assertEqual (expected_experiment_key_map , project_config .experiment_key_map )
517
+ self .assertEqual (expected_experiment_id_map , project_config .experiment_id_map )
518
+ self .assertEqual (expected_event_key_map , project_config .event_key_map )
519
+ self .assertEqual (expected_attribute_key_map , project_config .attribute_key_map )
520
+ self .assertEqual (expected_audience_id_map , project_config .audience_id_map )
521
+ self .assertEqual (expected_variation_key_map , project_config .variation_key_map )
522
+ self .assertEqual (expected_variation_id_map , project_config .variation_id_map )
523
+ self .assertEqual (expected_feature_flag_id_map , project_config .feature_flag_id_map )
301
524
302
525
def test_get_version (self ):
303
526
""" Test that JSON version is retrieved correctly when using get_version. """
0 commit comments