4
4
5
5
@import LocalAuthentication;
6
6
@import XCTest;
7
+ @import local_auth_ios;
7
8
8
9
#import < OCMock/OCMock.h>
9
10
10
- #if __has_include(<local_auth/FLTLocalAuthPlugin.h>)
11
- #import < local_auth/FLTLocalAuthPlugin.h>
12
- #else
13
- @import local_auth_ios;
14
- #endif
11
+ // Set a long timeout to avoid flake due to slow CI.
12
+ static const NSTimeInterval kTimeout = 30.0 ;
15
13
16
- // Private API needed for tests.
17
- @interface FLTLocalAuthPlugin (Test)
18
- - (void )setAuthContextOverrides : (NSArray <LAContext *> *)authContexts ;
14
+ /* *
15
+ * A context factory that returns preset contexts.
16
+ */
17
+ @interface StubAuthContextFactory : NSObject <FLAAuthContextFactory>
18
+ @property (copy , nonatomic ) NSMutableArray *contexts;
19
+ - (instancetype )initWithContexts : (NSArray *)contexts ;
19
20
@end
20
21
21
- // Set a long timeout to avoid flake due to slow CI.
22
- static const NSTimeInterval kTimeout = 30.0 ;
22
+ @implementation StubAuthContextFactory
23
+
24
+ - (instancetype )initWithContexts : (NSArray *)contexts {
25
+ self = [super init ];
26
+ if (self) {
27
+ _contexts = [contexts mutableCopy ];
28
+ }
29
+ return self;
30
+ }
31
+
32
+ - (LAContext *)createAuthContext {
33
+ NSAssert (self.contexts.count > 0 , @" Insufficient test contexts provided" );
34
+ LAContext *context = [self .contexts firstObject ];
35
+ [self .contexts removeObjectAtIndex: 0 ];
36
+ return context;
37
+ }
38
+
39
+ @end
40
+
41
+ #pragma mark -
23
42
24
43
@interface FLTLocalAuthPluginTests : XCTestCase
25
44
@end
@@ -31,9 +50,10 @@ - (void)setUp {
31
50
}
32
51
33
52
- (void )testSuccessfullAuthWithBiometrics {
34
- FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc ] init ];
35
53
id mockAuthContext = OCMClassMock ([LAContext class ]);
36
- plugin.authContextOverrides = @[ mockAuthContext ];
54
+ FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc ]
55
+ initWithContextFactory: [[StubAuthContextFactory alloc ]
56
+ initWithContexts: @[ mockAuthContext ]]];
37
57
38
58
const LAPolicy policy = LAPolicyDeviceOwnerAuthenticationWithBiometrics;
39
59
NSString *reason = @" a reason" ;
@@ -70,9 +90,10 @@ - (void)testSuccessfullAuthWithBiometrics {
70
90
}
71
91
72
92
- (void )testSuccessfullAuthWithoutBiometrics {
73
- FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc ] init ];
74
93
id mockAuthContext = OCMClassMock ([LAContext class ]);
75
- plugin.authContextOverrides = @[ mockAuthContext ];
94
+ FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc ]
95
+ initWithContextFactory: [[StubAuthContextFactory alloc ]
96
+ initWithContexts: @[ mockAuthContext ]]];
76
97
77
98
const LAPolicy policy = LAPolicyDeviceOwnerAuthentication;
78
99
NSString *reason = @" a reason" ;
@@ -109,9 +130,10 @@ - (void)testSuccessfullAuthWithoutBiometrics {
109
130
}
110
131
111
132
- (void )testFailedAuthWithBiometrics {
112
- FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc ] init ];
113
133
id mockAuthContext = OCMClassMock ([LAContext class ]);
114
- plugin.authContextOverrides = @[ mockAuthContext ];
134
+ FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc ]
135
+ initWithContextFactory: [[StubAuthContextFactory alloc ]
136
+ initWithContexts: @[ mockAuthContext ]]];
115
137
116
138
const LAPolicy policy = LAPolicyDeviceOwnerAuthenticationWithBiometrics;
117
139
NSString *reason = @" a reason" ;
@@ -147,9 +169,10 @@ - (void)testFailedAuthWithBiometrics {
147
169
}
148
170
149
171
- (void )testFailedWithUnknownErrorCode {
150
- FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc ] init ];
151
172
id mockAuthContext = OCMClassMock ([LAContext class ]);
152
- plugin.authContextOverrides = @[ mockAuthContext ];
173
+ FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc ]
174
+ initWithContextFactory: [[StubAuthContextFactory alloc ]
175
+ initWithContexts: @[ mockAuthContext ]]];
153
176
154
177
const LAPolicy policy = LAPolicyDeviceOwnerAuthentication;
155
178
NSString *reason = @" a reason" ;
@@ -185,9 +208,10 @@ - (void)testFailedWithUnknownErrorCode {
185
208
}
186
209
187
210
- (void )testSystemCancelledWithoutStickyAuth {
188
- FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc ] init ];
189
211
id mockAuthContext = OCMClassMock ([LAContext class ]);
190
- plugin.authContextOverrides = @[ mockAuthContext ];
212
+ FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc ]
213
+ initWithContextFactory: [[StubAuthContextFactory alloc ]
214
+ initWithContexts: @[ mockAuthContext ]]];
191
215
192
216
const LAPolicy policy = LAPolicyDeviceOwnerAuthentication;
193
217
NSString *reason = @" a reason" ;
@@ -225,9 +249,10 @@ - (void)testSystemCancelledWithoutStickyAuth {
225
249
}
226
250
227
251
- (void )testFailedAuthWithoutBiometrics {
228
- FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc ] init ];
229
252
id mockAuthContext = OCMClassMock ([LAContext class ]);
230
- plugin.authContextOverrides = @[ mockAuthContext ];
253
+ FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc ]
254
+ initWithContextFactory: [[StubAuthContextFactory alloc ]
255
+ initWithContexts: @[ mockAuthContext ]]];
231
256
232
257
const LAPolicy policy = LAPolicyDeviceOwnerAuthentication;
233
258
NSString *reason = @" a reason" ;
@@ -263,9 +288,10 @@ - (void)testFailedAuthWithoutBiometrics {
263
288
}
264
289
265
290
- (void )testLocalizedFallbackTitle {
266
- FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc ] init ];
267
291
id mockAuthContext = OCMClassMock ([LAContext class ]);
268
- plugin.authContextOverrides = @[ mockAuthContext ];
292
+ FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc ]
293
+ initWithContextFactory: [[StubAuthContextFactory alloc ]
294
+ initWithContexts: @[ mockAuthContext ]]];
269
295
270
296
const LAPolicy policy = LAPolicyDeviceOwnerAuthentication;
271
297
NSString *reason = @" a reason" ;
@@ -303,9 +329,10 @@ - (void)testLocalizedFallbackTitle {
303
329
}
304
330
305
331
- (void )testSkippedLocalizedFallbackTitle {
306
- FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc ] init ];
307
332
id mockAuthContext = OCMClassMock ([LAContext class ]);
308
- plugin.authContextOverrides = @[ mockAuthContext ];
333
+ FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc ]
334
+ initWithContextFactory: [[StubAuthContextFactory alloc ]
335
+ initWithContexts: @[ mockAuthContext ]]];
309
336
310
337
const LAPolicy policy = LAPolicyDeviceOwnerAuthentication;
311
338
NSString *reason = @" a reason" ;
@@ -340,9 +367,10 @@ - (void)testSkippedLocalizedFallbackTitle {
340
367
}
341
368
342
369
- (void )testDeviceSupportsBiometrics_withEnrolledHardware {
343
- FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc ] init ];
344
370
id mockAuthContext = OCMClassMock ([LAContext class ]);
345
- plugin.authContextOverrides = @[ mockAuthContext ];
371
+ FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc ]
372
+ initWithContextFactory: [[StubAuthContextFactory alloc ]
373
+ initWithContexts: @[ mockAuthContext ]]];
346
374
347
375
const LAPolicy policy = LAPolicyDeviceOwnerAuthenticationWithBiometrics;
348
376
OCMStub ([mockAuthContext canEvaluatePolicy: policy error: [OCMArg setTo: nil ]]).andReturn (YES );
@@ -362,9 +390,10 @@ - (void)testDeviceSupportsBiometrics_withEnrolledHardware {
362
390
}
363
391
364
392
- (void )testDeviceSupportsBiometrics_withNonEnrolledHardware {
365
- FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc ] init ];
366
393
id mockAuthContext = OCMClassMock ([LAContext class ]);
367
- plugin.authContextOverrides = @[ mockAuthContext ];
394
+ FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc ]
395
+ initWithContextFactory: [[StubAuthContextFactory alloc ]
396
+ initWithContexts: @[ mockAuthContext ]]];
368
397
369
398
const LAPolicy policy = LAPolicyDeviceOwnerAuthenticationWithBiometrics;
370
399
void (^canEvaluatePolicyHandler)(NSInvocation *) = ^(NSInvocation *invocation) {
@@ -396,9 +425,10 @@ - (void)testDeviceSupportsBiometrics_withNonEnrolledHardware {
396
425
}
397
426
398
427
- (void )testDeviceSupportsBiometrics_withNoBiometricHardware {
399
- FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc ] init ];
400
428
id mockAuthContext = OCMClassMock ([LAContext class ]);
401
- plugin.authContextOverrides = @[ mockAuthContext ];
429
+ FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc ]
430
+ initWithContextFactory: [[StubAuthContextFactory alloc ]
431
+ initWithContexts: @[ mockAuthContext ]]];
402
432
403
433
const LAPolicy policy = LAPolicyDeviceOwnerAuthenticationWithBiometrics;
404
434
void (^canEvaluatePolicyHandler)(NSInvocation *) = ^(NSInvocation *invocation) {
@@ -430,9 +460,10 @@ - (void)testDeviceSupportsBiometrics_withNoBiometricHardware {
430
460
}
431
461
432
462
- (void )testGetEnrolledBiometrics_withFaceID {
433
- FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc ] init ];
434
463
id mockAuthContext = OCMClassMock ([LAContext class ]);
435
- plugin.authContextOverrides = @[ mockAuthContext ];
464
+ FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc ]
465
+ initWithContextFactory: [[StubAuthContextFactory alloc ]
466
+ initWithContexts: @[ mockAuthContext ]]];
436
467
437
468
const LAPolicy policy = LAPolicyDeviceOwnerAuthenticationWithBiometrics;
438
469
OCMStub ([mockAuthContext canEvaluatePolicy: policy error: [OCMArg setTo: nil ]]).andReturn (YES );
@@ -454,9 +485,10 @@ - (void)testGetEnrolledBiometrics_withFaceID {
454
485
}
455
486
456
487
- (void )testGetEnrolledBiometrics_withTouchID {
457
- FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc ] init ];
458
488
id mockAuthContext = OCMClassMock ([LAContext class ]);
459
- plugin.authContextOverrides = @[ mockAuthContext ];
489
+ FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc ]
490
+ initWithContextFactory: [[StubAuthContextFactory alloc ]
491
+ initWithContexts: @[ mockAuthContext ]]];
460
492
461
493
const LAPolicy policy = LAPolicyDeviceOwnerAuthenticationWithBiometrics;
462
494
OCMStub ([mockAuthContext canEvaluatePolicy: policy error: [OCMArg setTo: nil ]]).andReturn (YES );
@@ -478,9 +510,10 @@ - (void)testGetEnrolledBiometrics_withTouchID {
478
510
}
479
511
480
512
- (void )testGetEnrolledBiometrics_withoutEnrolledHardware {
481
- FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc ] init ];
482
513
id mockAuthContext = OCMClassMock ([LAContext class ]);
483
- plugin.authContextOverrides = @[ mockAuthContext ];
514
+ FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc ]
515
+ initWithContextFactory: [[StubAuthContextFactory alloc ]
516
+ initWithContexts: @[ mockAuthContext ]]];
484
517
485
518
const LAPolicy policy = LAPolicyDeviceOwnerAuthenticationWithBiometrics;
486
519
void (^canEvaluatePolicyHandler)(NSInvocation *) = ^(NSInvocation *invocation) {
0 commit comments