Skip to content

Commit

Permalink
[FX-1598] Make setup update merchant ID + session token (#178)
Browse files Browse the repository at this point in the history
* Make setup update merchant ID + session token

Manually verified that environment-specific things like logs and launchdarkly work as expected

* Appease xcode
  • Loading branch information
djoksimo authored Jul 18, 2024
1 parent c15cbfe commit e145a19
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 11 deletions.
13 changes: 6 additions & 7 deletions Sources/ForageSDK/ForageSDK.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ public class ForageSDK {
private static var config: Config?
static var logger: ForageLogger?
var service: ForageService?
var merchantID: String = ""
var sessionToken: String = ""
var merchantID: String = config?.merchantID ?? ""
var sessionToken: String = config?.sessionToken ?? ""
var traceId: String = ""

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

private init() {
guard let config = ForageSDK.config else {
guard ForageSDK.config != nil else {
assertionFailure("ForageSDK is not initialized - call ForageSDK.setup() before accessing ForageSDK.shared")
return
}
environment = Environment(sessionToken: config.sessionToken)
merchantID = config.merchantID
sessionToken = config.sessionToken

traceId = ForageSDK.logger?.getTraceID() ?? ""

VGSCollectLogger.shared.disableAllLoggers()
Expand Down Expand Up @@ -73,6 +69,9 @@ public class ForageSDK {
public class func setup(_ config: Config) {
ForageSDK.config = config
let environment = Environment(sessionToken: config.sessionToken)

updateMerchantID(config.merchantID)
updateSessionToken(config.sessionToken)

initializeLogger(environment)
initializeLaunchDarkly(environment)
Expand Down
13 changes: 9 additions & 4 deletions Sources/ForageSDK/Foundation/Telemetry/ForageLogger.swift
Original file line number Diff line number Diff line change
Expand Up @@ -89,11 +89,10 @@ protocol ForageLogger {
class DatadogLogger: ForageLogger {
private static let DD_CLIENT_TOKEN: String = "pub1e4572ba0f5e53df108c333d5ec66c02"
private static let DD_SERVICE_NAME: String = "ios-sdk"
private static let DD_SDK_INSTANCE_NAME: String = "forage"


// DO NOT UPDATE! Generate 1 TraceID per living session of the app
static let traceId: String = generateTraceID()

private var logger: LoggerProtocol?
private var config: ForageLoggerConfig?

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

if Datadog.isInitialized(instanceName: instanceName) {
return Datadog.sdkInstance(named: instanceName)
Expand All @@ -209,6 +208,12 @@ class DatadogLogger: ForageLogger {
Logs.enable(in: datadogInstance)
return datadogInstance
}

// ensure logger is re-initialized if the environment changes!
private func buildInstanceName(environment: Environment) -> String {
return "forage-\(environment.rawValue)"
}


private func getMessageWithPrefix(_ message: String) -> String {
if let prefix = config?.prefix {
Expand Down
25 changes: 25 additions & 0 deletions Tests/ForageSDKTests/ForageSDKTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -71,4 +71,29 @@ final class ForageSDKTests: XCTestCase {
XCTAssertEqual(mockLogger.lastNoticeMsg, "Called updateSessionToken")
XCTAssertEqual(MockForageSDK.shared.environment, .staging)
}

func testSetup_shouldUpdateMerchantIDAndSessionToken() {
ForageSDK.setup(
ForageSDK.Config(merchantID: "mid/first", sessionToken: "dev_first_token")
)

/// NOTE: We access ForageSDK.shared. to make sure that config updates still work after ``ForageSDK.init`` is invoked
XCTAssertEqual(ForageSDK.shared.environment, .dev)
XCTAssertEqual(ForageSDK.shared.merchantID, "mid/first")

ForageSDK.setup(
ForageSDK.Config(merchantID: "mid/second", sessionToken: "staging_second_token")
)

XCTAssertEqual(ForageSDK.shared.environment, .staging)
XCTAssertEqual(ForageSDK.shared.merchantID, "mid/second")

// one more time!
ForageSDK.setup(
ForageSDK.Config(merchantID: "mid/third", sessionToken: "sandbox_second_token")
)

XCTAssertEqual(ForageSDK.shared.environment, .sandbox)
XCTAssertEqual(ForageSDK.shared.merchantID, "mid/third")
}
}

0 comments on commit e145a19

Please sign in to comment.