Skip to content

Commit 4dffe6d

Browse files
Experiment id and variation id added into decision notification payload (#589)
1 parent deb76cd commit 4dffe6d

File tree

3 files changed

+37
-2
lines changed

3 files changed

+37
-2
lines changed

Sources/Implementation/DecisionInfo.swift

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,9 +140,17 @@ struct DecisionInfo {
140140
decisionInfo[Constants.DecisionInfoKeys.variationKey] = variation?.key ?? NSNull() // keep key in the map even with nil value
141141
decisionInfo[Constants.DecisionInfoKeys.ruleKey] = ruleKey ?? NSNull() //
142142
decisionInfo[Constants.DecisionInfoKeys.reasons] = reasons
143-
decisionInfo[Constants.DecisionInfoKeys.decisionEventDispatched] = decisionEventDispatched
144143
}
145144

145+
decisionInfo[Constants.DecisionInfoKeys.decisionEventDispatched] = decisionEventDispatched
146+
147+
if let expId = experiment?.id {
148+
decisionInfo[Constants.ExperimentDecisionInfoKeys.experimentId] = expId
149+
}
150+
151+
if let varId = variation?.id {
152+
decisionInfo[Constants.ExperimentDecisionInfoKeys.variationId] = varId
153+
}
146154
return decisionInfo
147155
}
148156

Sources/Utils/Constants.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,9 @@ struct Constants {
8989
}
9090

9191
struct ExperimentDecisionInfoKeys {
92+
static let experimentId = "experimentId"
9293
static let experiment = "experimentKey"
94+
static let variationId = "variationId"
9395
static let variation = "variationKey"
9496
}
9597

Tests/OptimizelyTests-Common/DecisionListenerTests_Datafile.swift

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,16 @@ class DecisionListenerTests_Datafile: XCTestCase {
3737
var notificationVariation: String?
3838
var notificationExperiment: String?
3939
var notificationType: String?
40+
var expId: String?
41+
var varId: String?
4042

4143
let exp = expectation(description: "x")
4244

4345
_ = notificationCenter.addDecisionNotificationListener(decisionListener: { (type, _, _, decisionInfo) in
4446
notificationExperiment = decisionInfo[Constants.ExperimentDecisionInfoKeys.experiment] as? String
4547
notificationVariation = decisionInfo[Constants.ExperimentDecisionInfoKeys.variation] as? String
48+
expId = decisionInfo[Constants.ExperimentDecisionInfoKeys.experimentId] as? String
49+
varId = decisionInfo[Constants.ExperimentDecisionInfoKeys.variationId] as? String
4650
notificationType = type
4751
exp.fulfill()
4852
})
@@ -56,19 +60,27 @@ class DecisionListenerTests_Datafile: XCTestCase {
5660
XCTAssertEqual(variation, "all_traffic_variation")
5761
XCTAssertEqual(notificationExperiment, "ab_running_exp_audience_combo_empty_conditions")
5862
XCTAssertEqual(notificationVariation, "all_traffic_variation")
63+
XCTAssertEqual(expId, "10390977723")
64+
XCTAssertEqual(varId, "10416523170")
5965
XCTAssertEqual(notificationType, Constants.DecisionType.abTest.rawValue)
6066
}
6167

6268
func testDecisionListenerWithActivateWhenUserNotInExperiment() {
6369
var notificationVariation: String?
6470
var notificationExperiment: String?
6571
var notificationType: String?
72+
var expId: String?
73+
var varId: String?
6674

6775
let exp = expectation(description: "x")
6876

6977
_ = notificationCenter.addDecisionNotificationListener(decisionListener: { (type, _, _, decisionInfo) in
7078
notificationExperiment = decisionInfo[Constants.ExperimentDecisionInfoKeys.experiment] as? String
7179
notificationVariation = decisionInfo[Constants.ExperimentDecisionInfoKeys.variation] as? String
80+
expId = decisionInfo[Constants.ExperimentDecisionInfoKeys.experimentId] as? String
81+
varId = decisionInfo[Constants.ExperimentDecisionInfoKeys.variationId] as? String
82+
expId = decisionInfo[Constants.ExperimentDecisionInfoKeys.experimentId] as? String
83+
varId = decisionInfo[Constants.ExperimentDecisionInfoKeys.variationId] as? String
7284
notificationType = type
7385
exp.fulfill()
7486
})
@@ -81,6 +93,8 @@ class DecisionListenerTests_Datafile: XCTestCase {
8193

8294
XCTAssertEqual(notificationExperiment, "ab_running_exp_audience_combo_exact_foo_or_true__and__42_or_4_2")
8395
XCTAssertEqual(notificationVariation, nil)
96+
XCTAssertEqual(expId, "10390977714")
97+
XCTAssertEqual(varId, nil)
8498
XCTAssertEqual(notificationType, Constants.DecisionType.abTest.rawValue)
8599
notificationCenter.clearAllNotificationListeners()
86100
}
@@ -93,12 +107,16 @@ class DecisionListenerTests_Datafile: XCTestCase {
93107
var notificationVariation: String?
94108
var notificationExperiment: String?
95109
var notificationType: String?
110+
var expId: String?
111+
var varId: String?
96112

97113
let exp = expectation(description: "x")
98114

99115
_ = notificationCenter.addDecisionNotificationListener(decisionListener: { (type, _, _, decisionInfo) in
100116
notificationExperiment = decisionInfo[Constants.ExperimentDecisionInfoKeys.experiment] as? String
101117
notificationVariation = decisionInfo[Constants.ExperimentDecisionInfoKeys.variation] as? String
118+
expId = decisionInfo[Constants.ExperimentDecisionInfoKeys.experimentId] as? String
119+
varId = decisionInfo[Constants.ExperimentDecisionInfoKeys.variationId] as? String
102120
notificationType = type
103121
exp.fulfill()
104122
})
@@ -111,19 +129,24 @@ class DecisionListenerTests_Datafile: XCTestCase {
111129
XCTAssertEqual(notificationExperiment, "ab_running_exp_audience_combo_empty_conditions")
112130
XCTAssertEqual(notificationVariation, "all_traffic_variation")
113131
XCTAssertEqual(notificationType, Constants.DecisionType.abTest.rawValue)
132+
XCTAssertEqual(expId, "10390977723")
133+
XCTAssertEqual(varId, "10416523170")
114134
notificationCenter.clearAllNotificationListeners()
115135
}
116136

117137
func testDecisionListenerWithGetVariationWhenUserNotInExperiment() {
118138
var notificationVariation: String?
119139
var notificationExperiment: String?
120140
var notificationType: String?
121-
141+
var expId: String?
142+
var varId: String?
122143
let exp = expectation(description: "x")
123144

124145
_ = notificationCenter.addDecisionNotificationListener(decisionListener: { (type, _, _, decisionInfo) in
125146
notificationExperiment = decisionInfo[Constants.ExperimentDecisionInfoKeys.experiment] as? String
126147
notificationVariation = decisionInfo[Constants.ExperimentDecisionInfoKeys.variation] as? String
148+
expId = decisionInfo[Constants.ExperimentDecisionInfoKeys.experimentId] as? String
149+
varId = decisionInfo[Constants.ExperimentDecisionInfoKeys.variationId] as? String
127150
notificationType = type
128151
exp.fulfill()
129152
})
@@ -133,6 +156,8 @@ class DecisionListenerTests_Datafile: XCTestCase {
133156

134157
XCTAssertEqual(notificationExperiment, "ab_running_exp_audience_combo_exact_foo_or_true__and__42_or_4_2")
135158
XCTAssertEqual(notificationVariation, nil)
159+
XCTAssertEqual(expId, "10390977714")
160+
XCTAssertEqual(varId, nil)
136161
XCTAssertEqual(notificationType, Constants.DecisionType.abTest.rawValue)
137162
notificationCenter.clearAllNotificationListeners()
138163
}

0 commit comments

Comments
 (0)