Skip to content

Commit e30fb34

Browse files
authored
Merge pull request #325 from Iterable/test/MOB-1519-inapppresenter-tests
[MOB-1519] inapppresenter tests (part 1)
2 parents dc2979d + 9344f2f commit e30fb34

File tree

3 files changed

+77
-3
lines changed

3 files changed

+77
-3
lines changed

swift-sdk.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
55B37FEE229F59290042F13A /* InAppPersistenceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55B37FED229F59290042F13A /* InAppPersistenceTests.swift */; };
2424
55B5498423973B5C00243E87 /* InboxSessionManagerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55B5498323973B5C00243E87 /* InboxSessionManagerTests.swift */; };
2525
55B549862397462300243E87 /* InboxImpressionTrackerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55B549852397462300243E87 /* InboxImpressionTrackerTests.swift */; };
26+
55CC257B2462064F00A77FD5 /* InAppPresenterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55CC257A2462064F00A77FD5 /* InAppPresenterTests.swift */; };
2627
55D54656239AE5750093ED1E /* LoggingInternal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55D54655239AE5750093ED1E /* LoggingInternal.swift */; };
2728
55E6F460238E066400808BCE /* DeferredDeepLinkTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E6F45D238E066400808BCE /* DeferredDeepLinkTests.swift */; };
2829
55E6F462238E066400808BCE /* DeepLinkTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55E6F45E238E066400808BCE /* DeepLinkTests.swift */; };
@@ -289,6 +290,7 @@
289290
55B37FED229F59290042F13A /* InAppPersistenceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InAppPersistenceTests.swift; sourceTree = "<group>"; };
290291
55B5498323973B5C00243E87 /* InboxSessionManagerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InboxSessionManagerTests.swift; sourceTree = "<group>"; };
291292
55B549852397462300243E87 /* InboxImpressionTrackerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InboxImpressionTrackerTests.swift; sourceTree = "<group>"; };
293+
55CC257A2462064F00A77FD5 /* InAppPresenterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InAppPresenterTests.swift; sourceTree = "<group>"; };
292294
55D54655239AE5750093ED1E /* LoggingInternal.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoggingInternal.swift; sourceTree = "<group>"; };
293295
55E6F45D238E066400808BCE /* DeferredDeepLinkTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeferredDeepLinkTests.swift; sourceTree = "<group>"; };
294296
55E6F45E238E066400808BCE /* DeepLinkTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeepLinkTests.swift; sourceTree = "<group>"; };
@@ -745,6 +747,7 @@
745747
5531CDAD22A9C992000D05E2 /* ClassExtensionsTests.swift */,
746748
55B37FC0229620D20042F13A /* CommerceItemTests.swift */,
747749
55E6F45E238E066400808BCE /* DeepLinkTests.swift */,
750+
55CC257A2462064F00A77FD5 /* InAppPresenterTests.swift */,
748751
55E6F45D238E066400808BCE /* DeferredDeepLinkTests.swift */,
749752
551E5C0F234D485A005FEE9E /* DeprecatedFunctionsTests.swift */,
750753
AC750A49234CD67900561902 /* InAppHelperTests.swift */,
@@ -1525,6 +1528,7 @@
15251528
551E5C10234D485A005FEE9E /* DeprecatedFunctionsTests.swift in Sources */,
15261529
ACED4C01213F50B30055A497 /* LoggingTests.swift in Sources */,
15271530
55B37FC42297135F0042F13A /* NotificationMetadataTests.swift in Sources */,
1531+
55CC257B2462064F00A77FD5 /* InAppPresenterTests.swift in Sources */,
15281532
AC4BA00224163D8F007359F1 /* IterableHtmlMessageViewControllerTests.swift in Sources */,
15291533
55B37FC822975A840042F13A /* InboxMessageViewModelTests.swift in Sources */,
15301534
55E6F462238E066400808BCE /* DeepLinkTests.swift in Sources */,

swift-sdk/Internal/InAppPresenter.swift

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,18 @@ import UIKit
88
class InAppPresenter {
99
static var isPresenting = false
1010

11-
private let delayInterval: TimeInterval = 0.75
11+
private let maxDelay: TimeInterval
1212

1313
private let topViewController: UIViewController
1414
private let htmlMessageViewController: IterableHtmlMessageViewController
1515
private var delayTimer: Timer?
1616

17-
init(topViewController: UIViewController, htmlMessageViewController: IterableHtmlMessageViewController) {
17+
init(topViewController: UIViewController, htmlMessageViewController: IterableHtmlMessageViewController, maxDelay: TimeInterval = 0.75) {
1818
ITBInfo()
1919

2020
self.topViewController = topViewController
2121
self.htmlMessageViewController = htmlMessageViewController
22+
self.maxDelay = maxDelay
2223

2324
// shouldn't be necessary, but in case there's some kind of race condition
2425
// that leaves it hanging as true, it should be false at this point
@@ -38,7 +39,7 @@ class InAppPresenter {
3839

3940
if #available(iOS 10.0, *) {
4041
DispatchQueue.main.async {
41-
self.delayTimer = Timer.scheduledTimer(withTimeInterval: self.delayInterval, repeats: false) { _ in
42+
self.delayTimer = Timer.scheduledTimer(withTimeInterval: self.maxDelay, repeats: false) { _ in
4243
ITBInfo("delayTimer called")
4344

4445
self.delayTimer = nil
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
//
2+
// Created by Jay Kim on 5/5/20.
3+
// Copyright © 2020 Iterable. All rights reserved.
4+
//
5+
6+
import UIKit
7+
import WebKit
8+
import XCTest
9+
10+
@testable import IterableSDK
11+
12+
class InAppPresenterTests: XCTestCase {
13+
func testInAppPresenterDelegateExistence() {
14+
let htmlMessageViewController = IterableHtmlMessageViewController(parameters: getEmptyParameters())
15+
16+
let inAppPresenter = InAppPresenter(topViewController: UIViewController(),
17+
htmlMessageViewController: htmlMessageViewController)
18+
19+
// a "no-op" to suppress warning
20+
_ = inAppPresenter.self
21+
22+
XCTAssertNotNil(htmlMessageViewController.presenter)
23+
}
24+
25+
func testInAppPresenterIsPresentingOnInit() {
26+
_ = InAppPresenter(topViewController: UIViewController(),
27+
htmlMessageViewController: getEmptyHtmlMessageViewController())
28+
29+
XCTAssertFalse(InAppPresenter.isPresenting)
30+
}
31+
32+
func testInAppPresenterTimerFinished() {
33+
let expectation1 = expectation(description: "delay timer executed")
34+
35+
let topViewController = UIViewController()
36+
let maxDelay = 0.75
37+
let inAppPresenter = InAppPresenter(topViewController: topViewController,
38+
htmlMessageViewController: getEmptyHtmlMessageViewController(),
39+
maxDelay: maxDelay)
40+
41+
inAppPresenter.show()
42+
43+
XCTAssertTrue(InAppPresenter.isPresenting)
44+
45+
DispatchQueue.main.asyncAfter(deadline: .now() + maxDelay + 0.1) {
46+
XCTAssertFalse(InAppPresenter.isPresenting)
47+
48+
expectation1.fulfill()
49+
}
50+
51+
wait(for: [expectation1], timeout: testExpectationTimeout)
52+
}
53+
54+
private func getEmptyParameters() -> IterableHtmlMessageViewController.Parameters {
55+
return IterableHtmlMessageViewController.Parameters(html: "", isModal: false)
56+
}
57+
58+
private func getEmptyHtmlMessageViewController() -> IterableHtmlMessageViewController {
59+
return IterableHtmlMessageViewController(parameters: getEmptyParameters())
60+
}
61+
62+
private func getEmptyHtmlInAppContent() -> IterableHtmlInAppContent {
63+
return IterableHtmlInAppContent(edgeInsets: .zero, backgroundAlpha: 0.0, html: "")
64+
}
65+
66+
private func getEmptyInAppMessage() -> IterableInAppMessage {
67+
return IterableInAppMessage(messageId: "wasd", campaignId: 1, content: getEmptyHtmlInAppContent())
68+
}
69+
}

0 commit comments

Comments
 (0)