Skip to content

Commit 8cbb181

Browse files
committed
unit test for session duration redisplay
1 parent 60bb6b1 commit 8cbb181

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed

iOS_SDK/OneSignalSDK/UnitTests/InAppMessagingIntegrationTests.m

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1422,6 +1422,64 @@ - (void)testIAMHTMLLoadWithDefaultLanguage {
14221422
XCTAssertTrue([url containsString:OS_TEST_MESSAGE_ID]);
14231423
}
14241424

1425+
- (void)testInAppMessageDisplayMultipleTimesSessionDurationTrigger {
1426+
[OneSignal pauseInAppMessages:NO];
1427+
let trigger = [OSTrigger dynamicTriggerWithKind:OS_DYNAMIC_TRIGGER_KIND_SESSION_TIME withOperator:OSTriggerOperatorTypeGreaterThan withValue:@0.05];
1428+
let message = [OSInAppMessageTestHelper testMessageWithTriggers:@[@[trigger]] withRedisplayLimit:5 delay:@30];
1429+
let registrationJson = [OSInAppMessageTestHelper testRegistrationJsonWithMessages:@[message.jsonRepresentation]];
1430+
1431+
// Init OneSignal IAM with redisplay
1432+
[self initOneSignalWithRegistrationJSON:registrationJson];
1433+
1434+
// No schedule should happen, IAM should evaluate to true
1435+
XCTAssertEqual(OSMessagingControllerOverrider.messageDisplayQueue.count, 1);
1436+
1437+
// Dismiss IAM will make display quantity increase and last display time to change
1438+
[OSMessagingControllerOverrider dismissCurrentMessage];
1439+
// Check IAMs was removed from queue
1440+
XCTAssertEqual(OSMessagingControllerOverrider.messageDisplayQueue.count, 0);
1441+
// Check if data after dismiss is set correctly
1442+
XCTAssertEqual(OSMessagingControllerOverrider.messagesForRedisplay.count, 1);
1443+
let displayQuantity = OSMessagingControllerOverrider.messagesForRedisplay.allValues[0].displayStats.displayQuantity;
1444+
let displayTime = OSMessagingControllerOverrider.messagesForRedisplay.allValues[0].displayStats.lastDisplayTime;
1445+
XCTAssertEqual(displayQuantity, 1);
1446+
XCTAssertTrue(displayTime > 0);
1447+
1448+
// 3. Kill the app and wait 31 seconds
1449+
[UnitTestCommonMethods backgroundApp];
1450+
[UnitTestCommonMethods clearStateForAppRestart:self];
1451+
[NSDateOverrider advanceSystemTimeBy:31];
1452+
[UnitTestCommonMethods runBackgroundThreads];
1453+
1454+
[OSInAppMessageTestHelper testRegistrationJsonWithMessages:@[message]];
1455+
1456+
// Init OneSignal IAM with redisplay
1457+
[UnitTestCommonMethods initOneSignalAndThreadWait];
1458+
1459+
// No schedule should happen since session time period is very small, should evaluate to true on first run
1460+
// Wait for redisplay logic
1461+
let expectation = [self expectationWithDescription:@"wait for message to show"];
1462+
expectation.expectedFulfillmentCount = 1;
1463+
1464+
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
1465+
XCTAssertEqual(OSMessagingControllerOverrider.messageDisplayQueue.count, 1);
1466+
1467+
[expectation fulfill];
1468+
});
1469+
1470+
[self waitForExpectations:@[expectation] timeout:1.5];
1471+
1472+
[OSMessagingControllerOverrider dismissCurrentMessage];
1473+
// Check IAMs was removed from queue
1474+
XCTAssertEqual(OSMessagingControllerOverrider.messageDisplayQueue.count, 0);
1475+
// Check if data after dismiss is set correctly
1476+
XCTAssertEqual(OSMessagingControllerOverrider.messagesForRedisplay.count, 1);
1477+
let secondDisplayQuantity = OSMessagingControllerOverrider.messagesForRedisplay.allValues[0].displayStats.displayQuantity;
1478+
let secondDisplayTime = OSMessagingControllerOverrider.messagesForRedisplay.allValues[0].displayStats.lastDisplayTime;
1479+
XCTAssertEqual(secondDisplayQuantity, 2);
1480+
XCTAssertTrue(secondDisplayTime - displayTime > 30);
1481+
}
1482+
14251483
// Helper method that adds an OSInAppMessage to the IAM messageDisplayQueue
14261484
// Mock response JSON and initializes the OneSignal SDK
14271485
- (void)initOneSignalWithInAppMessage:(OSInAppMessage *)message {

0 commit comments

Comments
 (0)