|
18 | 18 | import XCTest
|
19 | 19 |
|
20 | 20 | @available(iOS 15.0, macOS 12.0, tvOS 16.0, *)
|
21 |
| - class StartPasskeyEnrollmentResponseTests: XCTestCase { |
| 21 | + class StartPasskeyEnrollmentResponseTests: RPCBaseTests { |
22 | 22 | private func makeValidDictionary() -> [String: AnyHashable] {
|
23 | 23 | return [
|
24 | 24 | "credentialCreationOptions": [
|
|
41 | 41 | XCTAssertThrowsError(try StartPasskeyEnrollmentResponse(dictionary: invalidDict))
|
42 | 42 | }
|
43 | 43 |
|
44 |
| - func testInitWithMissingRpThrowsError() { |
| 44 | + func testInitWithMissingRp() { |
45 | 45 | var dict = makeValidDictionary()
|
46 | 46 | if var options = dict["credentialCreationOptions"] as? [String: Any] {
|
47 | 47 | options.removeValue(forKey: "rp")
|
|
50 | 50 | XCTAssertThrowsError(try StartPasskeyEnrollmentResponse(dictionary: dict))
|
51 | 51 | }
|
52 | 52 |
|
53 |
| - func testInitWithMissingRpIdThrowsError() { |
| 53 | + func testInitWithMissingRpId() { |
54 | 54 | var dict = makeValidDictionary()
|
55 | 55 | if var options = dict["credentialCreationOptions"] as? [String: Any],
|
56 | 56 | var rp = options["rp"] as? [String: Any] {
|
|
61 | 61 | XCTAssertThrowsError(try StartPasskeyEnrollmentResponse(dictionary: dict))
|
62 | 62 | }
|
63 | 63 |
|
64 |
| - func testInitWithMissingUserThrowsError() { |
| 64 | + func testInitWithMissingUser() { |
65 | 65 | var dict = makeValidDictionary()
|
66 | 66 | if var options = dict["credentialCreationOptions"] as? [String: Any] {
|
67 | 67 | options.removeValue(forKey: "user")
|
|
70 | 70 | XCTAssertThrowsError(try StartPasskeyEnrollmentResponse(dictionary: dict))
|
71 | 71 | }
|
72 | 72 |
|
73 |
| - func testInitWithMissingUserIdThrowsError() { |
| 73 | + func testInitWithMissingUserId() { |
74 | 74 | var dict = makeValidDictionary()
|
75 | 75 | if var options = dict["credentialCreationOptions"] as? [String: Any],
|
76 | 76 | var user = options["user"] as? [String: Any] {
|
|
81 | 81 | XCTAssertThrowsError(try StartPasskeyEnrollmentResponse(dictionary: dict))
|
82 | 82 | }
|
83 | 83 |
|
84 |
| - func testInitWithMissingChallengeThrowsError() { |
| 84 | + func testInitWithMissingChallenge() { |
85 | 85 | var dict = makeValidDictionary()
|
86 |
| - if var options = dict["credentialCreationOptions"] as? [String: Any] { |
| 86 | + if var options = dict["credentialCreationOptions"] as? [String: AnyHashable] { |
87 | 87 | options.removeValue(forKey: "challenge")
|
88 |
| - dict["credentialCreationOptions"] = options as? AnyHashable |
| 88 | + dict["credentialCreationOptions"] = options as [String: AnyHashable] |
89 | 89 | }
|
90 |
| - XCTAssertThrowsError(try StartPasskeyEnrollmentResponse(dictionary: dict)) |
| 90 | + XCTAssertThrowsError( |
| 91 | + try StartPasskeyEnrollmentResponse(dictionary: dict) |
| 92 | + ) { error in |
| 93 | + let nsError = error as NSError |
| 94 | + XCTAssertEqual(nsError.domain, AuthErrorDomain) |
| 95 | + XCTAssertEqual(nsError.code, AuthErrorCode.internalError.rawValue) |
| 96 | + } |
| 97 | + } |
| 98 | + |
| 99 | + func testSuccessfulStartPasskeyEnrollmentResponse() async throws { |
| 100 | + let expectedRpID = "example.com" |
| 101 | + let expectedUserID = "USER_123" |
| 102 | + let expectedChallenge = "FAKE_CHALLENGE" |
| 103 | + |
| 104 | + rpcIssuer.respondBlock = { |
| 105 | + try self.rpcIssuer.respond(withJSON: [ |
| 106 | + "credentialCreationOptions": [ |
| 107 | + "rp": ["id": expectedRpID], |
| 108 | + "user": ["id": expectedUserID], |
| 109 | + "challenge": expectedChallenge, |
| 110 | + ], |
| 111 | + ]) |
| 112 | + } |
| 113 | + let request = StartPasskeyEnrollmentRequest( |
| 114 | + idToken: "DUMMY_ID_TOKEN", |
| 115 | + requestConfiguration: AuthRequestConfiguration(apiKey: "API_KEY", appID: "APP_ID") |
| 116 | + ) |
| 117 | + let response = try await authBackend.call(with: request) |
| 118 | + XCTAssertEqual(response.rpID, expectedRpID) |
| 119 | + XCTAssertEqual(response.userID, expectedUserID) |
| 120 | + XCTAssertEqual(response.challenge, expectedChallenge) |
91 | 121 | }
|
92 | 122 | }
|
93 | 123 |
|
|
0 commit comments