Skip to content

Commit 15ebe86

Browse files
Fix tests for memory leak
1 parent 0984123 commit 15ebe86

File tree

1 file changed

+48
-49
lines changed

1 file changed

+48
-49
lines changed

tests/swift-sdk-swift-tests/InAppTests.swift

Lines changed: 48 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -69,24 +69,22 @@ class InAppTests: XCTestCase {
6969
expectation1.fulfill()
7070
}
7171

72-
var internalApi: IterableAPIInternal!
7372
let config = IterableConfig()
7473
let mockUrlDelegate = MockUrlDelegate(returnValue: true)
7574
mockUrlDelegate.callback = { _, _ in
76-
XCTAssertEqual(internalApi.inAppManager.getMessages().count, 0)
7775
expectation2.fulfill()
7876
}
7977
config.urlDelegate = mockUrlDelegate
8078

81-
internalApi = IterableAPIInternal.initializeForTesting(
79+
let internalApi = IterableAPIInternal.initializeForTesting(
8280
config: config,
8381
inAppFetcher: mockInAppFetcher,
8482
inAppDisplayer: mockInAppDisplayer
8583
)
8684

87-
mockInAppFetcher.mockInAppPayloadFromServer(internalApi: internalApi, TestInAppPayloadGenerator.createPayloadWithUrl(numMessages: 1)).onSuccess { _ in
85+
mockInAppFetcher.mockInAppPayloadFromServer(internalApi: internalApi, TestInAppPayloadGenerator.createPayloadWithUrl(numMessages: 1)).onSuccess { [weak internalApi] _ in
8886
// first message has been processed by now
89-
XCTAssertEqual(internalApi.inAppManager.getMessages().count, 0)
87+
XCTAssertEqual(internalApi?.inAppManager.getMessages().count, 0)
9088
expectation3.fulfill()
9189
}
9290

@@ -117,9 +115,9 @@ class InAppTests: XCTestCase {
117115
inAppDisplayer: mockInAppDisplayer
118116
)
119117

120-
mockInAppFetcher.mockInAppPayloadFromServer(internalApi: internalApi, TestInAppPayloadGenerator.createPayloadWithUrl(numMessages: 1)).onSuccess { _ in
121-
XCTAssertEqual(internalApi.inAppManager.getMessages().count, 1)
122-
XCTAssertEqual(internalApi.inAppManager.getMessages()[0].didProcessTrigger, true)
118+
mockInAppFetcher.mockInAppPayloadFromServer(internalApi: internalApi, TestInAppPayloadGenerator.createPayloadWithUrl(numMessages: 1)).onSuccess { [weak internalApi] _ in
119+
XCTAssertEqual(internalApi?.inAppManager.getMessages().count, 1)
120+
XCTAssertEqual(internalApi?.inAppManager.getMessages()[0].didProcessTrigger, true)
123121

124122
expectation2.fulfill()
125123
}
@@ -206,7 +204,11 @@ class InAppTests: XCTestCase {
206204
inAppDisplayer: mockInAppDisplayer
207205
)
208206

209-
mockInAppFetcher.mockInAppPayloadFromServer(internalApi: internalApi, payload).onSuccess { _ in
207+
mockInAppFetcher.mockInAppPayloadFromServer(internalApi: internalApi, payload).onSuccess { [weak internalApi] _ in
208+
guard let internalApi = internalApi else {
209+
XCTFail("Expected internalApi to be not nil")
210+
return
211+
}
210212
let messages = internalApi.inAppManager.getMessages()
211213
XCTAssertEqual(messages.count, 3)
212214
XCTAssertEqual(Set(messages.map { $0.didProcessTrigger }), Set([true, true, true]))
@@ -222,11 +224,9 @@ class InAppTests: XCTestCase {
222224
func testAutoShowInAppOpenUrlByDefault() {
223225
let expectation1 = expectation(description: "testAutoShowInAppOpenUrlByDefault")
224226

225-
var internalApi: IterableAPIInternal!
226227
let mockInAppFetcher = MockInAppFetcher()
227228
let mockUrlOpener = MockUrlOpener { url in
228229
XCTAssertEqual(url, TestInAppPayloadGenerator.getClickedUrl(index: 1))
229-
XCTAssertEqual(internalApi.inAppManager.getMessages().count, 0)
230230
expectation1.fulfill()
231231
}
232232

@@ -235,7 +235,7 @@ class InAppTests: XCTestCase {
235235
mockInAppDisplayer.click(url: TestInAppPayloadGenerator.getClickedUrl(index: 1))
236236
}
237237

238-
internalApi = IterableAPIInternal.initializeForTesting(
238+
let internalApi = IterableAPIInternal.initializeForTesting(
239239
inAppFetcher: mockInAppFetcher,
240240
inAppDisplayer: mockInAppDisplayer,
241241
urlOpener: mockUrlOpener
@@ -363,7 +363,11 @@ class InAppTests: XCTestCase {
363363
urlOpener: mockUrlOpener
364364
)
365365

366-
mockInAppFetcher.mockInAppPayloadFromServer(internalApi: internalApi, TestInAppPayloadGenerator.createPayloadWithUrl(numMessages: 1)).onSuccess { _ in
366+
mockInAppFetcher.mockInAppPayloadFromServer(internalApi: internalApi, TestInAppPayloadGenerator.createPayloadWithUrl(numMessages: 1)).onSuccess { [weak internalApi] _ in
367+
guard let internalApi = internalApi else {
368+
XCTFail("Expected internalApi to be not nil")
369+
return
370+
}
367371
let messages = internalApi.inAppManager.getMessages()
368372
XCTAssertEqual(messages.count, 1)
369373

@@ -374,13 +378,14 @@ class InAppTests: XCTestCase {
374378
}
375379

376380
wait(for: [expectation1, expectation2], timeout: testExpectationTimeout)
381+
382+
XCTAssertEqual(internalApi.inAppManager.getMessages().count, 0)
377383
}
378-
384+
379385
func testShowInAppWithNoConsume() {
380-
let expectation1 = expectation(description: "testShowInAppWithNoConsume")
386+
let expectation1 = expectation(description: "testShowInAppWithConsume")
381387
let expectation2 = expectation(description: "url opened")
382388

383-
var internalApi: IterableAPIInternal!
384389
let mockInAppFetcher = MockInAppFetcher()
385390

386391
let mockInAppDisplayer = MockInAppDisplayer()
@@ -390,41 +395,42 @@ class InAppTests: XCTestCase {
390395

391396
let mockUrlOpener = MockUrlOpener { url in
392397
XCTAssertEqual(url, TestInAppPayloadGenerator.getClickedUrl(index: 1))
393-
394-
let messages = internalApi.inAppManager.getMessages()
395-
XCTAssertEqual(messages.count, 1)
396-
XCTAssertEqual(messages[0].didProcessTrigger, true)
397398
expectation2.fulfill()
398399
}
399400

400401
let config = IterableConfig()
401402
config.inAppDelegate = MockInAppDelegate(showInApp: .skip)
402403

403-
internalApi = IterableAPIInternal.initializeForTesting(
404+
let internalApi = IterableAPIInternal.initializeForTesting(
404405
config: config,
405406
inAppFetcher: mockInAppFetcher,
406407
inAppDisplayer: mockInAppDisplayer,
407408
urlOpener: mockUrlOpener
408409
)
409410

410-
mockInAppFetcher.mockInAppPayloadFromServer(internalApi: internalApi, TestInAppPayloadGenerator.createPayloadWithUrl(numMessages: 1)).onSuccess { _ in
411+
mockInAppFetcher.mockInAppPayloadFromServer(internalApi: internalApi, TestInAppPayloadGenerator.createPayloadWithUrl(numMessages: 1)).onSuccess { [weak internalApi] _ in
412+
guard let internalApi = internalApi else {
413+
XCTFail("Expected internalApi to be not nil")
414+
return
415+
}
411416
let messages = internalApi.inAppManager.getMessages()
412-
// Now show the first message, but don't consume
417+
XCTAssertEqual(messages.count, 1)
418+
413419
internalApi.inAppManager.show(message: messages[0], consume: false) { clickedUrl in
414420
XCTAssertEqual(clickedUrl, TestInAppPayloadGenerator.getClickedUrl(index: 1))
415421
expectation1.fulfill()
416422
}
417423
}
418424

419425
wait(for: [expectation1, expectation2], timeout: testExpectationTimeout)
426+
427+
XCTAssertEqual(internalApi.inAppManager.getMessages().count, 1)
420428
}
421-
429+
422430
func testShowInAppWithCustomAction() {
423431
let expectation1 = expectation(description: "testShowInAppWithCustomAction")
424432
let expectation2 = expectation(description: "custom action called")
425-
let expectation3 = expectation(description: "count reduces")
426-
427-
var internalApi: IterableAPIInternal!
433+
428434
let mockInAppFetcher = MockInAppFetcher()
429435

430436
let mockInAppDisplayer = MockInAppDisplayer()
@@ -436,24 +442,24 @@ class InAppTests: XCTestCase {
436442
mockCustomActionDelegate.callback = { customActionName, context in
437443
XCTAssertEqual(customActionName, TestInAppPayloadGenerator.getCustomActionName(index: 1))
438444
XCTAssertEqual(context.source, .inApp)
439-
DispatchQueue.main.asyncAfter(deadline: .now() + 0.05) {
440-
XCTAssertEqual(internalApi.inAppManager.getMessages().count, 0)
441-
expectation3.fulfill()
442-
}
443445
expectation2.fulfill()
444446
}
445447

446448
let config = IterableConfig()
447449
config.inAppDelegate = MockInAppDelegate(showInApp: .skip)
448450
config.customActionDelegate = mockCustomActionDelegate
449451

450-
internalApi = IterableAPIInternal.initializeForTesting(
452+
let internalApi = IterableAPIInternal.initializeForTesting(
451453
config: config,
452454
inAppFetcher: mockInAppFetcher,
453455
inAppDisplayer: mockInAppDisplayer
454456
)
455457

456-
mockInAppFetcher.mockInAppPayloadFromServer(internalApi: internalApi, TestInAppPayloadGenerator.createPayloadWithUrl(numMessages: 1)).onSuccess { _ in
458+
mockInAppFetcher.mockInAppPayloadFromServer(internalApi: internalApi, TestInAppPayloadGenerator.createPayloadWithUrl(numMessages: 1)).onSuccess { [weak internalApi] _ in
459+
guard let internalApi = internalApi else {
460+
XCTFail("Expected internalApi to be not nil")
461+
return
462+
}
457463
let messages = internalApi.inAppManager.getMessages()
458464
XCTAssertEqual(messages.count, 1, "expected 1 messages here")
459465

@@ -463,32 +469,26 @@ class InAppTests: XCTestCase {
463469
}
464470
}
465471

466-
wait(for: [expectation1, expectation2, expectation3], timeout: testExpectationTimeout)
472+
wait(for: [expectation1, expectation2/*, expectation3*/], timeout: testExpectationTimeout)
473+
XCTAssertEqual(internalApi.inAppManager.getMessages().count, 0)
467474
}
468475

469476
func testShowInAppWithIterableCustomActionDelete() {
470-
var internalApi: IterableAPIInternal!
471-
let expectation1 = expectation(description: "correct number of messages")
472-
let predicate = NSPredicate { (_, _) -> Bool in
473-
internalApi.inAppManager.getMessages().count == 0
474-
}
475-
let expectation2 = expectation(for: predicate, evaluatedWith: nil, handler: nil)
476-
477+
let expectation1 = expectation(description: "message is shown")
478+
477479
let mockInAppFetcher = MockInAppFetcher()
478-
479480
let iterableDeleteUrl = "iterable://delete"
480481
let mockInAppDisplayer = MockInAppDisplayer()
481482
mockInAppDisplayer.onShow.onSuccess { _ in
482-
let count = internalApi.inAppManager.getMessages().count
483-
XCTAssertEqual(count, 1)
484483
mockInAppDisplayer.click(url: URL(string: iterableDeleteUrl)!)
484+
expectation1.fulfill()
485485
}
486486

487487
let config = IterableConfig()
488488
config.inAppDelegate = MockInAppDelegate(showInApp: .show)
489489
config.logDelegate = AllLogDelegate()
490490

491-
internalApi = IterableAPIInternal.initializeForTesting(
491+
let internalApi = IterableAPIInternal.initializeForTesting(
492492
config: config,
493493
inAppFetcher: mockInAppFetcher,
494494
inAppDisplayer: mockInAppDisplayer
@@ -509,12 +509,11 @@ class InAppTests: XCTestCase {
509509
}
510510
""".toJsonDict()
511511

512-
mockInAppFetcher.mockInAppPayloadFromServer(internalApi: internalApi, payload).onSuccess { _ in
513-
expectation1.fulfill()
514-
}
512+
mockInAppFetcher.mockInAppPayloadFromServer(internalApi: internalApi, payload)
515513

516514
wait(for: [expectation1], timeout: testExpectationTimeout)
517-
wait(for: [expectation2], timeout: testExpectationTimeout)
515+
516+
XCTAssertEqual(internalApi.inAppManager.getMessages().count, 0)
518517
}
519518

520519
func testShowInAppWithIterableCustomActionDismiss() {

0 commit comments

Comments
 (0)