@@ -866,6 +866,83 @@ extension EventDispatcherTests_Batch {
866
866
}
867
867
}
868
868
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
+
869
946
}
870
947
871
948
// MARK: - iOS9 Devices
0 commit comments