فهرست منبع

[auth-swift] Some unit test cleanup (#11133)

Paul Beusterien 3 سال پیش
والد
کامیت
72ca9409fa

+ 4 - 0
FirebaseAuth/Tests/Unit/Fakes/FakeBackendRPCIssuer.swift

@@ -68,6 +68,7 @@ class FakeBackendRPCIssuer: NSObject, AuthBackendRPCIssuer {
   var verifyRequester: ((SendVerificationCodeRequest) -> Void)?
   var verifyClientRequester: ((VerifyClientRequest) -> Void)?
   var projectConfigRequester: ((GetProjectConfigRequest) -> Void)?
+  var verifyPasswordRequester: ((VerifyPasswordRequest) -> Void)?
 
   var fakeGetAccountProviderJSON: [[String: AnyHashable]]?
   var fakeSecureTokenServiceJSON: [String: AnyHashable]?
@@ -91,6 +92,9 @@ class FakeBackendRPCIssuer: NSObject, AuthBackendRPCIssuer {
     } else if let projectConfigRequester,
               let projectConfigRequest = request as? GetProjectConfigRequest {
       projectConfigRequester(projectConfigRequest)
+    } else if let verifyPasswordRequester,
+              let verifyPasswordRequest = request as? VerifyPasswordRequest {
+      verifyPasswordRequester(verifyPasswordRequest)
     }
 
     if let _ = request as? GetAccountInfoRequest,

+ 24 - 36
FirebaseAuth/Tests/Unit/PhoneAuthProviderTests.swift

@@ -23,9 +23,6 @@
 
   class PhoneAuthProviderTests: RPCBaseTests {
     static let kFakeAuthorizedDomain = "test.firebaseapp.com"
-    private let kFakeAccessToken = "fakeAccessToken"
-    private let kFakeIDToken = "fakeIDToken"
-    private let kFakeProviderID = "fakeProviderID"
     static let kFakeAPIKey = "asdfghjkl"
     static let kFakeEmulatorHost = "emulatorhost"
     static let kFakeEmulatorPort = 12345
@@ -310,16 +307,14 @@
         XCTAssertEqual(request.appToken, "21402324255E")
         XCTAssertFalse(request.isSandbox)
         verifyClientRequestExpectation.fulfill()
-        kAuthGlobalWorkQueue.async {
-          do {
-            // Response for the underlying VerifyClientRequest RPC call.
-            try self.rpcIssuer?.respond(withJSON: [
-              "receipt": self.kTestReceipt,
-              "suggestedTimeout": self.kTestTimeout,
-            ])
-          } catch {
-            XCTFail("Failure sending response: \(error)")
-          }
+        do {
+          // Response for the underlying VerifyClientRequest RPC call.
+          try self.rpcIssuer?.respond(withJSON: [
+            "receipt": self.kTestReceipt,
+            "suggestedTimeout": self.kTestTimeout,
+          ])
+        } catch {
+          XCTFail("Failure sending response: \(error)")
         }
       }
 
@@ -398,19 +393,16 @@
         XCTAssertEqual(request.appToken, "21402324255E")
         XCTAssertFalse(request.isSandbox)
         verifyClientRequestExpectation.fulfill()
-        kAuthGlobalWorkQueue.async {
-          do {
-            // Response for the underlying VerifyClientRequest RPC call.
-            try self.rpcIssuer?.respond(withJSON: [
-              "receipt": self.kTestReceipt,
-              "suggestedTimeout": self.kTestTimeout,
-            ])
-          } catch {
-            XCTFail("Failure sending response: \(error)")
-          }
+        do {
+          // Response for the underlying VerifyClientRequest RPC call.
+          try self.rpcIssuer?.respond(withJSON: [
+            "receipt": self.kTestReceipt,
+            "suggestedTimeout": self.kTestTimeout,
+          ])
+        } catch {
+          XCTFail("Failure sending response: \(error)")
         }
       }
-
       if reCAPTCHAfallback {
         let projectConfigExpectation = self.expectation(description: "projectConfiguration")
         rpcIssuer?.projectConfigRequester = { request in
@@ -503,22 +495,19 @@
       }
 
       // 1. Intercept, handle, and test the projectConfiguration RPC calls.
-
       if reCAPTCHAfallback {
         let projectConfigExpectation = self.expectation(description: "projectConfiguration")
         rpcIssuer?.projectConfigRequester = { request in
           XCTAssertEqual(request.apiKey, PhoneAuthProviderTests.kFakeAPIKey)
           projectConfigExpectation.fulfill()
-          kAuthGlobalWorkQueue.async {
-            do {
-              // Response for the underlying VerifyClientRequest RPC call.
-              try self.rpcIssuer?.respond(
-                withJSON: ["projectId": "kFakeProjectID",
-                           "authorizedDomains": [PhoneAuthProviderTests.kFakeAuthorizedDomain]]
-              )
-            } catch {
-              XCTFail("Failure sending response: \(error)")
-            }
+          do {
+            // Response for the underlying VerifyClientRequest RPC call.
+            try self.rpcIssuer?.respond(
+              withJSON: ["projectId": "kFakeProjectID",
+                         "authorizedDomains": [PhoneAuthProviderTests.kFakeAuthorizedDomain]]
+            )
+          } catch {
+            XCTFail("Failure sending response: \(error)")
           }
         }
       }
@@ -582,7 +571,6 @@
           }
           expectation.fulfill()
         }
-
       waitForExpectations(timeout: 5)
     }
 

+ 39 - 38
FirebaseAuth/Tests/Unit/UserTests.swift

@@ -460,7 +460,6 @@ class UserTests: RPCBaseTests {
     signInWithEmailPasswordReturnFakeUser { user in
       do {
         let group = self.createGroup()
-
         let profileChange = user.createProfileChangeRequest()
         profileChange.photoURL = URL(string: self.kTestPhotoURL)
         profileChange.displayName = self.kNewDisplayName
@@ -1342,46 +1341,48 @@ class UserTests: RPCBaseTests {
     let kRefreshToken = "fakeRefreshToken"
     setFakeSecureTokenService(fakeAccessToken: fakeAccessToken)
 
-    // 1. Create a group to synchronize request creation by the fake rpcIssuer.
-    let group = createGroup()
-
-    do {
-      try UserTests.auth?.signOut()
-      UserTests.auth?.signIn(withEmail: kEmail, password: kFakePassword) { authResult, error in
-        // 4. After the response triggers the callback, verify the returned result.
-        XCTAssertTrue(Thread.isMainThread)
-        guard let user = authResult?.user else {
-          XCTFail("authResult.user is missing")
-          return
-        }
-        XCTAssertEqual(user.refreshToken, kRefreshToken)
-        XCTAssertFalse(user.isAnonymous)
-        XCTAssertEqual(user.email, self.kEmail)
-        guard let additionalUserInfo = authResult?.additionalUserInfo else {
-          XCTFail("authResult.additionalUserInfo is missing")
-          return
-        }
-        XCTAssertFalse(additionalUserInfo.isNewUser)
-        XCTAssertEqual(additionalUserInfo.providerID, EmailAuthProvider.id)
-        XCTAssertNil(error)
-        completion(user)
-      }
-      group.wait()
-
-      // 2. After the fake rpcIssuer leaves the group, validate the created Request instance.
-      let request = try XCTUnwrap(rpcIssuer?.request as? VerifyPasswordRequest)
-      XCTAssertEqual(request.email, kEmail)
-      XCTAssertEqual(request.password, kFakePassword)
+    rpcIssuer?.verifyPasswordRequester = { request in
+      // 2. Validate the created Request instance.
+      XCTAssertEqual(request.email, self.kEmail)
+      XCTAssertEqual(request.password, self.kFakePassword)
       XCTAssertEqual(request.apiKey, AuthTests.kFakeAPIKey)
       XCTAssertTrue(request.returnSecureToken)
-
-      // 3. Send the response from the fake backend.
-      try rpcIssuer?.respond(withJSON: ["idToken": fakeAccessToken,
-                                        "isNewUser": true,
-                                        "refreshToken": kRefreshToken])
-
+      do {
+        // 3. Send the response from the fake backend.
+        try self.rpcIssuer?.respond(withJSON: ["idToken": fakeAccessToken,
+                                               "isNewUser": true,
+                                               "refreshToken": kRefreshToken])
+      } catch {
+        XCTFail("Failure sending response: \(error)")
+      }
+    }
+    // 1. After setting up fakes, sign out and sign in.
+    do {
+      try UserTests.auth?.signOut()
     } catch {
-      XCTFail("Throw in \(#function): \(error)")
+      XCTFail("Sign out failed: \(error)")
+      return
+    }
+    UserTests.auth?.signIn(withEmail: kEmail, password: kFakePassword) { authResult, error in
+      // 4. After the response triggers the callback, verify the returned result.
+      XCTAssertTrue(Thread.isMainThread)
+      guard let user = authResult?.user else {
+        XCTFail("authResult.user is missing")
+        return
+      }
+      XCTAssertEqual(user.refreshToken, kRefreshToken)
+      XCTAssertFalse(user.isAnonymous)
+      XCTAssertEqual(user.email, self.kEmail)
+      guard let additionalUserInfo = authResult?.additionalUserInfo else {
+        XCTFail("authResult.additionalUserInfo is missing")
+        return
+      }
+      XCTAssertFalse(additionalUserInfo.isNewUser)
+      XCTAssertEqual(additionalUserInfo.providerID, EmailAuthProvider.id)
+      XCTAssertNil(error)
+      // Clear the password Requester to avoid being called again by reauthenticate tests.
+      self.rpcIssuer?.verifyPasswordRequester = nil
+      completion(user)
     }
   }