mirror of
https://github.com/firebase/firebase-ios-sdk
synced 2026-11-11 22:55:59 +05:45
104 lines
3.3 KiB
Swift
104 lines
3.3 KiB
Swift
// Copyright 2023 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.
|
|
|
|
import Foundation
|
|
import XCTest
|
|
|
|
@testable import FirebaseAuth
|
|
import FirebaseCore
|
|
|
|
@available(iOS 13, tvOS 13, macOS 10.15, macCatalyst 13, watchOS 7, *)
|
|
class AuthLifecycleTests: XCTestCase {
|
|
private let kFakeAPIKey = "FAKE_API_KEY"
|
|
private let options = FirebaseOptions(googleAppID: "0:0000000000000:ios:0000000000000000",
|
|
gcmSenderID: "00000000000000000-00000000000-000000000")
|
|
|
|
override func setUp() {
|
|
options.apiKey = kFakeAPIKey
|
|
FirebaseApp.resetApps()
|
|
FirebaseApp.configure(options: options)
|
|
}
|
|
|
|
/** @fn testSingleton
|
|
@brief Verifies the @c auth method behaves like a singleton.
|
|
*/
|
|
func testSingleton() {
|
|
let auth1 = Auth.auth()
|
|
XCTAssertNotNil(auth1)
|
|
let auth2 = Auth.auth()
|
|
XCTAssertTrue(auth1 === auth2)
|
|
}
|
|
|
|
/** @fn testDefaultAuth
|
|
@brief Verifies the @c auth method associates with the default Firebase app.
|
|
*/
|
|
func testDefaultAuth() throws {
|
|
let auth1 = Auth.auth()
|
|
let defaultApp = try XCTUnwrap(FirebaseApp.app())
|
|
let auth2 = Auth.auth(app: defaultApp)
|
|
XCTAssertTrue(auth1 === auth2)
|
|
XCTAssertTrue(auth1.app === defaultApp)
|
|
}
|
|
|
|
/** @fn testAppAPIkey
|
|
@brief Verifies the API key is correctly copied from @c FIRApp to @c FIRAuth .
|
|
*/
|
|
func testAppAPIKey() {
|
|
let auth = Auth.auth()
|
|
XCTAssertEqual(auth.requestConfiguration.apiKey, kFakeAPIKey)
|
|
}
|
|
|
|
/** @fn testAppAssociation
|
|
@brief Verifies each @c FIRApp instance associates with a @c FIRAuth .
|
|
*/
|
|
func testAppAssociation() throws {
|
|
let app1 = FirebaseApp(instanceWithName: "app1", options: options)
|
|
let auth1 = Auth(app: app1)
|
|
XCTAssertNotNil(auth1)
|
|
XCTAssertEqual(auth1.app, app1)
|
|
|
|
let app2 = FirebaseApp(instanceWithName: "app2", options: options)
|
|
let auth2 = Auth(app: app2)
|
|
XCTAssertNotNil(auth2)
|
|
XCTAssertEqual(auth2.app, app2)
|
|
|
|
XCTAssert(auth1 !== auth2)
|
|
}
|
|
|
|
/** @fn testLifeCycle
|
|
@brief Verifies the life cycle of @c FIRAuth is the same as its associated @c FIRApp .
|
|
*/
|
|
func testLifecycle() {
|
|
let expectation = self.expectation(description: #function)
|
|
weak var app: FirebaseApp?
|
|
weak var auth: Auth?
|
|
autoreleasepool {
|
|
let app1 = FirebaseApp(instanceWithName: "app1", options: options)
|
|
app = app1
|
|
let auth1 = Auth(app: app1)
|
|
auth = auth1
|
|
// Verify that neither the app nor the auth is released yet, i.e., the app owns the auth
|
|
// because nothing else retains the auth.
|
|
XCTAssertNotNil(app)
|
|
XCTAssertNotNil(auth)
|
|
}
|
|
DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) {
|
|
XCTAssertNil(app)
|
|
XCTAssertNil(auth)
|
|
expectation.fulfill()
|
|
}
|
|
waitForExpectations(timeout: 5)
|
|
}
|
|
}
|