40
40
41
41
static NSString * const kOriginalDatafileName = @" InitialDatafile" ;
42
42
static NSString * const kUpdatedDatafileName = @" UpdatedDatafile" ;
43
+ static NSString * const kRemovedVariationDatafileName = @" RemovedVariationDatafile" ;
43
44
static NSString * const kUserProfileExperimentKey = @" User_Profile_Experiment" ;
44
45
static NSString * const kUserProfileExperimentOriginalVariationKey = @" original" ;
45
46
static NSString * const kUserProfileExperimentTreatmentVariationKey = @" treatment" ;
46
47
static NSData *originalDatafile;
47
48
static NSData *updatedDatafile;
49
+ static NSData *removedVariationDatafile;
48
50
49
51
@interface OPTLYUserProfile (test)
50
52
@property (nonatomic , strong ) OPTLYDataStore *dataStore;
@@ -62,6 +64,7 @@ + (void)setUp {
62
64
// load the datafiles
63
65
originalDatafile = [OPTLYTestHelper loadJSONDatafileIntoDataObject: kOriginalDatafileName ];
64
66
updatedDatafile = [OPTLYTestHelper loadJSONDatafileIntoDataObject: kUpdatedDatafileName ];
67
+ removedVariationDatafile = [OPTLYTestHelper loadJSONDatafileIntoDataObject: kRemovedVariationDatafileName ];
65
68
66
69
// stub all requests
67
70
[OHHTTPStubs stubRequestsPassingTest: ^BOOL (NSURLRequest * _Nonnull request) {
@@ -237,7 +240,7 @@ - (void)testBucketingPersistsWhenDatafileIsUpdated {
237
240
OPTLYVariation *originalVariation = [originalClient activateExperiment: kUserProfileExperimentKey userId: kUserId1 ];
238
241
XCTAssertNotNil (originalVariation);
239
242
XCTAssertEqualObjects (originalVariation.variationKey , kUserProfileExperimentOriginalVariationKey );
240
-
243
+ XCTAssertNotNil ([originalClient.optimizely.userProfile getVariationForUser: kUserId1 experiment: kUserProfileExperimentKey ], @" User experiment should be stored " );
241
244
242
245
OPTLYClient *updatedClient = [manager initializeClientWithDatafile: updatedDatafile];
243
246
XCTAssertNotNil (updatedClient);
@@ -250,4 +253,38 @@ - (void)testBucketingPersistsWhenDatafileIsUpdated {
250
253
XCTAssertEqualObjects (originalVariation.variationId , variationForUser1.variationId );
251
254
}
252
255
256
+ - (void )testStickyBucketingRevertsWhenVariationIsRemoved {
257
+ // make sure we have 2 different datafiles
258
+ XCTAssertNotNil (originalDatafile);
259
+ XCTAssertNotNil (removedVariationDatafile);
260
+ XCTAssertNotEqualObjects (originalDatafile, removedVariationDatafile);
261
+
262
+ // instantiate the manager
263
+ OPTLYManager *manager = [OPTLYManager initWithBuilderBlock: ^(OPTLYManagerBuilder * _Nullable builder) {
264
+ builder.projectId = @" projectId" ;
265
+ __block id <OPTLYLogger> logger = builder.logger ;
266
+ builder.userProfile = [OPTLYUserProfile initWithBuilderBlock: ^(OPTLYUserProfileBuilder * _Nullable builder) {
267
+ builder.logger = logger;
268
+ }];
269
+ }];
270
+ XCTAssertNotNil (manager);
271
+
272
+ OPTLYClient *originalClient = [manager initializeClientWithDatafile: originalDatafile];
273
+ XCTAssertNotNil (originalClient);
274
+ OPTLYVariation *originalVariation = [originalClient activateExperiment: kUserProfileExperimentKey userId: kUserId1 ];
275
+ XCTAssertNotNil (originalVariation);
276
+ XCTAssertEqualObjects (originalVariation.variationKey , kUserProfileExperimentOriginalVariationKey );
277
+ XCTAssertNotNil ([originalClient.optimizely.userProfile getVariationForUser: kUserId1 experiment: kUserProfileExperimentKey ], @" User experiment should be stored" );
278
+
279
+ // update client with a new datafile
280
+ OPTLYClient *updatedClient = [manager initializeClientWithDatafile: removedVariationDatafile];
281
+ XCTAssertNotNil (updatedClient);
282
+ XCTAssertNotNil ([updatedClient.optimizely.userProfile getVariationForUser: kUserId1 experiment: kUserProfileExperimentKey ], @" User experiment should be same as original client" );
283
+ OPTLYVariation *variationForUser1 = [updatedClient activateExperiment: kUserProfileExperimentKey userId: kUserId1 ];
284
+ XCTAssertNotNil (variationForUser1);
285
+ XCTAssertNotEqualObjects (originalVariation.variationKey , variationForUser1.variationKey );
286
+ XCTAssertNotEqualObjects (originalVariation.variationId , variationForUser1.variationId );
287
+ XCTAssertEqualObjects (variationForUser1.variationKey , kUserProfileExperimentTreatmentVariationKey , @" treatment should be the new variation since original was removed" );
288
+ }
289
+
253
290
@end
0 commit comments