Skip to content

Commit 4d8c0f7

Browse files
author
Alexander Akimov
authored
Merge pull request #2205 from magento-tsg/2.3-develop-pr3
[TSG] Backporting for 2.3 (pr3) (2.3.0)
2 parents 2028ccd + 0361e35 commit 4d8c0f7

File tree

40 files changed

+2245
-283
lines changed

40 files changed

+2245
-283
lines changed

app/code/Magento/Backup/Controller/Adminhtml/Index/Create.php

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@
1212
class Create extends \Magento\Backup\Controller\Adminhtml\Index
1313
{
1414
/**
15-
* Create backup action
15+
* Create backup action.
1616
*
1717
* @return void|\Magento\Backend\App\Action
1818
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
1919
*/
2020
public function execute()
2121
{
22-
if (!$this->getRequest()->isAjax()) {
22+
if (!$this->isRequestAllowed()) {
2323
return $this->_redirect('*/*/index');
2424
}
2525

@@ -106,4 +106,14 @@ public function execute()
106106

107107
$this->getResponse()->representJson($response->toJson());
108108
}
109+
110+
/**
111+
* Check if request is allowed.
112+
*
113+
* @return bool
114+
*/
115+
private function isRequestAllowed()
116+
{
117+
return $this->getRequest()->isAjax() && $this->getRequest()->isPost();
118+
}
109119
}
Lines changed: 240 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,240 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Backup\Test\Unit\Controller\Adminhtml\Index;
7+
8+
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
9+
10+
/**
11+
* Tests \Magento\Backup\Controller\Adminhtml\Index\Create class.
12+
*
13+
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
14+
*/
15+
class CreateTest extends \PHPUnit\Framework\TestCase
16+
{
17+
/**
18+
* @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager
19+
*/
20+
private $objectManager;
21+
22+
/**
23+
* @var \Magento\Backend\App\Action\Context
24+
*/
25+
private $context;
26+
27+
/**
28+
* @var \Magento\Framework\ObjectManagerInterface|\PHPUnit_Framework_MockObject_MockObject
29+
*/
30+
private $objectManagerMock;
31+
32+
/**
33+
* @var \Magento\Framework\App\RequestInterface|\PHPUnit_Framework_MockObject_MockObject
34+
*/
35+
private $requestMock;
36+
37+
/**
38+
* @var \Magento\Framework\App\ResponseInterface|\PHPUnit_Framework_MockObject_MockObject
39+
*/
40+
private $responseMock;
41+
42+
/**
43+
* @var \Magento\Backup\Model\Backup|\PHPUnit_Framework_MockObject_MockObject
44+
*/
45+
private $backupModelMock;
46+
47+
/**
48+
* @var \Magento\Backend\Helper\Data|\PHPUnit_Framework_MockObject_MockObject
49+
*/
50+
private $dataBackendHelperMock;
51+
52+
/**
53+
* @var \Magento\Backup\Helper\Data|\PHPUnit_Framework_MockObject_MockObject
54+
*/
55+
private $dataBackupHelperMock;
56+
57+
/**
58+
* @var \Magento\Framework\App\Response\Http\FileFactory|\PHPUnit_Framework_MockObject_MockObject
59+
*/
60+
private $fileFactoryMock;
61+
62+
/**
63+
* @var \Magento\Backend\Model\Session|\PHPUnit_Framework_MockObject_MockObject
64+
*/
65+
private $sessionMock;
66+
67+
/**
68+
* @var \Magento\Framework\App\MaintenanceMode|\PHPUnit_Framework_MockObject_MockObject
69+
*/
70+
private $maintenanceModeMock;
71+
72+
/**
73+
* @var \Magento\Framework\Backup\Factory|\PHPUnit_Framework_MockObject_MockObject
74+
*/
75+
private $backupFactoryMock;
76+
77+
/**
78+
* @var \Magento\Backup\Controller\Adminhtml\Index\Create
79+
*/
80+
private $createController;
81+
82+
public function setUp()
83+
{
84+
$this->objectManagerMock = $this->getMockBuilder(\Magento\Framework\ObjectManagerInterface::class)
85+
->getMock();
86+
$this->requestMock = $this->getMockBuilder(\Magento\Framework\App\Request\Http::class)
87+
->disableOriginalConstructor()
88+
->setMethods(['isAjax', 'isPost', 'getParam'])
89+
->getMock();
90+
$this->responseMock = $this->getMockBuilder(\Magento\Framework\App\Response\Http::class)
91+
->disableOriginalConstructor()
92+
->setMethods(['representJson', 'setRedirect'])
93+
->getMock();
94+
$this->sessionMock = $this->getMockBuilder(\Magento\Backend\Model\Session::class)
95+
->disableOriginalConstructor()
96+
->getMock();
97+
$this->backupFactoryMock = $this->getMockBuilder(\Magento\Framework\Backup\Factory::class)
98+
->disableOriginalConstructor()
99+
->setMethods(['create'])
100+
->getMock();
101+
$this->backupModelMock = $this->getMockBuilder(\Magento\Backup\Model\Backup::class)
102+
->disableOriginalConstructor()
103+
->setMethods(['setBackupExtension', 'setTime', 'setBackupsDir', 'setName', 'create'])
104+
->getMock();
105+
$this->dataBackendHelperMock = $this->getMockBuilder(\Magento\Backend\Helper\Data::class)
106+
->disableOriginalConstructor()
107+
->setMethods(['getUrl'])
108+
->getMock();
109+
$this->dataBackupHelperMock = $this->getMockBuilder(\Magento\Backup\Helper\Data::class)
110+
->disableOriginalConstructor()
111+
->setMethods(['getExtensionByType', 'getBackupsDir'])
112+
->getMock();
113+
$this->maintenanceModeMock = $this->getMockBuilder(\Magento\Framework\App\MaintenanceMode::class)
114+
->disableOriginalConstructor()
115+
->setMethods(['set'])
116+
->getMock();
117+
$this->fileFactoryMock = $this->getMockBuilder(\Magento\Framework\App\Response\Http\FileFactory::class)
118+
->disableOriginalConstructor()
119+
->getMock();
120+
$this->objectManager = new ObjectManager($this);
121+
$this->context = $this->objectManager->getObject(
122+
\Magento\Backend\App\Action\Context::class,
123+
[
124+
'objectManager' => $this->objectManagerMock,
125+
'request' => $this->requestMock,
126+
'response' => $this->responseMock,
127+
'session' => $this->sessionMock,
128+
'helper' => $this->dataBackendHelperMock,
129+
'maintenanceMode' => $this->maintenanceModeMock,
130+
]
131+
);
132+
$this->createController = $this->objectManager->getObject(
133+
\Magento\Backup\Controller\Adminhtml\Index\Create::class,
134+
[
135+
'context' => $this->context,
136+
'backupFactory' => $this->backupFactoryMock,
137+
'fileFactory' => $this->fileFactoryMock,
138+
]
139+
);
140+
}
141+
142+
/**
143+
* @covers \Magento\Backup\Controller\Adminhtml\Index\Create::execute
144+
* @return void
145+
*/
146+
public function testExecuteNotPost()
147+
{
148+
$redirectUrl = '*/*/index';
149+
$redirectUrlBackup = 'backup/index/index';
150+
151+
$this->requestMock->expects($this->any())
152+
->method('isAjax')
153+
->willReturn(true);
154+
$this->requestMock->expects($this->any())
155+
->method('isPost')
156+
->willReturn(false);
157+
$this->dataBackendHelperMock->expects($this->any())
158+
->method('getUrl')
159+
->with($redirectUrl, [])
160+
->willReturn($redirectUrlBackup);
161+
$this->responseMock->expects($this->any())
162+
->method('setRedirect')
163+
->with($redirectUrlBackup)
164+
->willReturnSelf();
165+
166+
$this->assertSame($this->responseMock, $this->createController->execute());
167+
}
168+
169+
/**
170+
* @covers \Magento\Backup\Controller\Adminhtml\Index\Create::execute
171+
* @return void
172+
*/
173+
public function testExecutePermission()
174+
{
175+
$redirectUrl = '*/*/index';
176+
$redirectUrlBackup = 'backup/index/index';
177+
$backupType = 'db';
178+
$backupName = 'backup1';
179+
$response = '{"redirect_url":"backup\/index\/index"}';
180+
181+
$this->requestMock->expects($this->any())
182+
->method('isAjax')
183+
->willReturn(true);
184+
$this->requestMock->expects($this->any())
185+
->method('isPost')
186+
->willReturn(true);
187+
$this->requestMock->expects($this->any())
188+
->method('getParam')
189+
->willReturnMap([
190+
['type', null, $backupType],
191+
['backup_name', null, $backupName],
192+
]);
193+
$this->dataBackendHelperMock->expects($this->any())
194+
->method('getUrl')
195+
->with($redirectUrl, [])
196+
->willReturn($redirectUrlBackup);
197+
$this->responseMock->expects($this->any())
198+
->method('representJson')
199+
->with($response)
200+
->willReturnSelf();
201+
$this->maintenanceModeMock->expects($this->any())
202+
->method('set')
203+
->with(true)
204+
->willReturn(false);
205+
$this->backupFactoryMock->expects($this->any())
206+
->method('create')
207+
->with($backupType)
208+
->willReturn($this->backupModelMock);
209+
$this->backupModelMock->expects($this->any())
210+
->method('setBackupExtension')
211+
->with($backupType)
212+
->willReturnSelf();
213+
$this->backupModelMock->expects($this->any())
214+
->method('setBackupsDir')
215+
->willReturnSelf();
216+
$this->backupModelMock->expects($this->any())
217+
->method('setTime')
218+
->willReturnSelf();
219+
$this->backupModelMock->expects($this->any())
220+
->method('setName')
221+
->with($backupName)
222+
->willReturnSelf();
223+
$this->backupModelMock->expects($this->once())
224+
->method('create')
225+
->willReturnSelf();
226+
$this->objectManagerMock->expects($this->any())
227+
->method('get')
228+
->with(\Magento\Backup\Helper\Data::class)
229+
->willReturn($this->dataBackupHelperMock);
230+
$this->dataBackupHelperMock->expects($this->any())
231+
->method('getExtensionByType')
232+
->with($backupType)
233+
->willReturn($backupType);
234+
$this->dataBackupHelperMock->expects($this->any())
235+
->method('getBackupsDir')
236+
->willReturn('dir');
237+
238+
$this->assertNull($this->createController->execute());
239+
}
240+
}

app/code/Magento/Customer/Block/Address/Edit.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ protected function _prepareLayout()
129129

130130
if ($postedData = $this->_customerSession->getAddressFormData(true)) {
131131
$postedData['region'] = [
132-
'region_id' => $postedData['region_id'],
132+
'region_id' => isset($postedData['region_id']) ? $postedData['region_id'] : null,
133133
'region' => $postedData['region'],
134134
];
135135
$this->dataObjectHelper->populateWithArray(

0 commit comments

Comments
 (0)