Kaynağa Gözat

Installations API build tests (#8353)

* Installations API build tests

* Fix class name
Nick Cooke 4 yıl önce
ebeveyn
işleme
1997f76edc

+ 2 - 1
FirebaseInstallations.podspec

@@ -60,7 +60,8 @@ Pod::Spec.new do |s|
       :tvos => tvos_deployment_target
     }
     unit_tests.source_files = base_dir + 'Tests/Unit/*.[mh]',
-                              base_dir + 'Tests/Utils/*.[mh]'
+                              base_dir + 'Tests/Utils/*.[mh]',
+                              base_dir + 'Tests/Unit/Swift/*'
     unit_tests.resources = base_dir + 'Tests/Fixture/**/*'
     unit_tests.requires_app_host = true
     unit_tests.dependency 'OCMock'

+ 159 - 0
FirebaseInstallations/Source/Tests/Unit/Swift/InstallationsAPITests.swift

@@ -0,0 +1,159 @@
+//
+// Copyright 2021 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+// MARK: This file is used to evaluate the experience of using Firebase APIs in Swift.
+
+import Foundation
+
+import FirebaseCore
+import FirebaseInstallations
+
+final class InstallationsAPITests {
+  func usage() {
+    // MARK: - Installations
+
+    // `InstallationIDDidChange` & associated notification keys
+    _ = NotificationCenter.default
+      .addObserver(
+        forName: .InstallationIDDidChange,
+        object: nil,
+        queue: .main
+      ) { notification in
+        _ = notification.userInfo?[InstallationIDDidChangeAppNameKey]
+      }
+
+    // Retrieving an Installations instance
+    _ = Installations.installations()
+
+    if let app = FirebaseApp.app() {
+      _ = Installations.installations(app: app)
+    }
+
+    // Create or retrieve an installations ID
+    Installations.installations().installationID { id, error in
+      if let _ /* id */ = id {
+        // ...
+      } else if let _ /* error */ = error {
+        // ...
+      }
+    }
+
+    #if swift(>=5.5)
+      if #available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, watchOS 8.0, *) {
+        // async/await is a Swift 5.5+ feature available on iOS 15+
+        async {
+          do {
+            try await Installations.installations().installationID()
+          } catch {
+            // ...
+          }
+        }
+      }
+    #endif // swift(>=5.5)
+
+    // Retrieves an installation auth token
+    Installations.installations().authToken { result, error in
+      if let _ /* result */ = result {
+        // ...
+      } else if let _ /* error */ = error {
+        // ...
+      }
+    }
+
+    #if swift(>=5.5)
+      if #available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, watchOS 8.0, *) {
+        // async/await is a Swift 5.5+ feature available on iOS 15+
+        async {
+          do {
+            _ = try await Installations.installations().authToken()
+          } catch {
+            // ...
+          }
+        }
+      }
+    #endif // swift(>=5.5)
+
+    // Retrieves an installation auth token with forcing refresh parameter
+    Installations.installations().authTokenForcingRefresh(true) { result, error in
+      if let _ /* result */ = result {
+        // ...
+      } else if let _ /* error */ = error {
+        // ...
+      }
+    }
+
+    #if swift(>=5.5)
+      if #available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, watchOS 8.0, *) {
+        // async/await is a Swift 5.5+ feature available on iOS 15+
+        async {
+          do {
+            _ = try await Installations.installations().authTokenForcingRefresh(true)
+          } catch {
+            // ...
+          }
+        }
+      }
+    #endif // swift(>=5.5)
+
+    // Delete installation data
+    Installations.installations().delete { error in
+      if let _ /* error */ = error {
+        // ...
+      }
+    }
+
+    #if swift(>=5.5)
+      if #available(iOS 15.0, macOS 12.0, macCatalyst 15.0, tvOS 15.0, watchOS 8.0, *) {
+        // async/await is a Swift 5.5+ feature available on iOS 15+
+        async {
+          do {
+            _ = try await Installations.installations().delete()
+          } catch {
+            // ...
+          }
+        }
+      }
+    #endif // swift(>=5.5)
+
+    // MARK: -  InstallationsAuthTokenResult
+
+    Installations.installations().authToken { result, _ in
+      if let result = result {
+        _ = result.expirationDate
+        _ = result.authToken
+      }
+    }
+
+    // MARK: - InstallationsErrorCode
+
+    Installations.installations().authToken { _, error in
+      if let error = error {
+        switch (error as NSError).code {
+        case Int(InstallationsErrorCode.unknown.rawValue):
+          break
+        case Int(InstallationsErrorCode.keychain.rawValue):
+          break
+        case Int(InstallationsErrorCode.serverUnreachable.rawValue):
+          break
+        case Int(InstallationsErrorCode.invalidConfiguration.rawValue):
+          break
+        default:
+          break
+        }
+      }
+    }
+  }
+}