فهرست منبع

Address comments from @samedson.

Viswanathan Munisamy 3 سال پیش
والد
کامیت
d23b7dbcd7

+ 16 - 10
FirebaseSessions/Sources/ApplicationInfo.swift

@@ -18,6 +18,13 @@ import Foundation
 @_implementationOnly import FirebaseCore
 @_implementationOnly import GoogleUtilities
 
+/// Development environment for the application.
+enum DevEnvironment: String {
+  case prod       = "prod" // Prod environment
+  case staging    = "staging" // Staging environment
+  case autopush   = "autopush" // Autopush environment
+}
+
 protocol ApplicationInfoProtocol {
   /// Google App ID / GMP App ID
   var appID: String { get }
@@ -35,17 +42,19 @@ protocol ApplicationInfoProtocol {
   var mccMNC: String { get }
 
   /// Development environment on which the application is running.
-  var environment: String { get }
+  var environment: DevEnvironment { get }
 }
 
 class ApplicationInfo: ApplicationInfoProtocol {
   let appID: String
 
   private let networkInfo: NetworkInfoProtocol
+  private let envParams: [String : String]
 
-  init(appID: String, networkInfo: NetworkInfoProtocol = NetworkInfo()) {
+  init(appID: String, networkInfo: NetworkInfoProtocol = NetworkInfo(), envParams: [String : String] = ProcessInfo.processInfo.environment) {
     self.appID = appID
     self.networkInfo = networkInfo
+    self.envParams = envParams
   }
 
   var bundleID: String {
@@ -67,14 +76,11 @@ class ApplicationInfo: ApplicationInfoProtocol {
     return FIRSESValidateMccMnc(networkInfo.mobileCountryCode, networkInfo.mobileNetworkCode) ?? ""
   }
 
-  var environment: String {
-    if let env = ProcessInfo.processInfo.environment["FIREBASE_RUN_ENVIRONMENT"] {
-      // If the variable is set without any value, assume it is PROD.
-      if (env.trimmingCharacters(in: .whitespaces).isEmpty) {
-        return "PROD"
-      }
-      return env
+  var environment: DevEnvironment {
+    let environment = envParams["FIREBASE_RUN_ENVIRONMENT"]
+    if (environment != nil) {
+      return DevEnvironment(rawValue: environment!.trimmingCharacters(in: .whitespaces).lowercased()) ?? DevEnvironment.prod
     }
-    return "PROD"
+    return DevEnvironment.prod
   }
 }

+ 5 - 7
FirebaseSessions/Sources/SessionStartEvent.swift

@@ -139,16 +139,14 @@ class SessionStartEvent: NSObject, GDTCOREventDataObject {
     return proto
   }
   
-  private func convertLogEnvironment(environment: String) -> firebase_appquality_sessions_LogEnvironment {
-    switch environment.lowercased() {
-    case "prod":
+  private func convertLogEnvironment(environment: DevEnvironment) -> firebase_appquality_sessions_LogEnvironment {
+    switch environment {
+    case .prod:
       return firebase_appquality_sessions_LogEnvironment_LOG_ENVIRONMENT_PROD
-    case "staging":
+    case .staging:
       return firebase_appquality_sessions_LogEnvironment_LOG_ENVIRONMENT_STAGING
-    case "autopush":
+    case .autopush:
       return firebase_appquality_sessions_LogEnvironment_LOG_ENVIRONMENT_AUTOPUSH
-    default:
-      return firebase_appquality_sessions_LogEnvironment_LOG_ENVIRONMENT_UNKNOWN
     }
   }
 }

+ 38 - 0
FirebaseSessions/Tests/Unit/ApplicationInfoTests.swift

@@ -62,4 +62,42 @@ class ApplicationInfoTests: XCTestCase {
       XCTAssertEqual(appInfo.mccMNC, "")
     }
   }
+  
+  func test_LogEnvironment_hasProdAsDefault() {
+    XCTAssertEqual(appInfo.environment, .prod)
+  }
+  
+  func test_LogEnvironment_takesOverrideValues() {
+    var envValues: [String: String] = ["FIREBASE_RUN_ENVIRONMENT": "prod"]
+    var appInfo = ApplicationInfo(appID: "testAppID", envParams: envValues)
+    XCTAssertEqual(appInfo.environment, .prod)
+    
+    envValues = ["FIREBASE_RUN_ENVIRONMENT": "PROD"]
+    appInfo = ApplicationInfo(appID: "testAppID", envParams: envValues)
+    XCTAssertEqual(appInfo.environment, .prod)
+    
+    // Verify staging overrides
+    envValues = ["FIREBASE_RUN_ENVIRONMENT": "staging"]
+    appInfo = ApplicationInfo(appID: "testAppID", envParams: envValues)
+    XCTAssertEqual(appInfo.environment, .staging)
+    
+    // Verify staging overrides
+    envValues = ["FIREBASE_RUN_ENVIRONMENT": "STAGING"]
+    appInfo = ApplicationInfo(appID: "testAppID", envParams: envValues)
+    XCTAssertEqual(appInfo.environment, .staging)
+    
+    // Verify autopush overrides
+    envValues = ["FIREBASE_RUN_ENVIRONMENT": "autopush"]
+    appInfo = ApplicationInfo(appID: "testAppID", envParams: envValues)
+    XCTAssertEqual(appInfo.environment, .autopush)
+    
+    envValues = ["FIREBASE_RUN_ENVIRONMENT": "AUTOPUSH"]
+    appInfo = ApplicationInfo(appID: "testAppID", envParams: envValues)
+    XCTAssertEqual(appInfo.environment, .autopush)
+    
+    // Verify random overrides
+    envValues = ["FIREBASE_RUN_ENVIRONMENT": "random"]
+    appInfo = ApplicationInfo(appID: "testAppID", envParams: envValues)
+    XCTAssertEqual(appInfo.environment, .prod)
+  }
 }

+ 3 - 3
FirebaseSessions/Tests/Unit/Mocks/MockApplicationInfo.swift

@@ -18,8 +18,6 @@ import Foundation
 @testable import FirebaseSessions
 
 class MockApplicationInfo: ApplicationInfoProtocol {
-  var environment: String = ""
-
   var appID: String = ""
 
   var bundleID: String = ""
@@ -29,13 +27,15 @@ class MockApplicationInfo: ApplicationInfoProtocol {
   var osName: String = ""
 
   var mccMNC: String = ""
+  
+  var environment: DevEnvironment = .prod
 
   static let testAppID = "testAppID"
   static let testBundleID = "testBundleID"
   static let testSDKVersion = "testSDKVersion"
   static let testOSName = "ios"
   static let testMCCMNC = "testMCCMNC"
-  static let testEnvironment = "prod"
+  static let testEnvironment: DevEnvironment = .prod
 
   func mockAllInfo() {
     appID = MockApplicationInfo.testAppID

+ 5 - 11
FirebaseSessions/Tests/Unit/SessionStartEventTests.swift

@@ -139,19 +139,13 @@ class SessionStartEventTests: XCTestCase {
   }
 
   func test_convertLogEnvironment_convertsCorrectly() {
-    let expectations: [(given: String, expected: firebase_appquality_sessions_LogEnvironment)] = [
-      ("prod", firebase_appquality_sessions_LogEnvironment_LOG_ENVIRONMENT_PROD),
-      ("staging", firebase_appquality_sessions_LogEnvironment_LOG_ENVIRONMENT_STAGING),
-      ("autopush", firebase_appquality_sessions_LogEnvironment_LOG_ENVIRONMENT_AUTOPUSH),
-      ("PROD", firebase_appquality_sessions_LogEnvironment_LOG_ENVIRONMENT_PROD),
-      ("STAGING", firebase_appquality_sessions_LogEnvironment_LOG_ENVIRONMENT_STAGING),
-      ("AUTOPUSH", firebase_appquality_sessions_LogEnvironment_LOG_ENVIRONMENT_AUTOPUSH),
-      ("", firebase_appquality_sessions_LogEnvironment_LOG_ENVIRONMENT_UNKNOWN),
-      (" ", firebase_appquality_sessions_LogEnvironment_LOG_ENVIRONMENT_UNKNOWN),
-      ("random", firebase_appquality_sessions_LogEnvironment_LOG_ENVIRONMENT_UNKNOWN),
+    let expectations: [(given: DevEnvironment, expected: firebase_appquality_sessions_LogEnvironment)] = [
+      (.prod, firebase_appquality_sessions_LogEnvironment_LOG_ENVIRONMENT_PROD),
+      (.staging, firebase_appquality_sessions_LogEnvironment_LOG_ENVIRONMENT_STAGING),
+      (.autopush, firebase_appquality_sessions_LogEnvironment_LOG_ENVIRONMENT_AUTOPUSH),
     ]
 
-    expectations.forEach { (given: String, expected: firebase_appquality_sessions_LogEnvironment) in
+    expectations.forEach { (given: DevEnvironment, expected: firebase_appquality_sessions_LogEnvironment) in
       appInfo.environment = given
 
       let event = SessionStartEvent(identifiers: identifiers, appInfo: appInfo, time: time)