Skip to content

Commit 4b5565c

Browse files
authored
Feat: added SDKkey and environment in datafile (#417)
1 parent 51a6ea8 commit 4b5565c

File tree

8 files changed

+578
-540
lines changed

8 files changed

+578
-540
lines changed

Sources/Data Model/Project.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ struct Project: Codable, Equatable {
4343
var featureFlags: [FeatureFlag]
4444
var botFiltering: Bool?
4545
var sendFlagDecisions: Bool?
46+
var sdkKey: String?
47+
var environmentKey: String?
4648

4749
let logger = OPTLoggerFactory.getLogger()
4850

@@ -53,7 +55,7 @@ struct Project: Codable, Equatable {
5355
// V3
5456
case anonymizeIP
5557
// V4
56-
case rollouts, typedAudiences, featureFlags, botFiltering, sendFlagDecisions
58+
case rollouts, typedAudiences, featureFlags, botFiltering, sendFlagDecisions, sdkKey, environmentKey
5759
}
5860

5961
// Required since logger is not equatable
@@ -62,7 +64,7 @@ struct Project: Codable, Equatable {
6264
lhs.audiences == rhs.audiences && lhs.groups == rhs.groups && lhs.attributes == rhs.attributes &&
6365
lhs.accountId == rhs.accountId && lhs.events == rhs.events && lhs.revision == rhs.revision &&
6466
lhs.anonymizeIP == rhs.anonymizeIP && lhs.rollouts == rhs.rollouts && lhs.typedAudiences == rhs.typedAudiences &&
65-
lhs.featureFlags == rhs.featureFlags && lhs.botFiltering == rhs.botFiltering && lhs.sendFlagDecisions == rhs.sendFlagDecisions
67+
lhs.featureFlags == rhs.featureFlags && lhs.botFiltering == rhs.botFiltering && lhs.sendFlagDecisions == rhs.sendFlagDecisions && lhs.sdkKey == rhs.sdkKey && lhs.environmentKey == rhs.environmentKey
6668
}
6769
}
6870

Sources/Optimizely/OptimizelyConfig+ObjC.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ import Foundation
2020

2121
@objc(OptimizelyConfig)
2222
public protocol ObjcOptimizelyConfig {
23+
var environmentKey: String { get }
2324
var revision: String { get }
25+
var sdkKey: String { get }
2426
var experimentsMap: [String: ObjcOptimizelyExperiment] { get }
2527
var featuresMap: [String: ObjcOptimizelyFeature] { get }
2628
}
@@ -59,12 +61,16 @@ public protocol ObjcOptimizelyVariable {
5961
// MARK: - Implementations for Objective-C support
6062

6163
class ObjcOptimizelyConfigImp: NSObject, ObjcOptimizelyConfig {
64+
public var environmentKey: String
6265
public var revision: String
66+
public var sdkKey: String
6367
public var experimentsMap: [String: ObjcOptimizelyExperiment]
6468
public var featuresMap: [String: ObjcOptimizelyFeature]
6569

6670
public init(_ optimizelyConfig: OptimizelyConfig) {
71+
self.environmentKey = optimizelyConfig.environmentKey
6772
self.revision = optimizelyConfig.revision
73+
self.sdkKey = optimizelyConfig.sdkKey
6874
self.experimentsMap = optimizelyConfig.experimentsMap.mapValues { ObjcExperiment($0) }
6975
self.featuresMap = optimizelyConfig.featuresMap.mapValues { ObjcFeature($0) }
7076
}

Sources/Optimizely/OptimizelyConfig.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ import Foundation
1919
/// A data model of public project configuration
2020

2121
public protocol OptimizelyConfig {
22+
var environmentKey: String { get }
2223
var revision: String { get }
24+
var sdkKey: String { get }
2325
var experimentsMap: [String: OptimizelyExperiment] { get }
2426
var featuresMap: [String: OptimizelyFeature] { get }
2527
}
@@ -54,14 +56,18 @@ public protocol OptimizelyVariable {
5456
// MARK: - OptimizelyConfig Implementation
5557

5658
struct OptimizelyConfigImp: OptimizelyConfig {
59+
var environmentKey: String = ""
5760
var revision: String = ""
61+
var sdkKey: String = ""
5862
var experimentsMap: [String: OptimizelyExperiment] = [:]
5963
var featuresMap: [String: OptimizelyFeature] = [:]
6064

6165
init(projectConfig: ProjectConfig) {
6266
guard let project = projectConfig.project else { return }
6367

68+
self.environmentKey = project.environmentKey ?? ""
6469
self.revision = project.revision
70+
self.sdkKey = project.sdkKey ?? ""
6571

6672
// copy feature's variable data to variables in all variations
6773
let updatedExperiments = projectConfig.allExperiments.map {

Tests/OptimizelyTests-APIs/OptimizelyClientTests_OptimizelyConfig.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,12 +89,16 @@ class OptimizelyClientTests_OptimizelyConfig: XCTestCase {
8989

9090
optimizelyConfig = try! optimizely.getOptimizelyConfig()
9191
XCTAssert(optimizelyConfig!.revision == "100")
92+
XCTAssert(optimizelyConfig!.sdkKey == "")
93+
XCTAssert(optimizelyConfig!.environmentKey == "")
9294

9395
wait(for: [exp!], timeout: 10)
9496
exp = nil // disregard following update notification
9597

9698
// after datafile remote updated ("optimizely_config_datafile")
9799
XCTAssert(optimizelyConfig!.revision == "9")
100+
XCTAssert(optimizelyConfig!.sdkKey == "ValidProjectConfigV4")
101+
XCTAssert(optimizelyConfig!.environmentKey == "production")
98102
}
99103

100104
func testGetOptimizelyConfig_ExperimentsMap() {
@@ -188,6 +192,8 @@ extension OptimizelyConfig {
188192
var dict: [String: Any]? {
189193
let expected: [String: Any] = [
190194
"revision": self.revision,
195+
"sdkKey": self.sdkKey,
196+
"environmentKey": self.environmentKey,
191197
"experimentsMap": self.experimentsMap.mapValues{ $0.dict },
192198
"featuresMap": self.featuresMap.mapValues{ $0.dict }
193199
]

Tests/OptimizelyTests-APIs/OptimizelyClientTests_OptimizelyConfig_Objc.m

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,8 @@ -(NSDictionary*)dictForOptimizelyConfig: (id <OptimizelyConfig>)optConfig {
166166

167167
return @{
168168
@"revision": optConfig.revision,
169+
@"sdkKey": optConfig.sdkKey,
170+
@"environmentKey": optConfig.environmentKey,
169171
@"experimentsMap": expMap,
170172
@"featuresMap": featMap
171173
};

Tests/OptimizelyTests-DataModel/ProjectTests.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,18 @@ extension ProjectTests {
6060
XCTAssert(model.featureFlags == [try OTUtils.model(from: FeatureFlagTests.sampleData)])
6161
XCTAssert(model.botFiltering == false)
6262
XCTAssert(model.sendFlagDecisions == true)
63+
XCTAssert(model.sdkKey == nil)
64+
XCTAssert(model.environmentKey == nil)
65+
}
66+
67+
func testDecodeWithSDKKeyAndEnvironmentKey() {
68+
var data: [String: Any] = ProjectTests.sampleData
69+
data["sdkKey"] = "123"
70+
data["environmentKey"] = "production"
71+
72+
let model: Project? = try? OTUtils.model(from: data)
73+
XCTAssertEqual(model?.sdkKey, "123")
74+
XCTAssertEqual(model?.environmentKey, "production")
6375
}
6476

6577
func testDecodeFailWithMissingVersion() {

0 commit comments

Comments
 (0)