@@ -169,9 +169,9 @@ - (void)testBasicGetVariation {
169
169
XCTAssertTrue ([variation.variationId isEqualToString: @" 6384330451" ]);
170
170
171
171
// test with bad experiment key
172
+
172
173
variation = [self .optimizely variation: @" bad" userId: kUserId ];
173
174
XCTAssertNil (variation);
174
-
175
175
}
176
176
177
177
- (void )testVariationWithAudience {
@@ -246,6 +246,62 @@ - (void)testVariationWhitelisting {
246
246
XCTAssertEqualObjects (variation.variationKey , kVariationKeyForWhitelisting );
247
247
}
248
248
249
+ #pragma mark - Get Variation <DECISION NOTIFICATION> Tests
250
+
251
+ - (void )testDecisionNotificationForBasicGetVariation {
252
+ NSString *experimentKey = @" testExperiment1" ;
253
+ OPTLYExperiment *experiment = [self .optimizely.config getExperimentForKey: experimentKey];
254
+
255
+ XCTAssertNotNil (experiment);
256
+ OPTLYVariation *variation;
257
+
258
+ // test just experiment key
259
+ variation = [self .optimizely variation: experimentKey userId: kUserId ];
260
+ XCTAssertNotNil (variation);
261
+ XCTAssertTrue ([variation.variationKey isEqualToString: @" control" ]);
262
+ XCTAssertTrue ([variation.variationId isEqualToString: @" 6384330451" ]);
263
+
264
+ // test with bad experiment key
265
+
266
+ __block NSString *decisionNotificationExperimentKey = nil ;
267
+ __block NSString *decisionNotificationVariationKey = nil ;
268
+
269
+ [self .optimizely.notificationCenter addDecisionNotificationListener: ^(NSString * _Nonnull type, NSString * _Nonnull userId, NSDictionary <NSString *,id > * _Nullable attributes, NSDictionary <NSString *,id > * _Nonnull decisionInfo) {
270
+ decisionNotificationExperimentKey = decisionInfo[OPTLYNotificationExperimentKey];
271
+ decisionNotificationVariationKey = decisionInfo[OPTLYNotificationVariationKey];
272
+ }];
273
+
274
+ variation = [self .optimizely variation: @" bad" userId: kUserId ];
275
+ XCTAssertNil (variation);
276
+ XCTAssertEqualObjects (decisionNotificationExperimentKey, [NSNull null ]);
277
+ XCTAssertEqualObjects (decisionNotificationVariationKey, [NSNull null ]);
278
+ }
279
+
280
+ // Test whitelisting works with get variation
281
+ - (void )testDecisionNotificationForVariationWhitelisting {
282
+ NSData *datafile = [OPTLYTestHelper loadJSONDatafileIntoDataObject: kBucketerTestDatafileName ];
283
+ __block NSString *decisionNotificationExperimentKey = nil ;
284
+ __block NSString *decisionNotificationVariationKey = nil ;
285
+
286
+ Optimizely *optimizely = [[Optimizely alloc ] initWithBuilder: [OPTLYBuilder builderWithBlock: ^(OPTLYBuilder * _Nullable builder) {
287
+ builder.datafile = datafile;
288
+ }]];
289
+ XCTAssertNotNil (optimizely);
290
+
291
+ [optimizely.notificationCenter addDecisionNotificationListener: ^(NSString * _Nonnull type, NSString * _Nonnull userId, NSDictionary <NSString *,id > * _Nullable attributes, NSDictionary <NSString *,id > * _Nonnull decisionInfo) {
292
+ decisionNotificationExperimentKey = decisionInfo[OPTLYNotificationExperimentKey];
293
+ decisionNotificationVariationKey = decisionInfo[OPTLYNotificationVariationKey];
294
+ }];
295
+
296
+ // get variation
297
+ OPTLYVariation *variation = [optimizely variation: kExperimentKeyForWhitelisting userId: kUserIdForWhitelisting ];
298
+ XCTAssertNotNil (variation);
299
+ XCTAssertEqualObjects (variation.variationId , kVariationIDForWhitelisting );
300
+ XCTAssertEqualObjects (variation.variationKey , kVariationKeyForWhitelisting );
301
+ XCTAssertEqualObjects (decisionNotificationExperimentKey, kExperimentKeyForWhitelisting );
302
+ XCTAssertEqualObjects (decisionNotificationVariationKey, variation.variationKey );
303
+ }
304
+
249
305
# pragma mark - Integration Tests
250
306
251
307
- (void )testOptimizelyActivateWithEmptyUserId {
@@ -286,6 +342,7 @@ - (void)testOptimizelyActivateWithInvalidExperiment {
286
342
__weak XCTestExpectation *expectation = [self expectationWithDescription: @" getActivatedVariation" ];
287
343
288
344
NSString *invalidExperimentKey = @" invalid" ;
345
+
289
346
OPTLYVariation *variation = [self .optimizely activate: invalidExperimentKey userId: kUserId attributes: self .attributes callback: ^(NSError *error) {
290
347
XCTAssertNotNil (error);
291
348
NSString *logMessage = [NSString stringWithFormat: OPTLYLoggerMessagesActivateExperimentKeyInvalid, invalidExperimentKey];
@@ -342,7 +399,6 @@ - (void)testOptimizelyActivateWithNonTargetingAudience {
342
399
[expectation fulfill ];
343
400
}];
344
401
XCTAssertNil (variation);
345
-
346
402
[self waitForExpectationsWithTimeout: 2 handler: nil ];
347
403
}
348
404
@@ -385,7 +441,7 @@ - (void)testOptimizelyPostsActivateExperimentNotificationAllAttributes {
385
441
XCTAssertEqual (experiment.experimentId , notificationExperimentKey);
386
442
}
387
443
388
- - (void )testOptimizelyPostsActivateExperimentNotificationNilAttributes {
444
+ - (void )testOptimizelyPostsActivateExperimentNotificationEmptyAttributes {
389
445
390
446
OPTLYExperiment *experiment = [self .optimizely.config getExperimentForKey: kExperimentKeyForWhitelisting ];
391
447
__block NSString *notificationExperimentKey = nil ;
@@ -398,12 +454,10 @@ - (void)testOptimizelyPostsActivateExperimentNotificationNilAttributes {
398
454
399
455
OPTLYVariation *_variation = [self .optimizely activate: kExperimentKeyForWhitelisting
400
456
userId: kUserId attributes: nil ];
401
- XCTAssertNil (actualAttributes);
402
457
XCTAssertNotNil (_variation);
403
458
XCTAssertEqual (experiment.experimentId , notificationExperimentKey);
404
459
}
405
460
406
-
407
461
- (void )testOptimizelyTrackWithNoEvent {
408
462
409
463
NSString *eventKey;
@@ -563,6 +617,90 @@ - (void)testOptimizelyPostEventTrackNotificationWithEventTags {
563
617
XCTAssertEqual (eventTags, notificationEventTags);
564
618
}
565
619
620
+ #pragma mark - Activate <DECISION NOTIFICATION> Tests
621
+
622
+ - (void )testDecisionNotificationForActivateWithNonTargetingAudience {
623
+
624
+ __weak XCTestExpectation *expectation = [self expectationWithDescription: @" getActivatedVariation" ];
625
+ __block NSString *decisionNotificationVariationKey = nil ;
626
+
627
+ [self .optimizely.notificationCenter addDecisionNotificationListener: ^(NSString * _Nonnull type, NSString * _Nonnull userId, NSDictionary <NSString *,id > * _Nullable attributes, NSDictionary <NSString *,id > * _Nonnull decisionInfo) {
628
+ decisionNotificationVariationKey = decisionInfo[OPTLYNotificationVariationKey];
629
+ }];
630
+
631
+ OPTLYVariation *variation = [self .optimizely activate: kExperimentKey
632
+ userId: kUserId
633
+ attributes: nil callback: ^(NSError *error) {
634
+ XCTAssertNotNil (error);
635
+ NSString *logMessage = [NSString stringWithFormat: OPTLYLoggerMessagesEventDispatcherActivationFailure, kUserId , kExperimentKey ];
636
+ XCTAssertEqualObjects (error.userInfo [NSLocalizedDescriptionKey ], logMessage);
637
+ [expectation fulfill ];
638
+ }];
639
+ XCTAssertNil (variation);
640
+ XCTAssertEqualObjects (decisionNotificationVariationKey, [NSNull null ]);
641
+ [self waitForExpectationsWithTimeout: 2 handler: nil ];
642
+ }
643
+
644
+ - (void )testOptimizelyPostsOnDecisionActivateNotification {
645
+
646
+ OPTLYExperiment *experiment = [self .optimizely.config getExperimentForKey: kExperimentKeyForWhitelisting ];
647
+ __block NSString *decisionNotificationExperimentKey = nil ;
648
+ __block NSString *decisionNotificationVariationKey = nil ;
649
+
650
+ [self .optimizely.notificationCenter addDecisionNotificationListener: ^(NSString * _Nonnull type, NSString * _Nonnull userId, NSDictionary <NSString *,id > * _Nullable attributes, NSDictionary <NSString *,id > * _Nonnull decisionInfo) {
651
+ decisionNotificationExperimentKey = decisionInfo[OPTLYNotificationExperimentKey];
652
+ decisionNotificationVariationKey = decisionInfo[OPTLYNotificationVariationKey];
653
+ }];
654
+
655
+ OPTLYVariation *_variation = [self .optimizely activate: kExperimentKeyForWhitelisting
656
+ userId: kUserId ];
657
+ XCTAssertNotNil (_variation);
658
+ XCTAssertEqualObjects (experiment.experimentKey , decisionNotificationExperimentKey);
659
+ XCTAssertEqualObjects (_variation.variationKey , decisionNotificationVariationKey);
660
+ }
661
+
662
+ - (void )testOptimizelyPostsOnDecisionActivateNotificationAllAttributes {
663
+
664
+ OPTLYExperiment *experiment = [self .optimizely.config getExperimentForKey: kExperimentKeyForWhitelisting ];
665
+ __block NSString *decisionNotificationExperimentKey = nil ;
666
+
667
+ NSDictionary <NSString *, id > *expectedAttributes = @{
668
+ @" browser_name" : @" chrome" ,
669
+ @" buildno" : @(10 ),
670
+ @" buildversion" : @(0.13 )
671
+ };
672
+ __block NSDictionary <NSString *, id > *decisionActualAttributes;
673
+
674
+ [self .optimizely.notificationCenter addDecisionNotificationListener: ^(NSString * _Nonnull type, NSString * _Nonnull userId, NSDictionary <NSString *,id > * _Nullable attributes, NSDictionary <NSString *,id > * _Nonnull decisionInfo) {
675
+ decisionNotificationExperimentKey = decisionInfo[OPTLYNotificationExperimentKey];
676
+ decisionActualAttributes = attributes;
677
+ }];
678
+
679
+ OPTLYVariation *_variation = [self .optimizely activate: kExperimentKeyForWhitelisting
680
+ userId: kUserId attributes: expectedAttributes];
681
+ XCTAssertEqualObjects (expectedAttributes, decisionActualAttributes);
682
+ XCTAssertNotNil (_variation);
683
+ XCTAssertEqualObjects (experiment.experimentKey , decisionNotificationExperimentKey);
684
+ }
685
+
686
+ - (void )testOptimizelyPostsPostsOnDecisionActivateNotificationEmptyAttributes {
687
+
688
+ OPTLYExperiment *experiment = [self .optimizely.config getExperimentForKey: kExperimentKeyForWhitelisting ];
689
+ __block NSString *decisionNotificationExperimentKey = nil ;
690
+ __block NSDictionary <NSString *, id > *decisionActualAttributes;
691
+
692
+ [self .optimizely.notificationCenter addDecisionNotificationListener: ^(NSString * _Nonnull type, NSString * _Nonnull userId, NSDictionary <NSString *,id > * _Nullable attributes, NSDictionary <NSString *,id > * _Nonnull decisionInfo) {
693
+ decisionNotificationExperimentKey = decisionInfo[OPTLYNotificationExperimentKey];
694
+ decisionActualAttributes = attributes;
695
+ }];
696
+
697
+ OPTLYVariation *_variation = [self .optimizely activate: kExperimentKeyForWhitelisting
698
+ userId: kUserId attributes: nil ];
699
+ XCTAssertEqualObjects (decisionActualAttributes, @{});
700
+ XCTAssertNotNil (_variation);
701
+ XCTAssertEqualObjects (experiment.experimentKey , decisionNotificationExperimentKey);
702
+ }
703
+
566
704
# pragma mark - IsFeatureEnabled Tests
567
705
568
706
// Should return false when arguments are nil or empty.
0 commit comments