@@ -316,8 +316,7 @@ extension EventDispatcherTests_Batch {
316316
317317 // flush
318318
319- eventDispatcher. flushEvents ( )
320- eventDispatcher. dispatcher. sync { }
319+ eventDispatcher. close ( )
321320
322321 XCTAssertEqual ( eventDispatcher. sendRequestedEvents. count, 1 , " all events should be batched together " )
323322 let batch = eventDispatcher. sendRequestedEvents [ 0 ]
@@ -345,9 +344,8 @@ extension EventDispatcherTests_Batch {
345344 ( kUrlA, batchEventB) ,
346345 ( kUrlA, batchEventA) ] )
347346
348- eventDispatcher. flushEvents ( )
349- eventDispatcher. dispatcher. sync { }
350-
347+ eventDispatcher. close ( )
348+
351349 XCTAssertEqual ( eventDispatcher. sendRequestedEvents. count, 1 )
352350 let batch = eventDispatcher. sendRequestedEvents [ 0 ]
353351 let batchedEvents = try ! JSONDecoder ( ) . decode ( BatchEvent . self, from: batch. body)
@@ -379,9 +377,8 @@ extension EventDispatcherTests_Batch {
379377 ( kUrlA, batchEventA) ,
380378 ( kUrlB, batchEventB) ] )
381379
382- eventDispatcher. flushEvents ( )
383- eventDispatcher. dispatcher. sync { }
384-
380+ eventDispatcher. close ( )
381+
385382 XCTAssertEqual ( eventDispatcher. sendRequestedEvents. count, 2 , " different urls should not be batched " )
386383
387384 // first 2 events batched together
@@ -428,9 +425,8 @@ extension EventDispatcherTests_Batch {
428425 eventDispatcher. dispatchEvent ( event: makeInvalidEventForDispatchWithWrongData ( ) , completionHandler: nil )
429426 eventDispatcher. dispatchEvent ( event: makeEventForDispatch ( url: kUrlA, event: batchEventA) , completionHandler: nil )
430427
431- eventDispatcher. flushEvents ( )
432- eventDispatcher. dispatcher. sync { }
433-
428+ eventDispatcher. close ( )
429+
434430 XCTAssertEqual ( eventDispatcher. sendRequestedEvents. count, 2 , " different urls should not be batched " )
435431
436432 // first 2 events batched together
@@ -480,9 +476,8 @@ extension EventDispatcherTests_Batch {
480476 dispatchMultipleEvents ( [ ( kUrlA, batchEventA) ,
481477 ( kUrlA, batchEventA) ] )
482478
483- eventDispatcher. flushEvents ( )
484- eventDispatcher. dispatcher. sync { }
485-
479+ eventDispatcher. close ( )
480+
486481 let maxFailureCount = 3 + 1 // DefaultEventDispatcher.maxFailureCount + 1
487482
488483 XCTAssertEqual ( eventDispatcher. sendRequestedEvents. count, maxFailureCount, " repeated the same request several times before giveup " )
@@ -506,8 +501,7 @@ extension EventDispatcherTests_Batch {
506501 eventDispatcher. forceError = false
507502
508503 // assume flushEvents called again on next timer fire
509- eventDispatcher. flushEvents ( )
510- eventDispatcher. dispatcher. sync { }
504+ eventDispatcher. close ( )
511505
512506 XCTAssertEqual ( eventDispatcher. sendRequestedEvents. count, maxFailureCount + 1 , " only one more since succeeded " )
513507 XCTAssertEqual ( eventDispatcher. sendRequestedEvents [ 3 ] , eventDispatcher. sendRequestedEvents [ 0 ] )
@@ -920,6 +914,74 @@ extension EventDispatcherTests_Batch {
920914
921915}
922916
917+ // MARK: - OptimizleyClient: Close()
918+
919+ extension EventDispatcherTests_Batch {
920+
921+ func testCloseForOptimizleyClinet( ) {
922+ // this tests timer-based dispatch, available for iOS 10+
923+ guard #available( iOS 10 . 0 , tvOS 10 . 0 , * ) else { return }
924+
925+ self . eventDispatcher = TestEventDispatcher ( eventFileName: uniqueFileName, removeDatafileObserver: false )
926+
927+ eventDispatcher. batchSize = 1000 // big, won't flush
928+ eventDispatcher. timerInterval = 99999 // timer is big, won't fire
929+
930+ let optimizely = OptimizelyClient ( sdkKey: " SDKKey " ,
931+ eventDispatcher: eventDispatcher,
932+ defaultLogLevel: . debug)
933+ let datafile = OTUtils . loadJSONDatafile ( " empty_datafile " ) !
934+
935+ // (1) should have no flush
936+
937+ eventDispatcher. exp = XCTestExpectation ( description: " timer " )
938+ eventDispatcher. exp? . isInverted = true
939+
940+ try ! optimizely. start ( datafile: datafile)
941+
942+ dispatchMultipleEvents ( [ ( kUrlA, batchEventA) ,
943+ ( kUrlA, batchEventA) ,
944+ ( kUrlA, batchEventA) ] )
945+
946+ wait ( for: [ eventDispatcher. exp!] , timeout: 3 )
947+ XCTAssertEqual ( eventDispatcher. sendRequestedEvents. count, 0 , " should not flush yet " )
948+
949+ // (2) should flush/batch all on close()
950+
951+ optimizely. close ( )
952+
953+ XCTAssertEqual ( eventDispatcher. sendRequestedEvents. count, 1 , " should flush on the revision change " )
954+ var batch = eventDispatcher. sendRequestedEvents [ 0 ]
955+ var batchedEvents = try ! JSONDecoder ( ) . decode ( BatchEvent . self, from: batch. body)
956+ XCTAssertEqual ( batchedEvents. visitors. count, 3 )
957+ eventDispatcher. sendRequestedEvents. removeAll ( )
958+
959+ // (3) should have no flush
960+
961+ eventDispatcher. exp = XCTestExpectation ( description: " timer " )
962+ eventDispatcher. exp? . isInverted = true
963+
964+ try ! optimizely. start ( datafile: datafile)
965+
966+ dispatchMultipleEvents ( [ ( kUrlA, batchEventB) ,
967+ ( kUrlA, batchEventA) ] )
968+
969+ wait ( for: [ eventDispatcher. exp!] , timeout: 3 )
970+ XCTAssertEqual ( eventDispatcher. sendRequestedEvents. count, 0 , " should not flush yet " )
971+
972+ // (4) should flush/batch all on close()
973+
974+ optimizely. close ( )
975+
976+ XCTAssertEqual ( eventDispatcher. sendRequestedEvents. count, 1 , " should flush on the revision change " )
977+ batch = eventDispatcher. sendRequestedEvents [ 0 ]
978+ batchedEvents = try ! JSONDecoder ( ) . decode ( BatchEvent . self, from: batch. body)
979+ XCTAssertEqual ( batchedEvents. visitors. count, 2 )
980+
981+ }
982+
983+ }
984+
923985// MARK: - Random testing
924986
925987extension EventDispatcherTests_Batch {
0 commit comments