@@ -124,7 +124,7 @@ - (void)testFailedAuthWithBiometrics {
124
124
void (^reply)(BOOL , NSError *);
125
125
[invocation getArgument: &reply atIndex: 4 ];
126
126
dispatch_async (dispatch_get_global_queue (QOS_CLASS_BACKGROUND , 0 ), ^{
127
- reply (NO , [NSError errorWithDomain: @" error" code: 99 userInfo: nil ]);
127
+ reply (NO , [NSError errorWithDomain: @" error" code: LAErrorAuthenticationFailed userInfo: nil ]);
128
128
});
129
129
};
130
130
OCMStub ([mockAuthContext evaluatePolicy: policy localizedReason: reason reply: [OCMArg any ]])
@@ -136,17 +136,111 @@ - (void)testFailedAuthWithBiometrics {
136
136
@" localizedReason" : reason,
137
137
}];
138
138
139
+ XCTestExpectation *expectation = [self expectationWithDescription: @" Result is called" ];
140
+ [plugin handleMethodCall: call
141
+ result: ^(id _Nullable result) {
142
+ XCTAssertTrue ([NSThread isMainThread ]);
143
+ XCTAssertTrue ([result isMemberOfClass: [FlutterError class ]]);
144
+ [expectation fulfill ];
145
+ }];
146
+ [self waitForExpectationsWithTimeout: kTimeout handler: nil ];
147
+ }
148
+
149
+ - (void )testFailedWithErrorCode {
150
+ FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc ] init ];
151
+ id mockAuthContext = OCMClassMock ([LAContext class ]);
152
+ plugin.authContextOverrides = @[ mockAuthContext ];
153
+
154
+ FlutterMethodCall *call = [FlutterMethodCall methodCallWithMethodName: @" handleAuthReplyWithSuccess"
155
+ arguments: @{
156
+ @" success" : @NO ,
157
+ @" error" : [NSError errorWithDomain: @" error"
158
+ code: LAErrorPasscodeNotSet
159
+ userInfo: nil ],
160
+ @" stickyAuth" : @NO ,
161
+ }];
162
+
163
+ XCTestExpectation *expectation = [self expectationWithDescription: @" Result is called" ];
164
+ [plugin handleMethodCall: call
165
+ result: ^(id _Nullable result) {
166
+ XCTAssertTrue ([NSThread isMainThread ]);
167
+ XCTAssertTrue ([result isMemberOfClass: [FlutterError class ]]);
168
+ [expectation fulfill ];
169
+ }];
170
+ [self waitForExpectationsWithTimeout: kTimeout handler: nil ];
171
+ }
172
+
173
+ - (void )testFailedWithUnknownErrorCode {
174
+ FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc ] init ];
175
+ id mockAuthContext = OCMClassMock ([LAContext class ]);
176
+ plugin.authContextOverrides = @[ mockAuthContext ];
177
+
178
+ FlutterMethodCall *call = [FlutterMethodCall methodCallWithMethodName: @" handleAuthReplyWithSuccess"
179
+ arguments: @{
180
+ @" success" : @NO ,
181
+ @" error" : [NSError errorWithDomain: @" error"
182
+ code: -9999
183
+ userInfo: nil ],
184
+ @" stickyAuth" : @NO ,
185
+ }];
186
+
187
+ XCTestExpectation *expectation = [self expectationWithDescription: @" Result is called" ];
188
+ [plugin handleMethodCall: call
189
+ result: ^(id _Nullable result) {
190
+ XCTAssertTrue ([NSThread isMainThread ]);
191
+ XCTAssertTrue ([result isMemberOfClass: [FlutterError class ]]);
192
+ [expectation fulfill ];
193
+ }];
194
+ [self waitForExpectationsWithTimeout: kTimeout handler: nil ];
195
+ }
196
+
197
+ - (void )testHandleAuthReplyFailedWithSystemCancel {
198
+ FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc ] init ];
199
+ id mockAuthContext = OCMClassMock ([LAContext class ]);
200
+ plugin.authContextOverrides = @[ mockAuthContext ];
201
+
202
+ FlutterMethodCall *call = [FlutterMethodCall methodCallWithMethodName: @" handleAuthReplyWithSuccess"
203
+ arguments: @{
204
+ @" success" : @NO ,
205
+ @" error" : [NSError errorWithDomain: @" error"
206
+ code: LAErrorSystemCancel
207
+ userInfo: nil ],
208
+ @" stickyAuth" : @NO ,
209
+ }];
210
+
211
+ XCTestExpectation *expectation = [self expectationWithDescription: @" Result is called" ];
212
+ [plugin handleMethodCall: call
213
+ result: ^(id _Nullable result) {
214
+ XCTAssertTrue ([NSThread isMainThread ]);
215
+ XCTAssertFalse ([result boolValue ]);
216
+ [expectation fulfill ];
217
+ }];
218
+ [self waitForExpectationsWithTimeout: kTimeout handler: nil ];
219
+ }
220
+
221
+
222
+ - (void )testHandleAuthReplySucceeded {
223
+ FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc ] init ];
224
+ id mockAuthContext = OCMClassMock ([LAContext class ]);
225
+ plugin.authContextOverrides = @[ mockAuthContext ];
226
+
227
+ FlutterMethodCall *call = [FlutterMethodCall methodCallWithMethodName: @" handleAuthReplyWithSuccess"
228
+ arguments: @{
229
+ @" success" : @YES
230
+ }];
231
+
139
232
XCTestExpectation *expectation = [self expectationWithDescription: @" Result is called" ];
140
233
[plugin handleMethodCall: call
141
234
result: ^(id _Nullable result) {
142
235
XCTAssertTrue ([NSThread isMainThread ]);
143
236
XCTAssertTrue ([result isKindOfClass: [NSNumber class ]]);
144
- XCTAssertFalse ([result boolValue ]);
237
+ XCTAssertTrue ([result boolValue ]);
145
238
[expectation fulfill ];
146
239
}];
147
240
[self waitForExpectationsWithTimeout: kTimeout handler: nil ];
148
241
}
149
242
243
+
150
244
- (void )testFailedAuthWithoutBiometrics {
151
245
FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc ] init ];
152
246
id mockAuthContext = OCMClassMock ([LAContext class ]);
@@ -163,7 +257,7 @@ - (void)testFailedAuthWithoutBiometrics {
163
257
void (^reply)(BOOL , NSError *);
164
258
[invocation getArgument: &reply atIndex: 4 ];
165
259
dispatch_async (dispatch_get_global_queue (QOS_CLASS_BACKGROUND , 0 ), ^{
166
- reply (NO , [NSError errorWithDomain: @" error" code: 99 userInfo: nil ]);
260
+ reply (NO , [NSError errorWithDomain: @" error" code: LAErrorAuthenticationFailed userInfo: nil ]);
167
261
});
168
262
};
169
263
OCMStub ([mockAuthContext evaluatePolicy: policy localizedReason: reason reply: [OCMArg any ]])
@@ -179,8 +273,7 @@ - (void)testFailedAuthWithoutBiometrics {
179
273
[plugin handleMethodCall: call
180
274
result: ^(id _Nullable result) {
181
275
XCTAssertTrue ([NSThread isMainThread ]);
182
- XCTAssertTrue ([result isKindOfClass: [NSNumber class ]]);
183
- XCTAssertFalse ([result boolValue ]);
276
+ XCTAssertTrue ([result isMemberOfClass: [FlutterError class ]]);
184
277
[expectation fulfill ];
185
278
}];
186
279
[self waitForExpectationsWithTimeout: kTimeout handler: nil ];
@@ -203,7 +296,7 @@ - (void)testLocalizedFallbackTitle {
203
296
void (^reply)(BOOL , NSError *);
204
297
[invocation getArgument: &reply atIndex: 4 ];
205
298
dispatch_async (dispatch_get_global_queue (QOS_CLASS_BACKGROUND , 0 ), ^{
206
- reply (NO , [NSError errorWithDomain: @" error" code: 99 userInfo: nil ]);
299
+ reply (NO , [NSError errorWithDomain: @" error" code: LAErrorUserFallback userInfo: nil ]);
207
300
});
208
301
};
209
302
OCMStub ([mockAuthContext evaluatePolicy: policy localizedReason: reason reply: [OCMArg any ]])
@@ -220,10 +313,9 @@ - (void)testLocalizedFallbackTitle {
220
313
XCTestExpectation *expectation = [self expectationWithDescription: @" Result is called" ];
221
314
[plugin handleMethodCall: call
222
315
result: ^(id _Nullable result) {
223
- XCTAssertTrue ([NSThread isMainThread ]);
224
- XCTAssertTrue ([result isKindOfClass: [NSNumber class ]]);
225
316
OCMVerify ([mockAuthContext setLocalizedFallbackTitle: localizedFallbackTitle]);
226
- XCTAssertFalse ([result boolValue ]);
317
+ XCTAssertTrue ([NSThread isMainThread ]);
318
+ XCTAssertTrue ([result isMemberOfClass: [FlutterError class ]]);
227
319
[expectation fulfill ];
228
320
}];
229
321
[self waitForExpectationsWithTimeout: kTimeout handler: nil ];
@@ -245,7 +337,7 @@ - (void)testSkippedLocalizedFallbackTitle {
245
337
void (^reply)(BOOL , NSError *);
246
338
[invocation getArgument: &reply atIndex: 4 ];
247
339
dispatch_async (dispatch_get_global_queue (QOS_CLASS_BACKGROUND , 0 ), ^{
248
- reply (NO , [NSError errorWithDomain: @" error" code: 99 userInfo: nil ]);
340
+ reply (NO , [NSError errorWithDomain: @" error" code: LAErrorUserFallback userInfo: nil ]);
249
341
});
250
342
};
251
343
OCMStub ([mockAuthContext evaluatePolicy: policy localizedReason: reason reply: [OCMArg any ]])
@@ -260,10 +352,9 @@ - (void)testSkippedLocalizedFallbackTitle {
260
352
XCTestExpectation *expectation = [self expectationWithDescription: @" Result is called" ];
261
353
[plugin handleMethodCall: call
262
354
result: ^(id _Nullable result) {
263
- XCTAssertTrue ([NSThread isMainThread ]);
264
- XCTAssertTrue ([result isKindOfClass: [NSNumber class ]]);
265
355
OCMVerify ([mockAuthContext setLocalizedFallbackTitle: nil ]);
266
- XCTAssertFalse ([result boolValue ]);
356
+ XCTAssertTrue ([NSThread isMainThread ]);
357
+ XCTAssertTrue ([result isMemberOfClass: [FlutterError class ]]);
267
358
[expectation fulfill ];
268
359
}];
269
360
[self waitForExpectationsWithTimeout: kTimeout handler: nil ];
0 commit comments