StartMFASignInRequestTests.swift 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. // Copyright 2024 Google LLC
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. import Foundation
  15. import XCTest
  16. @testable import FirebaseAuth
  17. /** @class StartMFASignInRequestTests
  18. @brief Tests for @c StartMFASignInRequest
  19. */
  20. @available(iOS 13, tvOS 13, macOS 10.15, macCatalyst 13, watchOS 7, *)
  21. class StartMFASignInRequestTests: RPCBaseTests {
  22. let kAPIKey = "APIKey"
  23. let kMfaEnrollmentId = "mfaEnrollmentId"
  24. let kTOTPEnrollmentInfo = "totpEnrollmentInfo"
  25. let kPhoneEnrollmentInfo = "enrollmentInfo"
  26. let kPhoneNumber = "phoneNumber"
  27. let kReCAPTCHAToken = "recaptchaToken"
  28. let kCaptchaResponse = "captchaResponse"
  29. let kRecaptchaVersion = "recaptchaVersion"
  30. /**
  31. @fn testPhoneStartMFASignInRequest
  32. @brief Tests the Start MFA Sign In using SMS request.
  33. */
  34. func testPhoneStartMFASignInRequest() async throws {
  35. let testPendingCredential = "FAKE_PENDING_CREDENTIAL"
  36. let testEnrollmentID = "FAKE_ENROLLMENT_ID"
  37. let testPhoneNumber = "1234567890"
  38. let testRecaptchaToken = "RECAPTCHA_FAKE_TOKEN"
  39. let requestConfiguration = AuthRequestConfiguration(apiKey: kAPIKey, appID: "appID")
  40. let smsSignInInfo = AuthProtoStartMFAPhoneRequestInfo(
  41. phoneNumber: testPhoneNumber,
  42. codeIdentity: CodeIdentity.recaptcha(testRecaptchaToken)
  43. )
  44. let request = StartMFASignInRequest(
  45. MFAPendingCredential: testPendingCredential,
  46. MFAEnrollmentID: testEnrollmentID,
  47. signInInfo: smsSignInInfo,
  48. requestConfiguration: requestConfiguration
  49. )
  50. let expectedURL =
  51. "https://identitytoolkit.googleapis.com/v2/accounts/mfaSignIn:start?key=\(kAPIKey)"
  52. // inject reCAPTCHA response
  53. let testRecaptchaResponse = "RECAPTCHA_FAKE_RESPONSE"
  54. let testRecaptchaVersion = "RECAPTCHA_FAKE_ENTERPRISE"
  55. request.injectRecaptchaFields(
  56. recaptchaResponse: testRecaptchaResponse,
  57. recaptchaVersion: testRecaptchaVersion
  58. )
  59. do {
  60. try await checkRequest(
  61. request: request,
  62. expected: expectedURL,
  63. key: kMfaEnrollmentId,
  64. value: testEnrollmentID
  65. )
  66. } catch {
  67. // Ignore error from missing users array in fake JSON return.
  68. return
  69. }
  70. let requestDictionary = try XCTUnwrap(rpcIssuer.decodedRequest as? [String: AnyHashable])
  71. let smsInfo = try XCTUnwrap(requestDictionary["phoneEnrollmentInfo"] as? [String: String])
  72. XCTAssertEqual(smsInfo[kPhoneNumber], testPhoneNumber)
  73. XCTAssertEqual(smsInfo[kReCAPTCHAToken], testRecaptchaToken)
  74. XCTAssertEqual(smsInfo[kRecaptchaVersion], kRecaptchaVersion)
  75. XCTAssertEqual(smsInfo[kCaptchaResponse], testRecaptchaResponse)
  76. XCTAssertNil(requestDictionary[kTOTPEnrollmentInfo])
  77. }
  78. }