Skip to content

Commit e145a19

Browse files
authored
[FX-1598] Make setup update merchant ID + session token (#178)
* Make setup update merchant ID + session token Manually verified that environment-specific things like logs and launchdarkly work as expected * Appease xcode
1 parent c15cbfe commit e145a19

File tree

3 files changed

+40
-11
lines changed

3 files changed

+40
-11
lines changed

Sources/ForageSDK/ForageSDK.swift

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ public class ForageSDK {
1212
private static var config: Config?
1313
static var logger: ForageLogger?
1414
var service: ForageService?
15-
var merchantID: String = ""
16-
var sessionToken: String = ""
15+
var merchantID: String = config?.merchantID ?? ""
16+
var sessionToken: String = config?.sessionToken ?? ""
1717
var traceId: String = ""
1818

1919
public var environment: Environment = .sandbox
@@ -24,14 +24,10 @@ public class ForageSDK {
2424
// MARK: Init
2525

2626
private init() {
27-
guard let config = ForageSDK.config else {
27+
guard ForageSDK.config != nil else {
2828
assertionFailure("ForageSDK is not initialized - call ForageSDK.setup() before accessing ForageSDK.shared")
2929
return
3030
}
31-
environment = Environment(sessionToken: config.sessionToken)
32-
merchantID = config.merchantID
33-
sessionToken = config.sessionToken
34-
3531
traceId = ForageSDK.logger?.getTraceID() ?? ""
3632

3733
VGSCollectLogger.shared.disableAllLoggers()
@@ -73,6 +69,9 @@ public class ForageSDK {
7369
public class func setup(_ config: Config) {
7470
ForageSDK.config = config
7571
let environment = Environment(sessionToken: config.sessionToken)
72+
73+
updateMerchantID(config.merchantID)
74+
updateSessionToken(config.sessionToken)
7675

7776
initializeLogger(environment)
7877
initializeLaunchDarkly(environment)

Sources/ForageSDK/Foundation/Telemetry/ForageLogger.swift

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,11 +89,10 @@ protocol ForageLogger {
8989
class DatadogLogger: ForageLogger {
9090
private static let DD_CLIENT_TOKEN: String = "pub1e4572ba0f5e53df108c333d5ec66c02"
9191
private static let DD_SERVICE_NAME: String = "ios-sdk"
92-
private static let DD_SDK_INSTANCE_NAME: String = "forage"
93-
92+
9493
// DO NOT UPDATE! Generate 1 TraceID per living session of the app
9594
static let traceId: String = generateTraceID()
96-
95+
9796
private var logger: LoggerProtocol?
9897
private var config: ForageLoggerConfig?
9998

@@ -190,7 +189,7 @@ class DatadogLogger: ForageLogger {
190189
/// Initializes and returns a Datadog instance for the given environment. If an instance with the specified name already exists,
191190
/// it returns the existing instance.
192191
private func initDatadog(_ environment: Environment) -> DatadogCoreProtocol {
193-
let instanceName = DatadogLogger.DD_SDK_INSTANCE_NAME
192+
let instanceName = buildInstanceName(environment: environment)
194193

195194
if Datadog.isInitialized(instanceName: instanceName) {
196195
return Datadog.sdkInstance(named: instanceName)
@@ -209,6 +208,12 @@ class DatadogLogger: ForageLogger {
209208
Logs.enable(in: datadogInstance)
210209
return datadogInstance
211210
}
211+
212+
// ensure logger is re-initialized if the environment changes!
213+
private func buildInstanceName(environment: Environment) -> String {
214+
return "forage-\(environment.rawValue)"
215+
}
216+
212217

213218
private func getMessageWithPrefix(_ message: String) -> String {
214219
if let prefix = config?.prefix {

Tests/ForageSDKTests/ForageSDKTests.swift

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,4 +71,29 @@ final class ForageSDKTests: XCTestCase {
7171
XCTAssertEqual(mockLogger.lastNoticeMsg, "Called updateSessionToken")
7272
XCTAssertEqual(MockForageSDK.shared.environment, .staging)
7373
}
74+
75+
func testSetup_shouldUpdateMerchantIDAndSessionToken() {
76+
ForageSDK.setup(
77+
ForageSDK.Config(merchantID: "mid/first", sessionToken: "dev_first_token")
78+
)
79+
80+
/// NOTE: We access ForageSDK.shared. to make sure that config updates still work after ``ForageSDK.init`` is invoked
81+
XCTAssertEqual(ForageSDK.shared.environment, .dev)
82+
XCTAssertEqual(ForageSDK.shared.merchantID, "mid/first")
83+
84+
ForageSDK.setup(
85+
ForageSDK.Config(merchantID: "mid/second", sessionToken: "staging_second_token")
86+
)
87+
88+
XCTAssertEqual(ForageSDK.shared.environment, .staging)
89+
XCTAssertEqual(ForageSDK.shared.merchantID, "mid/second")
90+
91+
// one more time!
92+
ForageSDK.setup(
93+
ForageSDK.Config(merchantID: "mid/third", sessionToken: "sandbox_second_token")
94+
)
95+
96+
XCTAssertEqual(ForageSDK.shared.environment, .sandbox)
97+
XCTAssertEqual(ForageSDK.shared.merchantID, "mid/third")
98+
}
7499
}

0 commit comments

Comments
 (0)