| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Captcha\Test\Unit\Model\Customer\Plugin;
- class AjaxLoginTest extends \PHPUnit\Framework\TestCase
- {
- /**
- * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Checkout\Model\Session
- */
- protected $sessionManagerMock;
- /**
- * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Captcha\Helper\Data
- */
- protected $captchaHelperMock;
- /**
- * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\Controller\Result\JsonFactory
- */
- protected $jsonFactoryMock;
- /**
- * @var \PHPUnit_Framework_MockObject_MockObject
- */
- protected $captchaMock;
- /**
- * @var \PHPUnit_Framework_MockObject_MockObject
- */
- protected $resultJsonMock;
- /**
- * @var \PHPUnit_Framework_MockObject_MockObject
- */
- protected $requestMock;
- /**
- * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Customer\Controller\Ajax\Login
- */
- protected $loginControllerMock;
- /**
- * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\Serialize\Serializer\Json
- */
- protected $serializerMock;
- /**
- * @var array
- */
- protected $formIds;
- /**
- * @var \Magento\Captcha\Model\Customer\Plugin\AjaxLogin
- */
- protected $model;
- /**
- * @inheritdoc
- */
- protected function setUp()
- {
- $this->sessionManagerMock = $this->createPartialMock(\Magento\Checkout\Model\Session::class, ['setUsername']);
- $this->captchaHelperMock = $this->createMock(\Magento\Captcha\Helper\Data::class);
- $this->captchaMock = $this->createMock(\Magento\Captcha\Model\DefaultModel::class);
- $this->jsonFactoryMock = $this->createPartialMock(
- \Magento\Framework\Controller\Result\JsonFactory::class,
- ['create']
- );
- $this->resultJsonMock = $this->createMock(\Magento\Framework\Controller\Result\Json::class);
- $this->requestMock = $this->createMock(\Magento\Framework\App\Request\Http::class);
- $this->loginControllerMock = $this->createMock(\Magento\Customer\Controller\Ajax\Login::class);
- $this->loginControllerMock->expects($this->any())->method('getRequest')
- ->will($this->returnValue($this->requestMock));
- $this->captchaHelperMock
- ->expects($this->exactly(1))
- ->method('getCaptcha')
- ->will($this->returnValue($this->captchaMock));
- $this->formIds = ['user_login'];
- $this->serializerMock = $this->createMock(\Magento\Framework\Serialize\Serializer\Json::class);
- $this->model = new \Magento\Captcha\Model\Customer\Plugin\AjaxLogin(
- $this->captchaHelperMock,
- $this->sessionManagerMock,
- $this->jsonFactoryMock,
- $this->formIds,
- $this->serializerMock
- );
- }
- /**
- * Test aroundExecute.
- */
- public function testAroundExecute()
- {
- $username = 'name';
- $captchaString = 'string';
- $requestData = [
- 'username' => $username,
- 'captcha_string' => $captchaString,
- 'captcha_form_id' => $this->formIds[0]
- ];
- $requestContent = json_encode($requestData);
- $this->requestMock->expects($this->once())->method('getContent')->will($this->returnValue($requestContent));
- $this->captchaMock->expects($this->once())->method('isRequired')->with($username)
- ->will($this->returnValue(true));
- $this->captchaMock->expects($this->once())->method('logAttempt')->with($username);
- $this->captchaMock->expects($this->once())->method('isCorrect')->with($captchaString)
- ->will($this->returnValue(true));
- $this->serializerMock->expects($this->once())->method('unserialize')->will($this->returnValue($requestData));
- $closure = function () {
- return 'result';
- };
- $this->captchaHelperMock
- ->expects($this->exactly(1))
- ->method('getCaptcha')
- ->with('user_login')
- ->will($this->returnValue($this->captchaMock));
- $this->assertEquals('result', $this->model->aroundExecute($this->loginControllerMock, $closure));
- }
- /**
- * Test aroundExecuteIncorrectCaptcha.
- */
- public function testAroundExecuteIncorrectCaptcha()
- {
- $username = 'name';
- $captchaString = 'string';
- $requestData = [
- 'username' => $username,
- 'captcha_string' => $captchaString,
- 'captcha_form_id' => $this->formIds[0]
- ];
- $requestContent = json_encode($requestData);
- $this->requestMock->expects($this->once())->method('getContent')->will($this->returnValue($requestContent));
- $this->captchaMock->expects($this->once())->method('isRequired')->with($username)
- ->will($this->returnValue(true));
- $this->captchaMock->expects($this->once())->method('logAttempt')->with($username);
- $this->captchaMock->expects($this->once())->method('isCorrect')
- ->with($captchaString)->will($this->returnValue(false));
- $this->serializerMock->expects($this->once())->method('unserialize')->will($this->returnValue($requestData));
- $this->sessionManagerMock->expects($this->once())->method('setUsername')->with($username);
- $this->jsonFactoryMock->expects($this->once())->method('create')
- ->will($this->returnValue($this->resultJsonMock));
- $this->resultJsonMock
- ->expects($this->once())
- ->method('setData')
- ->with(['errors' => true, 'message' => __('Incorrect CAPTCHA')])
- ->will($this->returnSelf());
- $closure = function () {
- };
- $this->assertEquals($this->resultJsonMock, $this->model->aroundExecute($this->loginControllerMock, $closure));
- }
- /**
- * @dataProvider aroundExecuteCaptchaIsNotRequired
- * @param string $username
- * @param array $requestContent
- */
- public function testAroundExecuteCaptchaIsNotRequired($username, $requestContent)
- {
- $this->requestMock->expects($this->once())->method('getContent')
- ->will($this->returnValue(json_encode($requestContent)));
- $this->serializerMock->expects($this->once())->method('unserialize')
- ->will($this->returnValue($requestContent));
- $this->captchaMock->expects($this->once())->method('isRequired')->with($username)
- ->will($this->returnValue(false));
- $this->captchaMock->expects($this->never())->method('logAttempt')->with($username);
- $this->captchaMock->expects($this->never())->method('isCorrect');
- $closure = function () {
- return 'result';
- };
- $this->assertEquals('result', $this->model->aroundExecute($this->loginControllerMock, $closure));
- }
- /**
- * @return array
- */
- public function aroundExecuteCaptchaIsNotRequired(): array
- {
- return [
- [
- 'username' => 'name',
- 'requestData' => ['username' => 'name', 'captcha_string' => 'string'],
- ],
- [
- 'username' => 'name',
- 'requestData' =>
- [
- 'username' => 'name',
- 'captcha_string' => 'string',
- 'captcha_form_id' => $this->formIds[0]
- ],
- ],
- [
- 'username' => null,
- 'requestData' =>
- [
- 'username' => null,
- 'captcha_string' => 'string',
- 'captcha_form_id' => $this->formIds[0]
- ],
- ],
- [
- 'username' => 'name',
- 'requestData' =>
- [
- 'username' => 'name',
- 'captcha_string' => 'string',
- 'captcha_form_id' => null
- ],
- ],
- ];
- }
- }
|