ABTExperimentPayloadTest.m 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. // Copyright 2020 Google LLC
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. #import <XCTest/XCTest.h>
  15. #import "FirebaseABTesting/Sources/ABTConstants.h"
  16. #import "FirebaseABTesting/Sources/Private/ABTExperimentPayload.h"
  17. #import "FirebaseABTesting/Tests/Unit/Utilities/ABTTestUtilities.h"
  18. @interface ABTExperimentPayload (ClassTesting)
  19. + (NSDateFormatter *)experimentStartTimeFormatter;
  20. @end
  21. @interface ABTExperimentPayloadTest : XCTestCase
  22. @end
  23. @implementation ABTExperimentPayloadTest
  24. - (void)testPayloadWithTrigger {
  25. ABTExperimentPayload *testPayload = [ABTTestUtilities payloadFromTestFilename:@"TestABTPayload1"];
  26. XCTAssertEqualObjects(testPayload.experimentId, @"exp_1");
  27. XCTAssertEqualObjects(testPayload.variantId, @"var_1");
  28. XCTAssertEqualObjects(testPayload.triggerEvent, @"customTrigger");
  29. // From the experiment resource file.
  30. NSString *startTimeString = @"2020-04-08T16:44:39.023Z";
  31. NSDate *startTime = [self dateFromFormattedDateString:startTimeString];
  32. NSTimeInterval startTimeInterval = [startTime timeIntervalSince1970];
  33. XCTAssertEqual(testPayload.experimentStartTimeMillis, startTimeInterval * ABT_MSEC_PER_SEC);
  34. XCTAssertEqual(testPayload.triggerTimeoutMillis, 15552000000);
  35. XCTAssertEqual(testPayload.timeToLiveMillis, 15552000000);
  36. XCTAssertEqualObjects(testPayload.setEventToLog, @"set_event");
  37. XCTAssertEqualObjects(testPayload.activateEventToLog, @"activate_event");
  38. XCTAssertEqualObjects(testPayload.clearEventToLog, @"clear_event");
  39. XCTAssertEqualObjects(testPayload.timeoutEventToLog, @"timeout_event");
  40. XCTAssertEqualObjects(testPayload.ttlExpiryEventToLog, @"ttl_expiry_event");
  41. XCTAssertEqual(testPayload.overflowPolicy,
  42. ABTExperimentPayloadExperimentOverflowPolicyIgnoreNewest);
  43. XCTAssertEqual(testPayload.ongoingExperiments.count, 1);
  44. ABTExperimentLite *liteExperiment = testPayload.ongoingExperiments.firstObject;
  45. XCTAssertEqualObjects(liteExperiment.experimentId, @"exp_1");
  46. }
  47. - (void)testPayloadWithoutTrigger {
  48. ABTExperimentPayload *testPayload = [ABTTestUtilities payloadFromTestFilename:@"TestABTPayload2"];
  49. XCTAssertEqualObjects(testPayload.experimentId, @"exp_2");
  50. XCTAssertEqualObjects(testPayload.variantId, @"v200");
  51. XCTAssertNil(testPayload.triggerEvent);
  52. // From the experiment resource file.
  53. NSString *startTimeString = @"2020-06-01T16:00:00.000Z";
  54. NSDate *startTime = [self dateFromFormattedDateString:startTimeString];
  55. NSTimeInterval startTimeInterval = [startTime timeIntervalSince1970];
  56. XCTAssertEqual(testPayload.experimentStartTimeMillis, startTimeInterval * ABT_MSEC_PER_SEC);
  57. XCTAssertEqual(testPayload.triggerTimeoutMillis, 15452000000);
  58. XCTAssertEqual(testPayload.timeToLiveMillis, 15452000000);
  59. XCTAssertEqualObjects(testPayload.setEventToLog, @"set_event_override");
  60. XCTAssertEqualObjects(testPayload.activateEventToLog, @"activate_event_override");
  61. XCTAssertEqualObjects(testPayload.clearEventToLog, @"clear_event_override");
  62. XCTAssertEqualObjects(testPayload.timeoutEventToLog, @"timeout_event_override");
  63. XCTAssertEqualObjects(testPayload.ttlExpiryEventToLog, @"ttl_expiry_event_override");
  64. XCTAssertEqual(testPayload.overflowPolicy,
  65. ABTExperimentPayloadExperimentOverflowPolicyDiscardOldest);
  66. }
  67. /// Verifies that we initialize the payload if it has a start time parameter with millis, rather
  68. /// than a date string.
  69. - (void)testPayloadInitializesStartTimeWithMillis {
  70. ABTExperimentPayload *testPayload = [ABTTestUtilities payloadFromTestFilename:@"TestABTPayload5"];
  71. XCTAssertEqual(testPayload.experimentStartTimeMillis, 143);
  72. }
  73. - (void)testPayloadInitializationWithString {
  74. ABTExperimentPayload *unrecognizedOverflowPolicyString =
  75. [[ABTExperimentPayload alloc] initWithDictionary:@{@"overflowPolicy" : @"WWDC"}];
  76. XCTAssertEqual(unrecognizedOverflowPolicyString.overflowPolicy,
  77. ABTExperimentPayloadExperimentOverflowPolicyUnrecognizedValue);
  78. ABTExperimentPayload *ignoreNewestOverflowPolicyString =
  79. [[ABTExperimentPayload alloc] initWithDictionary:@{@"overflowPolicy" : @"IGNORE_NEWEST"}];
  80. XCTAssertEqual(ignoreNewestOverflowPolicyString.overflowPolicy,
  81. ABTExperimentPayloadExperimentOverflowPolicyIgnoreNewest);
  82. ABTExperimentPayload *discardOldestOverflowPolicyString =
  83. [[ABTExperimentPayload alloc] initWithDictionary:@{@"overflowPolicy" : @"DISCARD_OLDEST"}];
  84. XCTAssertEqual(discardOldestOverflowPolicyString.overflowPolicy,
  85. ABTExperimentPayloadExperimentOverflowPolicyDiscardOldest);
  86. }
  87. - (void)testUtilityMethods {
  88. ABTExperimentPayload *testPayload1 =
  89. [ABTTestUtilities payloadFromTestFilename:@"TestABTPayload1"];
  90. XCTAssertTrue([testPayload1 overflowPolicyIsValid]);
  91. // Clear trigger event and make sure it's now nil.
  92. [testPayload1 clearTriggerEvent];
  93. // This one has an unspecified overflow policy.
  94. ABTExperimentPayload *testPayload3 =
  95. [ABTTestUtilities payloadFromTestFilename:@"TestABTPayload3"];
  96. XCTAssertFalse([testPayload3 overflowPolicyIsValid]);
  97. }
  98. - (NSDate *)dateFromFormattedDateString:(NSString *)dateString {
  99. return [[ABTExperimentPayload experimentStartTimeFormatter] dateFromString:dateString];
  100. }
  101. @end