@@ -866,6 +866,83 @@ extension EventDispatcherTests_Batch {
866866 }
867867 }
868868
869+ // MARK: - Event Validation
870+
871+ // this test can be used for dumping batched events through logEvent notification which can be used for event-validation offline
872+ func testLogEventNotification_EventValidator( ) {
873+
874+ // change this number to create event sets with different batch size, but the same number of events to be compared
875+ eventDispatcher. batchSize = 3 // {1, 2, 3, 10}
876+
877+ eventDispatcher. timerInterval = 99999 // timer is big, won't fire
878+
879+ let optimizely = OptimizelyClient ( sdkKey: " SDKKey " ,
880+ eventDispatcher: eventDispatcher,
881+ defaultLogLevel: . debug)
882+
883+ var notifUrl : String ?
884+ var collections = [ [ String: Any] ] ( )
885+
886+ _ = optimizely. notificationCenter!. addLogEventNotificationListener { ( url, event) in
887+ notifUrl = url
888+ collections. append ( event)
889+ }
890+
891+ let datafile = OTUtils . loadJSONDatafile ( " api_datafile " ) !
892+ try ! optimizely. start ( datafile: datafile)
893+
894+ let experimentKey = " exp_with_audience "
895+ let userA = " 11111 "
896+ let userB = " 22222 "
897+ let userC = " 33333 "
898+ let eventKey = " event1 "
899+ let attributes : [ String : Any ? ] = [
900+ " testvar " : 32
901+ ]
902+ let eventTags : [ String : Any ] = [ " browser " : " chrome " ,
903+ " revenue " : 123 ,
904+ " value " : 32.5 ]
905+
906+ // 10 events total
907+
908+ _ = try ! optimizely. activate ( experimentKey: experimentKey, userId: userA)
909+ _ = try ! optimizely. activate ( experimentKey: experimentKey, userId: userB, attributes: attributes)
910+ _ = try ! optimizely. activate ( experimentKey: experimentKey, userId: userC)
911+ try ! optimizely. track ( eventKey: eventKey, userId: userC, eventTags: eventTags)
912+ try ! optimizely. track ( eventKey: eventKey, userId: userA)
913+ try ! optimizely. track ( eventKey: eventKey, userId: userA, eventTags: eventTags)
914+ try ! optimizely. track ( eventKey: eventKey, userId: userB)
915+ try ! optimizely. track ( eventKey: eventKey, userId: userB, eventTags: eventTags)
916+ try ! optimizely. track ( eventKey: eventKey, userId: userA, eventTags: eventTags)
917+ try ! optimizely. track ( eventKey: eventKey, userId: userC, eventTags: eventTags)
918+
919+ optimizely. close ( )
920+
921+ // merge collected log events in a single batched format to run with Event Validator
922+
923+ var merged = [ String: Any] ( )
924+ var visitors = [ [ String: Any] ] ( )
925+
926+ collections. enumerated ( ) . forEach { ( idx, event) in
927+ if idx == 0 {
928+ event. forEach { merged [ $0. key] = $0. value }
929+ }
930+
931+ visitors += event [ " visitors " ] as! [ [ String : Any ] ]
932+ }
933+ merged [ " visistors " ] = visitors
934+
935+ print ( " [Batched Events] collections --------------------------------------------- " )
936+ if let json = try ? JSONSerialization . data ( withJSONObject: merged) {
937+ let jsonStr = String ( bytes: json, encoding: . utf8) !
938+ print ( " \( jsonStr) " )
939+ }
940+ print ( " -------------------------------------------------------------- " )
941+
942+ XCTAssertEqual ( notifUrl, EventForDispatch . eventEndpoint)
943+ XCTAssertEqual ( visitors. count, 10 )
944+ }
945+
869946}
870947
871948// MARK: - iOS9 Devices
0 commit comments