diff --git a/Sources/Data Model/Experiment.swift b/Sources/Data Model/Experiment.swift index bfe8418a..cfcfb0ee 100644 --- a/Sources/Data Model/Experiment.swift +++ b/Sources/Data Model/Experiment.swift @@ -36,9 +36,10 @@ struct Experiment: Codable, ExperimentCore { // datafile spec defines this as [String: Any]. Supposed to be [ExperimentKey: VariationKey] var forcedVariations: [String: String] var cmab: Cmab? - + var type: String? + enum CodingKeys: String, CodingKey { - case id, key, status, layerId, variations, trafficAllocation, audienceIds, audienceConditions, forcedVariations, cmab + case id, key, status, layerId, variations, trafficAllocation, audienceIds, audienceConditions, forcedVariations, cmab, type } // MARK: - OptimizelyConfig @@ -59,7 +60,8 @@ extension Experiment: Equatable { lhs.audienceIds == rhs.audienceIds && lhs.audienceConditions == rhs.audienceConditions && lhs.forcedVariations == rhs.forcedVariations && - lhs.cmab == rhs.cmab + lhs.cmab == rhs.cmab && + lhs.type == rhs.type } } diff --git a/Tests/OptimizelyTests-DataModel/ExperimentTests.swift b/Tests/OptimizelyTests-DataModel/ExperimentTests.swift index 665d6036..c2c851eb 100644 --- a/Tests/OptimizelyTests-DataModel/ExperimentTests.swift +++ b/Tests/OptimizelyTests-DataModel/ExperimentTests.swift @@ -143,11 +143,35 @@ extension ExperimentTests { func testDecodeFailWithMissingForcedVariations() { var data: [String: Any] = ExperimentTests.sampleData data["forcedVariations"] = nil - + let model: Experiment? = try? OTUtils.model(from: data) XCTAssertNil(model) } + func testDecodeSuccessWithUnknownType() { + var data: [String: Any] = ExperimentTests.sampleData + data["type"] = "new_unknown_type" + + let model: Experiment = try! OTUtils.model(from: data) + XCTAssertEqual(model.type, "new_unknown_type") + XCTAssertEqual(model.id, "11111") + XCTAssertEqual(model.key, "background") + } + + func testDecodeSuccessWithKnownType() { + var data: [String: Any] = ExperimentTests.sampleData + data["type"] = "fr" + + let model: Experiment = try! OTUtils.model(from: data) + XCTAssertEqual(model.type, "fr") + } + + func testDecodeSuccessWithNilType() { + let data: [String: Any] = ExperimentTests.sampleData + let model: Experiment = try! OTUtils.model(from: data) + XCTAssertNil(model.type) + } + } // MARK: - Encode