Skip to content

Commit 87e902a

Browse files
authored
Added enabled to decision metadata. (#376)
1 parent abf9b23 commit 87e902a

File tree

5 files changed

+26
-13
lines changed

5 files changed

+26
-13
lines changed

Sources/Data Model/DispatchEvents/BatchEvent.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,12 +84,15 @@ struct DecisionMetadata: Codable, Equatable {
8484
let ruleKey: String
8585
let flagKey: String
8686
let variationKey: String
87+
let enabled: Bool
88+
8789

8890
enum CodingKeys: String, CodingKey {
8991
case ruleType = "rule_type"
9092
case ruleKey = "rule_key"
9193
case flagKey = "flag_key"
9294
case variationKey = "variation_key"
95+
case enabled = "enabled"
9396
}
9497
}
9598

Sources/Implementation/Events/BatchEventBuilder.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,14 @@ class BatchEventBuilder {
2929
userId: String,
3030
attributes: OptimizelyAttributes?,
3131
flagKey: String,
32-
ruleType: String) -> Data? {
32+
ruleType: String,
33+
enabled: Bool) -> Data? {
3334

3435
if (ruleType == Constants.DecisionSource.rollout.rawValue || variation == nil) && !config.sendFlagDecisions {
3536
return nil
3637
}
3738

38-
let metaData = DecisionMetadata(ruleType: ruleType, ruleKey: experiment?.key ?? "", flagKey: flagKey, variationKey: variation?.key ?? "")
39+
let metaData = DecisionMetadata(ruleType: ruleType, ruleKey: experiment?.key ?? "", flagKey: flagKey, variationKey: variation?.key ?? "", enabled: enabled)
3940

4041
let decision = Decision(variationID: variation?.id ?? "",
4142
campaignID: experiment?.layerId ?? "",

Sources/Optimizely/OptimizelyClient.swift

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,8 @@ open class OptimizelyClient: NSObject {
260260
userId: userId,
261261
attributes: attributes,
262262
flagKey: "",
263-
ruleType: Constants.DecisionSource.experiment.rawValue)
263+
ruleType: Constants.DecisionSource.experiment.rawValue,
264+
enabled: true)
264265

265266
return variation.key
266267
}
@@ -387,7 +388,7 @@ open class OptimizelyClient: NSObject {
387388
logger.i(.featureNotEnabledForUser(featureKey, userId))
388389
}
389390

390-
sendImpressionEvent(experiment: pair?.experiment, variation: pair?.variation, userId: userId, attributes: attributes, flagKey: featureKey, ruleType: source)
391+
sendImpressionEvent(experiment: pair?.experiment, variation: pair?.variation, userId: userId, attributes: attributes, flagKey: featureKey, ruleType: source, enabled: featureEnabled)
391392

392393
sendDecisionNotification(decisionType: .feature,
393394
userId: userId,
@@ -745,7 +746,8 @@ extension OptimizelyClient {
745746
userId: String,
746747
attributes: OptimizelyAttributes? = nil,
747748
flagKey: String,
748-
ruleType: String) {
749+
ruleType: String,
750+
enabled: Bool) {
749751

750752
// non-blocking (event data serialization takes time)
751753
eventLock.async {
@@ -757,7 +759,8 @@ extension OptimizelyClient {
757759
userId: userId,
758760
attributes: attributes,
759761
flagKey: flagKey,
760-
ruleType: ruleType) else {
762+
ruleType: ruleType,
763+
enabled: enabled) else {
761764
self.logger.e(OptimizelyError.eventBuildFailure(DispatchEvent.activateEventKey))
762765
return
763766
}

Tests/OptimizelyTests-APIs/OptimizelyClientTests_Others.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,7 @@ class OptimizelyClientTests_Others: XCTestCase {
290290
// set invalid (infinity) to attribute values, which will cause JSONEncoder.encode exception
291291
let attributes = ["testvar": Double.infinity]
292292

293-
optimizely.sendImpressionEvent(experiment: experiment, variation: variation, userId: kUserId, attributes: attributes, flagKey: "", ruleType: Constants.DecisionSource.rollout.rawValue)
293+
optimizely.sendImpressionEvent(experiment: experiment, variation: variation, userId: kUserId, attributes: attributes, flagKey: "", ruleType: Constants.DecisionSource.rollout.rawValue, enabled: true)
294294
XCTAssert(eventDispatcher.events.count == 0)
295295
}
296296

@@ -322,7 +322,7 @@ class OptimizelyClientTests_Others: XCTestCase {
322322
// force condition for sdk-not-ready
323323
optimizely.config = nil
324324

325-
optimizely.sendImpressionEvent(experiment: experiment, variation: variation, userId: kUserId, flagKey: experiment.key, ruleType: Constants.DecisionSource.rollout.rawValue)
325+
optimizely.sendImpressionEvent(experiment: experiment, variation: variation, userId: kUserId, flagKey: experiment.key, ruleType: Constants.DecisionSource.rollout.rawValue, enabled: true)
326326
XCTAssert(eventDispatcher.events.isEmpty, "event should not be sent out sdk is not configured properly")
327327

328328
optimizely.sendConversionEvent(eventKey: kEventKey, userId: kUserId)

Tests/OptimizelyTests-Common/BatchEventBuilderTests_Events.swift

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ class BatchEventBuilderTests_Events: XCTestCase {
8282
XCTAssertEqual(metaData["rule_key"] as! String, "ab_running_exp_audience_combo_exact_foo_or_true__and__42_or_4_2")
8383
XCTAssertEqual(metaData["flag_key"] as! String, "")
8484
XCTAssertEqual(metaData["variation_key"] as! String, "all_traffic_variation")
85+
XCTAssertTrue(metaData["enabled"] as! Bool)
8586

8687
let de = (snapshot["events"] as! Array<Dictionary<String, Any>>)[0]
8788

@@ -115,20 +116,20 @@ class BatchEventBuilderTests_Events: XCTestCase {
115116
let variation = experiment?.getVariation(id: "10416523162")
116117

117118
for scenario in scenarios {
118-
let event = BatchEventBuilder.createImpressionEvent(config: optimizely.config!, experiment: experiment!, variation: variation, userId: userId, attributes: attributes, flagKey: experiment!.key, ruleType: scenario.key)
119+
let event = BatchEventBuilder.createImpressionEvent(config: optimizely.config!, experiment: experiment!, variation: variation, userId: userId, attributes: attributes, flagKey: experiment!.key, ruleType: scenario.key, enabled: true)
119120
scenario.value ? XCTAssertNotNil(event): XCTAssertNil(event)
120121
}
121122

122123
// nil variation should always return nil
123124
for scenario in scenarios {
124-
let event = BatchEventBuilder.createImpressionEvent(config: optimizely.config!, experiment: experiment!, variation: nil, userId: userId, attributes: attributes, flagKey: experiment!.key, ruleType: scenario.key)
125+
let event = BatchEventBuilder.createImpressionEvent(config: optimizely.config!, experiment: experiment!, variation: nil, userId: userId, attributes: attributes, flagKey: experiment!.key, ruleType: scenario.key, enabled: true)
125126
XCTAssertNil(event)
126127
}
127128

128129
// should always return a event if sendFlagDecisions is set
129130
optimizely.config?.project.sendFlagDecisions = true
130131
for scenario in scenarios {
131-
let event = BatchEventBuilder.createImpressionEvent(config: optimizely.config!, experiment: experiment!, variation: nil, userId: userId, attributes: attributes, flagKey: experiment!.key, ruleType: scenario.key)
132+
let event = BatchEventBuilder.createImpressionEvent(config: optimizely.config!, experiment: experiment!, variation: nil, userId: userId, attributes: attributes, flagKey: experiment!.key, ruleType: scenario.key, enabled: true)
132133
XCTAssertNotNil(event)
133134
}
134135
optimizely.config?.project.sendFlagDecisions = nil
@@ -144,7 +145,7 @@ class BatchEventBuilderTests_Events: XCTestCase {
144145
let experiment = optimizely.config?.getExperiment(id: "10390977714")
145146

146147
optimizely.config?.project.sendFlagDecisions = true
147-
let event = BatchEventBuilder.createImpressionEvent(config: optimizely.config!, experiment: experiment!, variation: nil, userId: userId, attributes: attributes, flagKey: experiment!.key, ruleType: Constants.DecisionSource.featureTest.rawValue)
148+
let event = BatchEventBuilder.createImpressionEvent(config: optimizely.config!, experiment: experiment!, variation: nil, userId: userId, attributes: attributes, flagKey: experiment!.key, ruleType: Constants.DecisionSource.featureTest.rawValue, enabled: false)
148149
XCTAssertNotNil(event)
149150

150151
let visitor = (getEventJSON(data: event!)!["visitors"] as! Array<Dictionary<String, Any>>)[0]
@@ -156,13 +157,14 @@ class BatchEventBuilderTests_Events: XCTestCase {
156157
XCTAssertEqual(metaData["rule_key"] as! String, "ab_running_exp_audience_combo_exact_foo_or_true__and__42_or_4_2")
157158
XCTAssertEqual(metaData["flag_key"] as! String, "ab_running_exp_audience_combo_exact_foo_or_true__and__42_or_4_2")
158159
XCTAssertEqual(metaData["variation_key"] as! String, "")
160+
XCTAssertFalse(metaData["enabled"] as! Bool)
159161
optimizely.config?.project.sendFlagDecisions = nil
160162
}
161163

162164
func testCreateImpressionEventWithoutExperimentAndVariation() {
163165

164166
optimizely.config?.project.sendFlagDecisions = true
165-
let event = BatchEventBuilder.createImpressionEvent(config: optimizely.config!, experiment: nil, variation: nil, userId: userId, attributes: [String: Any](), flagKey: "feature_1", ruleType: Constants.DecisionSource.rollout.rawValue)
167+
let event = BatchEventBuilder.createImpressionEvent(config: optimizely.config!, experiment: nil, variation: nil, userId: userId, attributes: [String: Any](), flagKey: "feature_1", ruleType: Constants.DecisionSource.rollout.rawValue, enabled: true)
166168
XCTAssertNotNil(event)
167169

168170
let visitor = (getEventJSON(data: event!)!["visitors"] as! Array<Dictionary<String, Any>>)[0]
@@ -174,6 +176,7 @@ class BatchEventBuilderTests_Events: XCTestCase {
174176
XCTAssertEqual(metaData["rule_key"] as! String, "")
175177
XCTAssertEqual(metaData["flag_key"] as! String, "feature_1")
176178
XCTAssertEqual(metaData["variation_key"] as! String, "")
179+
XCTAssertTrue(metaData["enabled"] as! Bool)
177180
optimizely.config?.project.sendFlagDecisions = nil
178181
}
179182

@@ -277,6 +280,7 @@ extension BatchEventBuilderTests_Events {
277280
XCTAssertEqual(metaData["rule_key"] as! String, "")
278281
XCTAssertEqual(metaData["flag_key"] as! String, "feature_1")
279282
XCTAssertEqual(metaData["variation_key"] as! String, "")
283+
XCTAssertFalse(metaData["enabled"] as! Bool)
280284
} else {
281285
XCTFail("No event found")
282286
}
@@ -310,6 +314,7 @@ extension BatchEventBuilderTests_Events {
310314
XCTAssertEqual(metaData["rule_key"] as! String, "exp_with_audience")
311315
XCTAssertEqual(metaData["flag_key"] as! String, "feature_1")
312316
XCTAssertEqual(metaData["variation_key"] as! String, "a")
317+
XCTAssertTrue(metaData["enabled"] as! Bool)
313318
} else {
314319
XCTFail("No event found")
315320
}
@@ -344,6 +349,7 @@ extension BatchEventBuilderTests_Events {
344349
XCTAssertEqual(metaData["rule_key"] as! String, "exp_with_audience")
345350
XCTAssertEqual(metaData["flag_key"] as! String, "feature_1")
346351
XCTAssertEqual(metaData["variation_key"] as! String, "a")
352+
XCTAssertTrue(metaData["enabled"] as! Bool)
347353
} else {
348354
XCTFail("No event found")
349355
}

0 commit comments

Comments
 (0)