| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- /*
- * Copyright 2017 Google
- *
- * 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 <OCMock/OCMock.h>
- #import <XCTest/XCTest.h>
- #import "FirebaseInAppMessaging/Sources/Private/Flows/FIRIAMBookKeeper.h"
- @interface FIRIAMBookKeeperViaUserDefaultsTests : XCTestCase
- @property(nonatomic) NSUserDefaults *userDefaultsForTesting;
- @end
- extern NSString *FIRIAM_UserDefaultsKeyForImpressions;
- extern NSString *FIRIAM_UserDefaultsKeyForLastImpressionTimestamp;
- extern NSString *FIRIAM_ImpressionDictKeyForID;
- extern NSString *FIRIAM_ImpressionDictKeyForTimestamp;
- @implementation FIRIAMBookKeeperViaUserDefaultsTests
- - (void)setUp {
- [super setUp];
- self.userDefaultsForTesting =
- [[NSUserDefaults alloc] initWithSuiteName:@"FIRIAMBookKeeperViaUserDefaultsTests"];
- }
- - (void)tearDown {
- // Put teardown code here. This method is called after the invocation of each test method in the
- // class.
- [super tearDown];
- [self.userDefaultsForTesting removeSuiteNamed:@"FIRIAMBookKeeperViaUserDefaultsTests"];
- }
- - (void)testRecordImpressionRecords {
- FIRIAMBookKeeperViaUserDefaults *bookKeeper =
- [[FIRIAMBookKeeperViaUserDefaults alloc] initWithUserDefaults:self.userDefaultsForTesting];
- [bookKeeper cleanupImpressions];
- NSArray<FIRIAMImpressionRecord *> *impressions = [bookKeeper getImpressions];
- XCTAssertEqual(0, [impressions count]);
- double impression1_ts = 12345;
- double impression2_ts = 34567;
- [bookKeeper recordNewImpressionForMessage:@"m1" withStartTimestampInSeconds:impression1_ts];
- [bookKeeper recordNewImpressionForMessage:@"m1" withStartTimestampInSeconds:impression2_ts];
- impressions = [bookKeeper getImpressions];
- // For the same message, we only record the last impression record.
- XCTAssertEqual(1, [impressions count]);
- XCTAssertEqualWithAccuracy(impression2_ts, impressions[0].impressionTimeInSeconds, 0.1);
- // Verify the last display time.
- XCTAssertEqualWithAccuracy(impression2_ts, [bookKeeper lastDisplayTime], 0.1);
- double impression3_ts = 45000;
- [bookKeeper recordNewImpressionForMessage:@"m2" withStartTimestampInSeconds:impression3_ts];
- impressions = [bookKeeper getImpressions];
- // Now we should see two different impression records for two different messages.
- XCTAssertEqual(2, [impressions count]);
- // Verify the last display time is updated again.
- XCTAssertEqualWithAccuracy(impression3_ts, [bookKeeper lastDisplayTime], 0.1);
- }
- - (void)testRecordFetchTimes {
- FIRIAMBookKeeperViaUserDefaults *bookKeeper =
- [[FIRIAMBookKeeperViaUserDefaults alloc] initWithUserDefaults:self.userDefaultsForTesting];
- [bookKeeper cleanupImpressions];
- double fetch1_ts = 12345;
- double fetch2_ts = 34567;
- [bookKeeper recordNewFetchWithFetchCount:10
- withTimestampInSeconds:fetch1_ts
- nextFetchWaitTime:nil];
- [bookKeeper recordNewFetchWithFetchCount:10
- withTimestampInSeconds:fetch2_ts
- nextFetchWaitTime:nil];
- XCTAssertEqualWithAccuracy(fetch2_ts, [bookKeeper lastFetchTime], 0.1);
- }
- - (void)testRecordFetchTimesWithFetchWaitTime {
- FIRIAMBookKeeperViaUserDefaults *bookKeeper =
- [[FIRIAMBookKeeperViaUserDefaults alloc] initWithUserDefaults:self.userDefaultsForTesting];
- [bookKeeper cleanupImpressions];
- double fetch1_ts = 12345;
- NSNumber *fetchWaitTime = [NSNumber numberWithInt:30000];
- [bookKeeper recordNewFetchWithFetchCount:10
- withTimestampInSeconds:fetch1_ts
- nextFetchWaitTime:fetchWaitTime];
- XCTAssertEqualWithAccuracy(fetchWaitTime.doubleValue, [bookKeeper nextFetchWaitTime], 0.1);
- }
- - (void)testRecordFetchTimesWithFetchWaitTimeOverCap {
- FIRIAMBookKeeperViaUserDefaults *bookKeeper =
- [[FIRIAMBookKeeperViaUserDefaults alloc] initWithUserDefaults:self.userDefaultsForTesting];
- [bookKeeper cleanupImpressions];
- double fetch1_ts = 12345;
- NSNumber *fetchWaitTime = [NSNumber numberWithInt:30000];
- [bookKeeper recordNewFetchWithFetchCount:10
- withTimestampInSeconds:fetch1_ts
- nextFetchWaitTime:fetchWaitTime];
- XCTAssertEqualWithAccuracy(fetchWaitTime.doubleValue, [bookKeeper nextFetchWaitTime], 0.1);
- // Second recording use a very large fetch wait time: 30000000 is to large to be accepted.
- NSNumber *fetchWaitTime2 = [NSNumber numberWithInt:30000000];
- [bookKeeper recordNewFetchWithFetchCount:10
- withTimestampInSeconds:fetch1_ts
- nextFetchWaitTime:fetchWaitTime2];
- // Next fetch wait time is still the same as from fetchWaitTime
- XCTAssertEqualWithAccuracy(fetchWaitTime.doubleValue, [bookKeeper nextFetchWaitTime], 0.1);
- }
- - (void)testFetchImpressions {
- NSString *message1 = @"message1 id";
- double message1ImpressionTime = 1000.0;
- NSString *message2 = @"message2 id";
- double message2ImpressionTime = 2000.0;
- FIRIAMBookKeeperViaUserDefaults *bookKeeper =
- [[FIRIAMBookKeeperViaUserDefaults alloc] initWithUserDefaults:self.userDefaultsForTesting];
- [bookKeeper cleanupImpressions];
- // Set up existing impressions.
- [bookKeeper recordNewImpressionForMessage:message1
- withStartTimestampInSeconds:message1ImpressionTime];
- [bookKeeper recordNewImpressionForMessage:message2
- withStartTimestampInSeconds:message2ImpressionTime];
- NSArray<FIRIAMImpressionRecord *> *fetchedImpressions = [bookKeeper getImpressions];
- XCTAssertEqual(2, fetchedImpressions.count);
- FIRIAMImpressionRecord *first = fetchedImpressions[0];
- XCTAssertEqualObjects(first.messageID, message1);
- XCTAssertEqualWithAccuracy((double)first.impressionTimeInSeconds, message1ImpressionTime, 0.1);
- FIRIAMImpressionRecord *second = fetchedImpressions[1];
- XCTAssertEqualObjects(second.messageID, message2);
- XCTAssertEqualWithAccuracy((double)second.impressionTimeInSeconds, message2ImpressionTime, 0.1);
- NSArray<NSString *> *messageIDs = [bookKeeper getMessageIDsFromImpressions];
- XCTAssertEqualObjects(messageIDs[0], message1);
- XCTAssertEqualObjects(messageIDs[1], message2);
- }
- - (void)testClearImpressionsForMessageIDs {
- FIRIAMBookKeeperViaUserDefaults *bookKeeper =
- [[FIRIAMBookKeeperViaUserDefaults alloc] initWithUserDefaults:self.userDefaultsForTesting];
- [bookKeeper cleanupImpressions];
- NSArray<FIRIAMImpressionRecord *> *impressions = [bookKeeper getImpressions];
- XCTAssertEqual(0, [impressions count]);
- double impression1_ts = 12345;
- double impression2_ts = 34567;
- double impression3_ts = 34567;
- [bookKeeper recordNewImpressionForMessage:@"m1" withStartTimestampInSeconds:impression1_ts];
- [bookKeeper recordNewImpressionForMessage:@"m2" withStartTimestampInSeconds:impression2_ts];
- [bookKeeper recordNewImpressionForMessage:@"m3" withStartTimestampInSeconds:impression3_ts];
- [bookKeeper clearImpressionsWithMessageList:@[ @"m1", @"m3" ]];
- impressions = [bookKeeper getImpressions];
- // Only impressions about m2 remains.
- XCTAssertEqual(1, [impressions count]);
- XCTAssertEqualObjects(impressions[0].messageID, @"m2");
- }
- @end
|