Skip to content

Commit 9e7fcb2

Browse files
author
Korshenko, Olexii(okorshenko)
committed
Merge pull request #396 from magento-folks/checkout
[Folks] Enhanced Checkout Flow
2 parents 1ba4c4e + be391d6 commit 9e7fcb2

File tree

435 files changed

+17218
-7919
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

435 files changed

+17218
-7919
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?php
2+
/**
3+
* Copyright © 2015 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Captcha\Model\Cart;
7+
8+
class ConfigPlugin
9+
{
10+
/**
11+
* @var \Magento\Captcha\Model\Checkout\ConfigProvider
12+
*/
13+
protected $configProvider;
14+
15+
/**
16+
* @param \Magento\Captcha\Model\Checkout\ConfigProvider $configProvider
17+
*/
18+
public function __construct(
19+
\Magento\Captcha\Model\Checkout\ConfigProvider $configProvider
20+
) {
21+
$this->configProvider = $configProvider;
22+
}
23+
24+
/**
25+
* @param \Magento\Checkout\Block\Cart\Sidebar $subject
26+
* @param array $result
27+
* @return array
28+
*
29+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
30+
*/
31+
public function afterGetConfig(\Magento\Checkout\Block\Cart\Sidebar $subject, array $result)
32+
{
33+
return array_merge_recursive($result, $this->configProvider->getConfig());
34+
}
35+
}

app/code/Magento/Captcha/Model/Checkout/Plugin/Validation.php

Lines changed: 0 additions & 60 deletions
This file was deleted.

app/code/Magento/Captcha/Model/Customer/Plugin/AjaxLogin.php

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -26,53 +26,67 @@ class AjaxLogin
2626
*/
2727
protected $resultJsonFactory;
2828

29+
/**
30+
* @var array
31+
*/
32+
protected $formIds;
33+
2934
/**
3035
* @param CaptchaHelper $helper
3136
* @param SessionManagerInterface $sessionManager
3237
* @param JsonFactory $resultJsonFactory
38+
* @param array $formIds
3339
*/
3440
public function __construct(
3541
CaptchaHelper $helper,
3642
SessionManagerInterface $sessionManager,
37-
JsonFactory $resultJsonFactory
43+
JsonFactory $resultJsonFactory,
44+
array $formIds
3845
) {
3946
$this->helper = $helper;
4047
$this->sessionManager = $sessionManager;
4148
$this->resultJsonFactory = $resultJsonFactory;
49+
$this->formIds = $formIds;
4250
}
4351

4452
/**
4553
* @param \Magento\Customer\Controller\Ajax\Login $subject
4654
* @param callable $proceed
47-
* @return \Magento\Framework\Controller\ResultInterface
55+
* @return $this
56+
* @throws \Magento\Framework\Exception\NoSuchEntityException
4857
* @throws \Zend_Json_Exception
58+
* @SuppressWarnings(PHPMD.NPathComplexity)
4959
*/
5060
public function aroundExecute(
5161
\Magento\Customer\Controller\Ajax\Login $subject,
5262
\Closure $proceed
5363
) {
54-
$loginFormId = 'user_login';
64+
$captchaFormIdField = 'captcha_form_id';
5565
$captchaInputName = 'captcha_string';
5666

5767
/** @var \Magento\Framework\App\RequestInterface $request */
5868
$request = $subject->getRequest();
5969

60-
/** @var \Magento\Captcha\Model\ModelInterface $captchaModel */
61-
$captchaModel = $this->helper->getCaptcha($loginFormId);
62-
6370
$loginParams = \Zend_Json::decode($request->getContent());
6471
$username = isset($loginParams['username']) ? $loginParams['username'] : null;
65-
$captchaString = isset($loginParams[$captchaInputName])
66-
? $loginParams[$captchaInputName]
67-
: null;
72+
$captchaString = isset($loginParams[$captchaInputName]) ? $loginParams[$captchaInputName] : null;
73+
$loginFormId = isset($loginParams[$captchaFormIdField]) ? $loginParams[$captchaFormIdField] : null;
6874

69-
if ($captchaModel->isRequired($username)) {
70-
$captchaModel->logAttempt($username);
71-
if (!$captchaModel->isCorrect($captchaString)) {
72-
$this->sessionManager->setUsername($username);
73-
/** @var \Magento\Framework\Controller\Result\Json $resultJson */
75+
foreach ($this->formIds as $formId) {
76+
$captchaModel = $this->helper->getCaptcha($formId);
77+
if ($captchaModel->isRequired($username) && !in_array($loginFormId, $this->formIds)) {
7478
$resultJson = $this->resultJsonFactory->create();
75-
return $resultJson->setData(['errors' => true, 'message' => __('Incorrect CAPTCHA')]);
79+
return $resultJson->setData(['errors' => true, 'message' => __('Provided form does not exist')]);
80+
}
81+
82+
if ($formId == $loginFormId) {
83+
$captchaModel->logAttempt($username);
84+
if (!$captchaModel->isCorrect($captchaString)) {
85+
$this->sessionManager->setUsername($username);
86+
/** @var \Magento\Framework\Controller\Result\Json $resultJson */
87+
$resultJson = $this->resultJsonFactory->create();
88+
return $resultJson->setData(['errors' => true, 'message' => __('Incorrect CAPTCHA')]);
89+
}
7690
}
7791
}
7892
return $proceed();
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
<?php
2+
/**
3+
* Copyright © 2015 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Captcha\Test\Unit\Controller\Refresh;
7+
8+
class IndexTest extends \PHPUnit_Framework_TestCase
9+
{
10+
/**
11+
* @var \PHPUnit_Framework_MockObject_MockObject
12+
*/
13+
protected $captchaHelperMock;
14+
15+
/**
16+
* @var \PHPUnit_Framework_MockObject_MockObject
17+
*/
18+
protected $captchaMock;
19+
20+
/**
21+
* @var \PHPUnit_Framework_MockObject_MockObject
22+
*/
23+
protected $requestMock;
24+
25+
/**
26+
* @var \PHPUnit_Framework_MockObject_MockObject
27+
*/
28+
protected $responseMock;
29+
30+
/**
31+
* @var \PHPUnit_Framework_MockObject_MockObject
32+
*/
33+
protected $contextMock;
34+
35+
/**
36+
* @var \PHPUnit_Framework_MockObject_MockObject
37+
*/
38+
protected $viewMock;
39+
40+
/**
41+
* @var \PHPUnit_Framework_MockObject_MockObject
42+
*/
43+
protected $layoutMock;
44+
45+
/**
46+
* @var \PHPUnit_Framework_MockObject_MockObject
47+
*/
48+
protected $flagMock;
49+
50+
/**
51+
* @var \Magento\Captcha\Controller\Refresh\Index
52+
*/
53+
protected $model;
54+
55+
protected function setUp()
56+
{
57+
$this->captchaHelperMock = $this->getMock('Magento\Captcha\Helper\Data', [], [], '', false);
58+
$this->captchaMock = $this->getMock('Magento\Captcha\Model\DefaultModel', [], [], '', false);
59+
$this->requestMock = $this->getMock('Magento\Framework\App\Request\Http', [], [], '', false);
60+
$this->responseMock = $this->getMock('Magento\Framework\App\Response\Http', [], [], '', false);
61+
$this->contextMock = $this->getMock('Magento\Framework\App\Action\Context', [], [], '', false);
62+
$this->viewMock = $this->getMock('Magento\Framework\App\ViewInterface');
63+
$this->layoutMock = $this->getMock('Magento\Framework\View\LayoutInterface');
64+
$this->flagMock = $this->getMock('Magento\Framework\App\ActionFlag', [], [], '', false);
65+
66+
$this->contextMock->expects($this->any())->method('getRequest')->will($this->returnValue($this->requestMock));
67+
$this->contextMock->expects($this->any())->method('getView')->will($this->returnValue($this->viewMock));
68+
$this->contextMock->expects($this->any())->method('getResponse')->will($this->returnValue($this->responseMock));
69+
$this->contextMock->expects($this->any())->method('getActionFlag')->will($this->returnValue($this->flagMock));
70+
$this->viewMock->expects($this->any())->method('getLayout')->will($this->returnValue($this->layoutMock));
71+
72+
$this->model = new \Magento\Captcha\Controller\Refresh\Index($this->contextMock, $this->captchaHelperMock);
73+
}
74+
75+
/**
76+
* @dataProvider executeDataProvider
77+
* @param int $formId
78+
* @param int $callsNumber
79+
*/
80+
public function testExecute($formId, $callsNumber)
81+
{
82+
$content = ['formId' => $formId];
83+
84+
$blockMethods = ['setFormId', 'setIsAjax', 'toHtml'];
85+
$blockMock = $this->getMock('Magento\Captcha\Block\Captcha', $blockMethods, [], '', false);
86+
87+
$this->requestMock->expects($this->any())->method('getPost')->with('formId')->will($this->returnValue($formId));
88+
$this->requestMock->expects($this->exactly($callsNumber))->method('getContent')
89+
->will($this->returnValue(json_encode($content)));
90+
$this->captchaHelperMock->expects($this->any())->method('getCaptcha')->with($formId)
91+
->will($this->returnValue($this->captchaMock));
92+
$this->captchaMock->expects($this->once())->method('generate');
93+
$this->captchaMock->expects($this->once())->method('getBlockName')->will($this->returnValue('block'));
94+
$this->captchaMock->expects($this->once())->method('getImgSrc')->will($this->returnValue('source'));
95+
$this->layoutMock->expects($this->once())->method('createBlock')->with('block')
96+
->will($this->returnValue($blockMock));
97+
$blockMock->expects($this->any())->method('setFormId')->with($formId)->will($this->returnValue($blockMock));
98+
$blockMock->expects($this->any())->method('setIsAjax')->with(true)->will($this->returnValue($blockMock));
99+
$blockMock->expects($this->once())->method('toHtml');
100+
$this->responseMock->expects($this->once())->method('representJson')->with(json_encode(['imgSrc' => 'source']));
101+
$this->flagMock->expects($this->once())->method('set')->with('', 'no-postDispatch', true);
102+
103+
$this->model->execute();
104+
}
105+
106+
/**
107+
* @return array
108+
*/
109+
public function executeDataProvider()
110+
{
111+
return [
112+
[
113+
'formId' => null,
114+
'callsNumber' => 1,
115+
],
116+
[
117+
'formId' => 1,
118+
'callsNumber' => 0,
119+
]
120+
];
121+
}
122+
}

0 commit comments

Comments
 (0)