Skip to content

Commit 4e53790

Browse files
cleanup tests that rely on immediate event dispatch
1 parent f7dc14a commit 4e53790

File tree

5 files changed

+49
-13
lines changed

5 files changed

+49
-13
lines changed

OptimizelySDK/Data Model/ProjectConfig.swift

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,41 @@ import Foundation
1919
class ProjectConfig {
2020

2121
var project: Project!
22+
2223
lazy var logger = HandlerRegistryService.shared.injectLogger()
2324

2425
// local runtime forcedVariations [UserId: [ExperimentId: VariationId]]
2526
// NOTE: experiment.forcedVariations use [ExperimentKey: VariationKey] instead of ids
2627

2728
var whitelistUsers = [String: [String: String]]()
2829

29-
var experimentKeyMap:[String:Experiment]?
30-
var experimentFeatureMap:[String:[String]]?
31-
var eventKeyMap:[String:Event]?
30+
lazy var experimentKeyMap:[String:Experiment]? = {
31+
var map = [String:Experiment]()
32+
_ = allExperiments.map({map[$0.key] = $0})
33+
return map
34+
}()
35+
36+
lazy var experimentFeatureMap:[String:[String]]? = {
37+
var experimentFeatureMap = [String:[String]]()
38+
_ = project.featureFlags.map({ (ff) in
39+
ff.experimentIds.map({
40+
if var arr = experimentFeatureMap[$0] {
41+
arr.append(ff.id)
42+
experimentFeatureMap[$0] = arr
43+
}
44+
else {
45+
experimentFeatureMap[$0] = [ff.id]
46+
}
47+
})
48+
})
49+
return experimentFeatureMap
50+
}()
51+
52+
lazy var eventKeyMap:[String:Event]? = {
53+
var eventKeyMap = [String:Event]()
54+
_ = project.events.map({eventKeyMap[$0.key] = $0 })
55+
return eventKeyMap
56+
}()
3257

3358
var _allExperiments:[Experiment]?
3459

@@ -42,13 +67,6 @@ class ProjectConfig {
4267
throw OptimizelyError.dataFileVersionInvalid(self.project.version)
4368
}
4469

45-
generateExperimentFeatureMap()
46-
47-
experimentKeyMap = [String:Experiment]()
48-
_ = allExperiments.map({experimentKeyMap?[$0.key] = $0})
49-
50-
eventKeyMap = [String:Event]()
51-
_ = project.events.map({eventKeyMap?[$0.key] = $0 })
5270
}
5371

5472
convenience init(datafile: String) throws {

OptimizelySDK/OptimizelyTests/OptimizelyTests-APIs/OptimizelyManagerTests_Evaluation.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,7 @@ class OptimizelyManagerTests_Evaluation: XCTestCase {
226226
]
227227

228228
let variationKey = try? optimizely.activate(experimentKey: experimentKey, userId: userId, attributes: attributes)
229+
optimizely.eventImitterQueue.sync {}
229230
XCTAssertNotNil(variationKey)
230231
XCTAssertNotNil(eventDispatcher.events.first)
231232
}

OptimizelySDK/OptimizelyTests/OptimizelyTests-Common/BatchEventBuilderTests_Attributes.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ class BatchEventBuilderTests_Attributes: XCTestCase {
201201

202202
func testEventAttributesWhenAttributesEmpty() {
203203
// clear all audience conditions to accept empty attributes
204-
var experiment = optimizely.config!.getExperiment(key: experimentKey)!
204+
var experiment = optimizely.config!.project!.experiments.filter({$0.key == experimentKey}).first!
205205
experiment.audienceConditions = nil
206206
experiment.audienceIds = []
207207
optimizely.config!.project!.experiments = [experiment]
@@ -223,7 +223,7 @@ class BatchEventBuilderTests_Attributes: XCTestCase {
223223

224224
func testEventAttributesWhenAttributesNil() {
225225
// clear all audience conditions to accept empty attributes
226-
var experiment = optimizely.config!.getExperiment(key: experimentKey)!
226+
var experiment = optimizely.config!.project!.experiments.filter({$0.key == experimentKey}).first!
227227
experiment.audienceConditions = nil
228228
experiment.audienceIds = []
229229
optimizely.config!.project!.experiments = [experiment]

OptimizelySDK/OptimizelyTests/OptimizelyTests-Common/BatchEventBuilderTests_EventTags.swift

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ class BatchEventBuilderTests_EventTags: XCTestCase {
4242
"check": false]
4343

4444
try! optimizely.track(eventKey: eventKey, userId: userId, attributes: nil, eventTags: eventTags)
45+
optimizely.eventImitterQueue.sync {}
4546
let de = getDispatchEvent(dispatcher: eventDispatcher)!
4647
let tags = de["tags"] as! [String: Any]
4748

@@ -60,6 +61,7 @@ class BatchEventBuilderTests_EventTags: XCTestCase {
6061
"value": 32.5]
6162

6263
try! optimizely.track(eventKey: eventKey, userId: userId, attributes: nil, eventTags: eventTags)
64+
optimizely.eventImitterQueue.sync {}
6365
let de = getDispatchEvent(dispatcher: eventDispatcher)!
6466
let tags = de["tags"] as! [String: Any]
6567

@@ -82,6 +84,7 @@ extension BatchEventBuilderTests_EventTags {
8284
"future": [1,2,3]]
8385

8486
try! optimizely.track(eventKey: eventKey, userId: userId, attributes: nil, eventTags: eventTags)
87+
optimizely.eventImitterQueue.sync {}
8588
let de = getDispatchEvent(dispatcher: eventDispatcher)!
8689
let tags = de["tags"] as! [String: Any]
8790

@@ -96,6 +99,7 @@ extension BatchEventBuilderTests_EventTags {
9699
"tooBig": OTUtils.positiveTooBigValue]
97100

98101
try! optimizely.track(eventKey: eventKey, userId: userId, attributes: nil, eventTags: eventTags)
102+
optimizely.eventImitterQueue.sync {}
99103
let de = getDispatchEvent(dispatcher: eventDispatcher)!
100104
let tags = de["tags"] as! [String: Any]
101105

@@ -117,6 +121,7 @@ extension BatchEventBuilderTests_EventTags {
117121
"value": "bar"]
118122

119123
try! optimizely.track(eventKey: eventKey, userId: userId, attributes: nil, eventTags: eventTags)
124+
optimizely.eventImitterQueue.sync {}
120125
let de = getDispatchEvent(dispatcher: eventDispatcher)!
121126
let tags = de["tags"] as! [String: Any]
122127

@@ -134,6 +139,7 @@ extension BatchEventBuilderTests_EventTags {
134139
"value": false]
135140

136141
try! optimizely.track(eventKey: eventKey, userId: userId, attributes: nil, eventTags: eventTags)
142+
optimizely.eventImitterQueue.sync {}
137143
let de = getDispatchEvent(dispatcher: eventDispatcher)!
138144
let tags = de["tags"] as! [String: Any]
139145

@@ -151,6 +157,7 @@ extension BatchEventBuilderTests_EventTags {
151157
"value": 30]
152158

153159
try! optimizely.track(eventKey: eventKey, userId: userId, attributes: nil, eventTags: eventTags)
160+
optimizely.eventImitterQueue.sync {}
154161
let de = getDispatchEvent(dispatcher: eventDispatcher)!
155162
let tags = de["tags"] as! [String: Any]
156163

@@ -173,6 +180,7 @@ extension BatchEventBuilderTests_EventTags {
173180
"value": OTUtils.positiveTooBigValue]
174181

175182
try! optimizely.track(eventKey: eventKey, userId: userId, attributes: nil, eventTags: eventTags)
183+
optimizely.eventImitterQueue.sync {}
176184
let de = getDispatchEvent(dispatcher: eventDispatcher)!
177185
let tags = de["tags"] as! [String: Any]
178186

@@ -190,6 +198,7 @@ extension BatchEventBuilderTests_EventTags {
190198
"value": OTUtils.negativeTooBigValue]
191199

192200
try! optimizely.track(eventKey: eventKey, userId: userId, attributes: nil, eventTags: eventTags)
201+
optimizely.eventImitterQueue.sync {}
193202
let de = getDispatchEvent(dispatcher: eventDispatcher)!
194203
let tags = de["tags"] as! [String: Any]
195204

@@ -213,6 +222,7 @@ extension BatchEventBuilderTests_EventTags {
213222
"value": 0]
214223

215224
try! optimizely.track(eventKey: eventKey, userId: userId, attributes: nil, eventTags: eventTags)
225+
optimizely.eventImitterQueue.sync {}
216226
let de = getDispatchEvent(dispatcher: eventDispatcher)!
217227
let tags = de["tags"] as! [String: Any]
218228

@@ -230,6 +240,7 @@ extension BatchEventBuilderTests_EventTags {
230240
"value": 1]
231241

232242
try! optimizely.track(eventKey: eventKey, userId: userId, attributes: nil, eventTags: eventTags)
243+
optimizely.eventImitterQueue.sync {}
233244
let de = getDispatchEvent(dispatcher: eventDispatcher)!
234245
let tags = de["tags"] as! [String: Any]
235246

@@ -247,6 +258,7 @@ extension BatchEventBuilderTests_EventTags {
247258
"value": -1]
248259

249260
try! optimizely.track(eventKey: eventKey, userId: userId, attributes: nil, eventTags: eventTags)
261+
optimizely.eventImitterQueue.sync {}
250262
let de = getDispatchEvent(dispatcher: eventDispatcher)!
251263
let tags = de["tags"] as! [String: Any]
252264

@@ -270,6 +282,7 @@ extension BatchEventBuilderTests_EventTags {
270282
"value": NSNumber(value: 3.15)]
271283

272284
try! optimizely.track(eventKey: eventKey, userId: userId, attributes: nil, eventTags: eventTags)
285+
optimizely.eventImitterQueue.sync {}
273286
let de = getDispatchEvent(dispatcher: eventDispatcher)!
274287
let tags = de["tags"] as! [String: Any]
275288

@@ -291,6 +304,7 @@ extension BatchEventBuilderTests_EventTags {
291304
"value": Float(32)]
292305

293306
try! optimizely.track(eventKey: eventKey, userId: userId, attributes: nil, eventTags: eventTags)
307+
optimizely.eventImitterQueue.sync {}
294308
let de = getDispatchEvent(dispatcher: eventDispatcher)!
295309
let tags = de["tags"] as! [String: Any]
296310

OptimizelySDK/OptimizelyTests/OptimizelyTests-Common/BatchEventBuilderTests_Events.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ class BatchEventBuilderTests_Events: XCTestCase {
5050
_ = try! optimizely.activate(experimentKey: experimentKey,
5151
userId: userId,
5252
attributes: attributes)
53+
optimizely.eventImitterQueue.sync {
54+
}
5355

5456
let eventForDispatch = eventDispatcher.events.first!
5557
let json = JSON(eventForDispatch.body)
@@ -105,7 +107,7 @@ class BatchEventBuilderTests_Events: XCTestCase {
105107
userId: userId,
106108
attributes: attributes,
107109
eventTags: eventTags)
108-
110+
optimizely.eventImitterQueue.sync {}
109111
let eventForDispatch = eventDispatcher.events.first!
110112
let json = JSON(eventForDispatch.body)
111113
let event = json.dictionaryValue
@@ -158,6 +160,7 @@ class BatchEventBuilderTests_Events: XCTestCase {
158160
userId: userId,
159161
attributes: nil,
160162
eventTags: eventTags)
163+
optimizely.eventImitterQueue.sync {}
161164
XCTAssert(false, "event should not be created for an invalid event key")
162165
} catch {
163166
XCTAssert(true)

0 commit comments

Comments
 (0)