| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- // 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
|