|
102 | 102 | @brief Tests a successful invocation of @c verifyPhoneNumber with recaptcha enterprise enforced |
103 | 103 | */ |
104 | 104 | func testVerifyPhoneNumberWithRceEnforceSuccess() async throws { |
105 | | - initApp(#function) |
| 105 | + initApp(#function, mockRecaptchaVerifier: FakeAuthRecaptchaVerifier(captchaResponse: kCaptchaResponse)) |
106 | 106 | let auth = try XCTUnwrap(PhoneAuthProviderTests.auth) |
107 | 107 | // TODO: Figure out how to mock objective C's FIRRecaptchaGetToken response |
108 | 108 | let provider = PhoneAuthProvider.provider(auth: auth) |
109 | | - let mockVerifier = FakeAuthRecaptchaVerifier(captchaResponse: kCaptchaResponse) |
110 | | - AuthRecaptchaVerifier.setShared(mockVerifier, auth: auth) |
111 | 109 | rpcIssuer.rceMode = "ENFORCE" |
112 | 110 | let requestExpectation = expectation(description: "verifyRequester") |
113 | 111 | rpcIssuer?.verifyRequester = { request in |
|
127 | 125 | let result = try await provider.verifyClAndSendVerificationCodeWithRecaptcha( |
128 | 126 | toPhoneNumber: kTestPhoneNumber, |
129 | 127 | retryOnInvalidAppCredential: false, |
130 | | - uiDelegate: nil, |
131 | | - recaptchaVerifier: mockVerifier |
| 128 | + uiDelegate: nil |
132 | 129 | ) |
133 | 130 | XCTAssertEqual(result, kTestVerificationID) |
134 | 131 | } catch { |
|
142 | 139 | @brief Tests a successful invocation of @c verifyPhoneNumber with recaptcha enterprise enforced |
143 | 140 | */ |
144 | 141 | func testVerifyPhoneNumberWithRceEnforceInvalidRecaptcha() async throws { |
145 | | - initApp(#function) |
| 142 | + initApp(#function, mockRecaptchaVerifier: FakeAuthRecaptchaVerifier()) |
146 | 143 | let auth = try XCTUnwrap(PhoneAuthProviderTests.auth) |
147 | 144 | // TODO: Figure out how to mock objective C's FIRRecaptchaGetToken response |
148 | 145 | let provider = PhoneAuthProvider.provider(auth: auth) |
149 | | - let mockVerifier = FakeAuthRecaptchaVerifier() |
150 | | - AuthRecaptchaVerifier.setShared(mockVerifier, auth: auth) |
151 | 146 | rpcIssuer.rceMode = "ENFORCE" |
152 | 147 | let requestExpectation = expectation(description: "verifyRequester") |
153 | 148 | rpcIssuer?.verifyRequester = { request in |
|
170 | 165 | _ = try await provider.verifyClAndSendVerificationCodeWithRecaptcha( |
171 | 166 | toPhoneNumber: kTestPhoneNumber, |
172 | 167 | retryOnInvalidAppCredential: false, |
173 | | - uiDelegate: nil, |
174 | | - recaptchaVerifier: mockVerifier |
| 168 | + uiDelegate: nil |
175 | 169 | ) |
176 | 170 | // XCTAssertEqual(result, kTestVerificationID) |
177 | 171 | } catch { |
|
211 | 205 | /// @brief Tests a successful invocation of @c verifyPhoneNumber with recaptcha enterprise in |
212 | 206 | /// audit mode |
213 | 207 | func testVerifyPhoneNumberWithRceAuditSuccess() async throws { |
214 | | - initApp(#function) |
| 208 | + initApp(#function, mockRecaptchaVerifier: FakeAuthRecaptchaVerifier(captchaResponse: kCaptchaResponse)) |
215 | 209 | let auth = try XCTUnwrap(PhoneAuthProviderTests.auth) |
216 | 210 | let provider = PhoneAuthProvider.provider(auth: auth) |
217 | | - let mockVerifier = FakeAuthRecaptchaVerifier(captchaResponse: kCaptchaResponse) |
218 | | - AuthRecaptchaVerifier.setShared(mockVerifier, auth: auth) |
219 | 211 | rpcIssuer.rceMode = "AUDIT" |
220 | 212 | let requestExpectation = expectation(description: "verifyRequester") |
221 | 213 | rpcIssuer?.verifyRequester = { request in |
|
235 | 227 | let result = try await provider.verifyClAndSendVerificationCodeWithRecaptcha( |
236 | 228 | toPhoneNumber: kTestPhoneNumber, |
237 | 229 | retryOnInvalidAppCredential: false, |
238 | | - uiDelegate: nil, |
239 | | - recaptchaVerifier: mockVerifier |
| 230 | + uiDelegate: nil |
240 | 231 | ) |
241 | 232 | XCTAssertEqual(result, kTestVerificationID) |
242 | 233 | } catch { |
|
249 | 240 | /// @brief Tests a successful invocation of @c verifyPhoneNumber with recaptcha enterprise in |
250 | 241 | /// audit mode |
251 | 242 | func testVerifyPhoneNumberWithRceAuditInvalidRecaptcha() async throws { |
252 | | - initApp(#function) |
| 243 | + initApp(#function, mockRecaptchaVerifier: FakeAuthRecaptchaVerifier()) |
253 | 244 | let auth = try XCTUnwrap(PhoneAuthProviderTests.auth) |
254 | 245 | let provider = PhoneAuthProvider.provider(auth: auth) |
255 | | - let mockVerifier = FakeAuthRecaptchaVerifier() |
256 | | - AuthRecaptchaVerifier.setShared(mockVerifier, auth: auth) |
257 | 246 | rpcIssuer.rceMode = "AUDIT" |
258 | 247 | let requestExpectation = expectation(description: "verifyRequester") |
259 | 248 | rpcIssuer?.verifyRequester = { request in |
|
276 | 265 | _ = try await provider.verifyClAndSendVerificationCodeWithRecaptcha( |
277 | 266 | toPhoneNumber: kTestPhoneNumber, |
278 | 267 | retryOnInvalidAppCredential: false, |
279 | | - uiDelegate: nil, |
280 | | - recaptchaVerifier: mockVerifier |
| 268 | + uiDelegate: nil |
281 | 269 | ) |
282 | 270 | } catch { |
283 | 271 | let underlyingError = (error as NSError).userInfo[NSUnderlyingErrorKey] as? NSError |
|
530 | 518 | } |
531 | 519 |
|
532 | 520 | private func testRecaptchaFlowError(function: String, rceError: Error) async throws { |
533 | | - initApp(function) |
| 521 | + initApp(function, mockRecaptchaVerifier: FakeAuthRecaptchaVerifier(error: rceError)) |
534 | 522 | let auth = try XCTUnwrap(PhoneAuthProviderTests.auth) |
535 | 523 | // TODO: Figure out how to mock objective C's FIRRecaptchaGetToken response |
536 | 524 | // Mocking the output of verify() method |
537 | 525 | let provider = PhoneAuthProvider.provider(auth: auth) |
538 | | - let mockVerifier = FakeAuthRecaptchaVerifier(error: rceError) |
539 | | - AuthRecaptchaVerifier.setShared(mockVerifier, auth: auth) |
540 | 526 | rpcIssuer.rceMode = "ENFORCE" |
541 | 527 | do { |
542 | 528 | let _ = try await provider.verifyClAndSendVerificationCodeWithRecaptcha( |
543 | 529 | toPhoneNumber: kTestPhoneNumber, |
544 | 530 | retryOnInvalidAppCredential: false, |
545 | | - uiDelegate: nil, |
546 | | - recaptchaVerifier: mockVerifier |
| 531 | + uiDelegate: nil |
547 | 532 | ) |
548 | 533 | } catch { |
549 | 534 | XCTAssertEqual((error as NSError).code, (rceError as NSError).code) |
|
852 | 837 | bothClientAndAppID: Bool = false, |
853 | 838 | testMode: Bool = false, |
854 | 839 | forwardingNotification: Bool = true, |
855 | | - fakeToken: Bool = false) { |
| 840 | + fakeToken: Bool = false, |
| 841 | + mockRecaptchaVerifier: AuthRecaptchaVerifier? = nil) { |
856 | 842 | let options = FirebaseOptions(googleAppID: "0:0000000000000:ios:0000000000000000", |
857 | 843 | gcmSenderID: "00000000000000000-00000000000-000000000") |
858 | 844 | options.apiKey = PhoneAuthProviderTests.kFakeAPIKey |
|
870 | 856 | let strippedName = functionName.replacingOccurrences(of: "(", with: "") |
871 | 857 | .replacingOccurrences(of: ")", with: "") |
872 | 858 | FirebaseApp.configure(name: strippedName, options: options) |
873 | | - let auth = Auth(app: FirebaseApp.app(name: strippedName)!, backend: authBackend) |
| 859 | + let auth = if let mockRecaptchaVerifier { |
| 860 | + Auth(app: FirebaseApp.app(name: strippedName)!, backend: authBackend) |
| 861 | + } else { |
| 862 | + Auth(app: FirebaseApp.app(name: strippedName)!, backend: authBackend) |
| 863 | + } |
874 | 864 |
|
875 | 865 | kAuthGlobalWorkQueue.sync { |
876 | 866 | // Wait for Auth protectedDataInitialization to finish. |
|
0 commit comments