|
14 | 14 | namespace CakeDC\Users\Test\TestCase\Controller\Traits; |
15 | 15 |
|
16 | 16 | use Cake\Core\Configure; |
| 17 | +use Cake\Event\Event; |
17 | 18 | use Cake\Http\ServerRequest; |
18 | 19 | use Cake\ORM\TableRegistry; |
| 20 | +use CakeDC\Auth\Authentication\AuthenticationService; |
| 21 | +use CakeDC\Auth\Authenticator\TwoFactorAuthenticator; |
19 | 22 | use CakeDC\Auth\Controller\Component\OneTimePasswordAuthenticatorComponent; |
| 23 | +use CakeDC\Users\UsersPlugin; |
20 | 24 |
|
21 | 25 | class OneTimePasswordVerifyTraitTest extends BaseTrait |
22 | 26 | { |
@@ -147,7 +151,7 @@ public function testVerifyGetShowQR() |
147 | 151 | ->will($this->returnValue('newDataUriGenerated')); |
148 | 152 | $this->Trait->expects($this->once()) |
149 | 153 | ->method('set') |
150 | | - ->with(['secretDataUri' => 'newDataUriGenerated']); |
| 154 | + ->with(['secretDataUri' => 'newDataUriGenerated', 'secret' => 'newSecret']); |
151 | 155 |
|
152 | 156 | $this->Trait->verify(); |
153 | 157 | $user = $this->Trait->getUsersTable()->findById('00000000-0000-0000-0000-000000000001')->firstOrFail(); |
@@ -277,4 +281,49 @@ public function testVerifyGetDoesNotGenerateNewSecret() |
277 | 281 | $session->read(), |
278 | 282 | ); |
279 | 283 | } |
| 284 | + |
| 285 | + /** |
| 286 | + * testVerifySkipEventCheck |
| 287 | + */ |
| 288 | + public function testVerifySkipEventCheck() |
| 289 | + { |
| 290 | + Configure::write('OneTimePasswordAuthenticator.login', true); |
| 291 | + $request = $this->getMockBuilder('Cake\Http\ServerRequest') |
| 292 | + ->onlyMethods(['is', 'getData', 'getSession']) |
| 293 | + ->addMethods(['allow']) |
| 294 | + ->getMock(); |
| 295 | + $this->Trait->setRequest($request); |
| 296 | + |
| 297 | + $userData = [ |
| 298 | + 'id' => 1, |
| 299 | + 'secret_verified' => 1, |
| 300 | + 'email' => 'test@example.com', |
| 301 | + ]; |
| 302 | + $session = $this->_mockSession([ |
| 303 | + 'temporarySession' => $userData, |
| 304 | + ]); |
| 305 | + |
| 306 | + $eventMock = $this->getMockBuilder(Event::class) |
| 307 | + ->disableOriginalConstructor() |
| 308 | + ->getMock(); |
| 309 | + $eventMock->method('getResult')->willReturn(true); |
| 310 | + |
| 311 | + $this->Trait->expects($this->once()) |
| 312 | + ->method('dispatchEvent') |
| 313 | + ->with(UsersPlugin::EVENT_2FA_SKIP_VERIFY, ['user' => $userData]) |
| 314 | + ->willReturn($eventMock); |
| 315 | + |
| 316 | + $this->Trait->expects($this->once()) |
| 317 | + ->method('redirect'); |
| 318 | + $this->Trait->verify(); |
| 319 | + |
| 320 | + $this->assertNull( |
| 321 | + $session->read(AuthenticationService::TWO_FACTOR_VERIFY_SESSION_KEY), |
| 322 | + ); |
| 323 | + |
| 324 | + $this->assertEquals( |
| 325 | + $userData, |
| 326 | + $session->read(TwoFactorAuthenticator::USER_SESSION_KEY), |
| 327 | + ); |
| 328 | + } |
280 | 329 | } |
0 commit comments