Skip to content

Commit ee38dfb

Browse files
pass cmabuuid to feature decision
1 parent 4584a69 commit ee38dfb

File tree

2 files changed

+23
-25
lines changed

2 files changed

+23
-25
lines changed

Sources/Implementation/DefaultDecisionService.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -460,7 +460,7 @@ class DefaultDecisionService: OPTDecisionService {
460460
let featureDecision = FeatureDecision(experiment: experiment, variation: nil, source: Constants.DecisionSource.featureTest.rawValue)
461461
return DecisionResponse(result: featureDecision, reasons: reasons)
462462
} else if let variation = result.variation {
463-
let featureDecision = FeatureDecision(experiment: experiment, variation: variation, source: Constants.DecisionSource.featureTest.rawValue)
463+
let featureDecision = FeatureDecision(experiment: experiment, variation: variation, source: Constants.DecisionSource.featureTest.rawValue, cmabUUID: result.cmabUUID)
464464
return DecisionResponse(result: featureDecision, reasons: reasons)
465465
}
466466
}

Tests/OptimizelyTests-Common/OptimizelyUserContextTests_Decide_CMAB.swift

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -72,32 +72,30 @@ class OptimizelyUserContextTests_Decide_CMAB: XCTestCase {
7272
XCTAssertTrue(self.mockCmabService.decisionCalled, "CMAB decision service was not called")
7373
XCTAssertEqual(self.mockCmabService.lastRuleId, "10390977673", "Expected CMAB rule id '10390977673' but got \(String(describing: self.mockCmabService.lastRuleId))")
7474

75-
// Give event dispatcher time to process
76-
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
77-
// Verify impression event
78-
self.optimizely.eventLock.sync {}
79-
80-
guard let event = self.getFirstEventJSON(client: self.optimizely) else {
81-
XCTFail("No impression event found")
82-
expectation.fulfill()
83-
return
84-
}
85-
86-
let visitor = (event["visitors"] as! Array<Dictionary<String, Any>>)[0]
87-
let snapshot = (visitor["snapshots"] as! Array<Dictionary<String, Any>>)[0]
88-
let decision = (snapshot["decisions"] as! Array<Dictionary<String, Any>>)[0]
89-
let metaData = decision["metadata"] as! Dictionary<String, Any>
90-
91-
// Verify event metadata
92-
XCTAssertEqual(metaData["rule_type"] as! String, Constants.DecisionSource.featureTest.rawValue)
93-
XCTAssertEqual(metaData["rule_key"] as! String, "exp_with_audience")
94-
XCTAssertEqual(metaData["flag_key"] as! String, "feature_1")
95-
XCTAssertEqual(metaData["variation_key"] as! String, "a")
96-
XCTAssertEqual(metaData["cmab_uuid"] as? String, "test-uuid")
97-
XCTAssertTrue(metaData["enabled"] as! Bool)
98-
75+
// Verify impression event
76+
self.optimizely.eventLock.sync {}
77+
78+
guard let event = self.getFirstEventJSON(client: self.optimizely) else {
79+
XCTFail("No impression event found")
9980
expectation.fulfill()
81+
return
10082
}
83+
84+
let visitor = (event["visitors"] as! Array<Dictionary<String, Any>>)[0]
85+
let snapshot = (visitor["snapshots"] as! Array<Dictionary<String, Any>>)[0]
86+
let decision = (snapshot["decisions"] as! Array<Dictionary<String, Any>>)[0]
87+
let metaData = decision["metadata"] as! Dictionary<String, Any>
88+
89+
// Verify event metadata
90+
XCTAssertEqual(metaData["rule_type"] as! String, Constants.DecisionSource.featureTest.rawValue)
91+
XCTAssertEqual(metaData["rule_key"] as! String, "exp_with_audience")
92+
XCTAssertEqual(metaData["flag_key"] as! String, "feature_1")
93+
XCTAssertEqual(metaData["variation_key"] as! String, "a")
94+
XCTAssertEqual(metaData["cmab_uuid"] as? String, "test-uuid")
95+
XCTAssertTrue(metaData["enabled"] as! Bool)
96+
97+
expectation.fulfill()
98+
10199
}
102100

103101
wait(for: [expectation], timeout: 5) // Increased timeout for reliability

0 commit comments

Comments
 (0)