mirror of
https://github.com/firebase/firebase-ios-sdk
synced 2026-11-09 22:36:01 +05:45
125 lines
5.6 KiB
Objective-C
125 lines
5.6 KiB
Objective-C
// Copyright 2020 Google LLC
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#import <XCTest/XCTest.h>
|
|
|
|
#import "FirebaseABTesting/Sources/ABTConstants.h"
|
|
#import "FirebaseABTesting/Sources/Private/ABTExperimentPayload.h"
|
|
#import "FirebaseABTesting/Tests/Unit/Utilities/ABTTestUtilities.h"
|
|
|
|
@interface ABTExperimentPayload (ClassTesting)
|
|
|
|
+ (NSDateFormatter *)experimentStartTimeFormatter;
|
|
|
|
@end
|
|
|
|
@interface ABTExperimentPayloadTest : XCTestCase
|
|
|
|
@end
|
|
|
|
@implementation ABTExperimentPayloadTest
|
|
|
|
- (void)testPayloadWithTrigger {
|
|
ABTExperimentPayload *testPayload = [ABTTestUtilities payloadFromTestFilename:@"TestABTPayload1"];
|
|
XCTAssertEqualObjects(testPayload.experimentId, @"exp_1");
|
|
XCTAssertEqualObjects(testPayload.variantId, @"var_1");
|
|
XCTAssertEqualObjects(testPayload.triggerEvent, @"customTrigger");
|
|
|
|
// From the experiment resource file.
|
|
NSString *startTimeString = @"2020-04-08T16:44:39.023Z";
|
|
NSDate *startTime = [self dateFromFormattedDateString:startTimeString];
|
|
NSTimeInterval startTimeInterval = [startTime timeIntervalSince1970];
|
|
XCTAssertEqual(testPayload.experimentStartTimeMillis, startTimeInterval * ABT_MSEC_PER_SEC);
|
|
|
|
XCTAssertEqual(testPayload.triggerTimeoutMillis, 15552000000);
|
|
XCTAssertEqual(testPayload.timeToLiveMillis, 15552000000);
|
|
XCTAssertEqualObjects(testPayload.setEventToLog, @"set_event");
|
|
XCTAssertEqualObjects(testPayload.activateEventToLog, @"activate_event");
|
|
XCTAssertEqualObjects(testPayload.clearEventToLog, @"clear_event");
|
|
XCTAssertEqualObjects(testPayload.timeoutEventToLog, @"timeout_event");
|
|
XCTAssertEqualObjects(testPayload.ttlExpiryEventToLog, @"ttl_expiry_event");
|
|
XCTAssertEqual(testPayload.overflowPolicy,
|
|
ABTExperimentPayloadExperimentOverflowPolicyIgnoreNewest);
|
|
XCTAssertEqual(testPayload.ongoingExperiments.count, 1);
|
|
ABTExperimentLite *liteExperiment = testPayload.ongoingExperiments.firstObject;
|
|
XCTAssertEqualObjects(liteExperiment.experimentId, @"exp_1");
|
|
}
|
|
|
|
- (void)testPayloadWithoutTrigger {
|
|
ABTExperimentPayload *testPayload = [ABTTestUtilities payloadFromTestFilename:@"TestABTPayload2"];
|
|
XCTAssertEqualObjects(testPayload.experimentId, @"exp_2");
|
|
XCTAssertEqualObjects(testPayload.variantId, @"v200");
|
|
XCTAssertNil(testPayload.triggerEvent);
|
|
|
|
// From the experiment resource file.
|
|
NSString *startTimeString = @"2020-06-01T16:00:00.000Z";
|
|
NSDate *startTime = [self dateFromFormattedDateString:startTimeString];
|
|
NSTimeInterval startTimeInterval = [startTime timeIntervalSince1970];
|
|
XCTAssertEqual(testPayload.experimentStartTimeMillis, startTimeInterval * ABT_MSEC_PER_SEC);
|
|
|
|
XCTAssertEqual(testPayload.triggerTimeoutMillis, 15452000000);
|
|
XCTAssertEqual(testPayload.timeToLiveMillis, 15452000000);
|
|
XCTAssertEqualObjects(testPayload.setEventToLog, @"set_event_override");
|
|
XCTAssertEqualObjects(testPayload.activateEventToLog, @"activate_event_override");
|
|
XCTAssertEqualObjects(testPayload.clearEventToLog, @"clear_event_override");
|
|
XCTAssertEqualObjects(testPayload.timeoutEventToLog, @"timeout_event_override");
|
|
XCTAssertEqualObjects(testPayload.ttlExpiryEventToLog, @"ttl_expiry_event_override");
|
|
XCTAssertEqual(testPayload.overflowPolicy,
|
|
ABTExperimentPayloadExperimentOverflowPolicyDiscardOldest);
|
|
}
|
|
|
|
/// Verifies that we initialize the payload if it has a start time parameter with millis, rather
|
|
/// than a date string.
|
|
- (void)testPayloadInitializesStartTimeWithMillis {
|
|
ABTExperimentPayload *testPayload = [ABTTestUtilities payloadFromTestFilename:@"TestABTPayload5"];
|
|
XCTAssertEqual(testPayload.experimentStartTimeMillis, 143);
|
|
}
|
|
|
|
- (void)testPayloadInitializationWithString {
|
|
ABTExperimentPayload *unrecognizedOverflowPolicyString =
|
|
[[ABTExperimentPayload alloc] initWithDictionary:@{@"overflowPolicy" : @"WWDC"}];
|
|
XCTAssertEqual(unrecognizedOverflowPolicyString.overflowPolicy,
|
|
ABTExperimentPayloadExperimentOverflowPolicyUnrecognizedValue);
|
|
|
|
ABTExperimentPayload *ignoreNewestOverflowPolicyString =
|
|
[[ABTExperimentPayload alloc] initWithDictionary:@{@"overflowPolicy" : @"IGNORE_NEWEST"}];
|
|
XCTAssertEqual(ignoreNewestOverflowPolicyString.overflowPolicy,
|
|
ABTExperimentPayloadExperimentOverflowPolicyIgnoreNewest);
|
|
|
|
ABTExperimentPayload *discardOldestOverflowPolicyString =
|
|
[[ABTExperimentPayload alloc] initWithDictionary:@{@"overflowPolicy" : @"DISCARD_OLDEST"}];
|
|
XCTAssertEqual(discardOldestOverflowPolicyString.overflowPolicy,
|
|
ABTExperimentPayloadExperimentOverflowPolicyDiscardOldest);
|
|
}
|
|
|
|
- (void)testUtilityMethods {
|
|
ABTExperimentPayload *testPayload1 =
|
|
[ABTTestUtilities payloadFromTestFilename:@"TestABTPayload1"];
|
|
XCTAssertTrue([testPayload1 overflowPolicyIsValid]);
|
|
|
|
// Clear trigger event and make sure it's now nil.
|
|
[testPayload1 clearTriggerEvent];
|
|
|
|
// This one has an unspecified overflow policy.
|
|
ABTExperimentPayload *testPayload3 =
|
|
[ABTTestUtilities payloadFromTestFilename:@"TestABTPayload3"];
|
|
XCTAssertFalse([testPayload3 overflowPolicyIsValid]);
|
|
}
|
|
|
|
- (NSDate *)dateFromFormattedDateString:(NSString *)dateString {
|
|
return [[ABTExperimentPayload experimentStartTimeFormatter] dateFromString:dateString];
|
|
}
|
|
|
|
@end
|