Skip to content

Commit 4b0d169

Browse files
authored
chore: add test case for event validator (#271)
* add test for event-validation support
1 parent 476e5c0 commit 4b0d169

File tree

1 file changed

+77
-0
lines changed

1 file changed

+77
-0
lines changed

Tests/OptimizelyTests-Common/EventDispatcherTests_Batch.swift

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)