413
413
*/
414
414
static NSString *const kPasskeyName = @" mockPasskeyName" ;
415
415
416
+
417
+ /* * @var kDefaultPasskeyName
418
+ @brief default passkey name.
419
+ */
420
+ static NSString *const kDefaultPasskeyName = @" Unnamed account (Apple)" ;
421
+
416
422
/* * @var kRpId
417
423
@brief The fake passkey relying party identifier.
418
424
*/
@@ -988,6 +994,118 @@ - (void)testStartPasskeyEnrollmentSuccess {
988
994
}
989
995
}
990
996
997
+ /* * @fn testStartPasskeyEnrollmentWithNilNameSuccess
998
+ @brief Tests the flow of a successful @c startPasskeyEnrollmentWithName:completion: call
999
+ */
1000
+ - (void )testStartPasskeyEnrollmentWithNilNameSuccess {
1001
+ if (@available (iOS 15.0 , tvOS 16.0 , macOS 12.0 , *)) {
1002
+ OCMExpect ([_mockBackend startPasskeyEnrollment: [OCMArg any ] callback: [OCMArg any ]])
1003
+ .andCallBlock2 (^(FIRStartPasskeyEnrollmentRequest *_Nullable request,
1004
+ FIRStartPasskeyEnrollmentResponseCallback callback) {
1005
+ XCTAssertEqualObjects (request.APIKey , kAPIKey );
1006
+ dispatch_async (FIRAuthGlobalWorkQueue (), ^() {
1007
+ id mockStartPasskeyEnrollmentResponse =
1008
+ OCMClassMock ([FIRStartPasskeyEnrollmentResponse class ]);
1009
+ OCMStub ([mockStartPasskeyEnrollmentResponse rpID ]).andReturn (kRpId );
1010
+ OCMStub ([mockStartPasskeyEnrollmentResponse challenge ]).andReturn (kChallenge );
1011
+ OCMStub ([mockStartPasskeyEnrollmentResponse userID ]).andReturn (kUserID );
1012
+ callback (mockStartPasskeyEnrollmentResponse, nil );
1013
+ });
1014
+ });
1015
+ XCTestExpectation *expectation = [self expectationWithDescription: @" callback" ];
1016
+ id mockGetAccountInfoResponseUser = OCMClassMock ([FIRGetAccountInfoResponseUser class ]);
1017
+ [self
1018
+ signInAnonymouslyWithMockGetAccountInfoResponse: mockGetAccountInfoResponseUser
1019
+ completion: ^(FIRUser *_Nonnull user) {
1020
+ [user
1021
+ startPasskeyEnrollmentWithName: nil
1022
+ completion: ^(
1023
+ ASAuthorizationPlatformPublicKeyCredentialRegistrationRequest
1024
+ *_Nullable request,
1025
+ NSError
1026
+ *_Nullable error) {
1027
+ XCTAssertNil (error);
1028
+ XCTAssertEqualObjects (
1029
+ user.passkeyName ,
1030
+ kDefaultPasskeyName );
1031
+ XCTAssertEqualObjects (
1032
+ [[request challenge ]
1033
+ base64EncodedStringWithOptions:
1034
+ 0 ],
1035
+ kChallenge );
1036
+ XCTAssertEqualObjects (
1037
+ [request
1038
+ relyingPartyIdentifier ],
1039
+ kRpId );
1040
+ XCTAssertEqualObjects (
1041
+ [[request userID ]
1042
+ base64EncodedStringWithOptions:
1043
+ 0 ],
1044
+ kUserID );
1045
+ [expectation fulfill ];
1046
+ }];
1047
+ }];
1048
+ [self waitForExpectationsWithTimeout: kExpectationTimeout handler: nil ];
1049
+ OCMVerifyAll (_mockBackend);
1050
+ }
1051
+ }
1052
+
1053
+ /* * @fn testStartPasskeyEnrollmentWithEmptyNameSuccess
1054
+ @brief Tests the flow of a successful @c startPasskeyEnrollmentWithName:completion: call
1055
+ */
1056
+ - (void )testStartPasskeyEnrollmentWithEmptyNameSuccess {
1057
+ if (@available (iOS 15.0 , tvOS 16.0 , macOS 12.0 , *)) {
1058
+ OCMExpect ([_mockBackend startPasskeyEnrollment: [OCMArg any ] callback: [OCMArg any ]])
1059
+ .andCallBlock2 (^(FIRStartPasskeyEnrollmentRequest *_Nullable request,
1060
+ FIRStartPasskeyEnrollmentResponseCallback callback) {
1061
+ XCTAssertEqualObjects (request.APIKey , kAPIKey );
1062
+ dispatch_async (FIRAuthGlobalWorkQueue (), ^() {
1063
+ id mockStartPasskeyEnrollmentResponse =
1064
+ OCMClassMock ([FIRStartPasskeyEnrollmentResponse class ]);
1065
+ OCMStub ([mockStartPasskeyEnrollmentResponse rpID ]).andReturn (kRpId );
1066
+ OCMStub ([mockStartPasskeyEnrollmentResponse challenge ]).andReturn (kChallenge );
1067
+ OCMStub ([mockStartPasskeyEnrollmentResponse userID ]).andReturn (kUserID );
1068
+ callback (mockStartPasskeyEnrollmentResponse, nil );
1069
+ });
1070
+ });
1071
+ XCTestExpectation *expectation = [self expectationWithDescription: @" callback" ];
1072
+ id mockGetAccountInfoResponseUser = OCMClassMock ([FIRGetAccountInfoResponseUser class ]);
1073
+ [self
1074
+ signInAnonymouslyWithMockGetAccountInfoResponse: mockGetAccountInfoResponseUser
1075
+ completion: ^(FIRUser *_Nonnull user) {
1076
+ [user
1077
+ startPasskeyEnrollmentWithName: @" "
1078
+ completion: ^(
1079
+ ASAuthorizationPlatformPublicKeyCredentialRegistrationRequest
1080
+ *_Nullable request,
1081
+ NSError
1082
+ *_Nullable error) {
1083
+ XCTAssertNil (error);
1084
+ XCTAssertEqualObjects (
1085
+ user.passkeyName ,
1086
+ kDefaultPasskeyName );
1087
+ XCTAssertEqualObjects (
1088
+ [[request challenge ]
1089
+ base64EncodedStringWithOptions:
1090
+ 0 ],
1091
+ kChallenge );
1092
+ XCTAssertEqualObjects (
1093
+ [request
1094
+ relyingPartyIdentifier ],
1095
+ kRpId );
1096
+ XCTAssertEqualObjects (
1097
+ [[request userID ]
1098
+ base64EncodedStringWithOptions:
1099
+ 0 ],
1100
+ kUserID );
1101
+ [expectation fulfill ];
1102
+ }];
1103
+ }];
1104
+ [self waitForExpectationsWithTimeout: kExpectationTimeout handler: nil ];
1105
+ OCMVerifyAll (_mockBackend);
1106
+ }
1107
+ }
1108
+
991
1109
/* * @fn testStartPasskeyEnrollmentFailure
992
1110
@brief Tests the flow of a failed @c startPasskeyEnrollmentWithName:completion: call
993
1111
*/
@@ -1008,6 +1126,7 @@ - (void)testStartPasskeyEnrollmentFailure {
1008
1126
NSError
1009
1127
*_Nullable error) {
1010
1128
XCTAssertNil (request);
1129
+ XCTAssertNil (user.passkeyName );
1011
1130
XCTAssertEqual (
1012
1131
error.code ,
1013
1132
FIRAuthErrorCodeOperationNotAllowed);
0 commit comments