Skip to content

Commit 644e60d

Browse files
Merge pull request #215 from magento-tango/MAGETWO-55668
[Tango] Bug Fixes
2 parents a220ef9 + c1d8e01 commit 644e60d

File tree

23 files changed

+1059
-113
lines changed

23 files changed

+1059
-113
lines changed
Lines changed: 288 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,288 @@
1+
<?php
2+
/**
3+
* Copyright © 2016 Magento. 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+
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
12+
* @SuppressWarnings(PHPMD.TooManyFields)
13+
*/
14+
class RollbackTest extends \PHPUnit_Framework_TestCase
15+
{
16+
/**
17+
* @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager
18+
*/
19+
private $objectManager;
20+
21+
/**
22+
* @var \Magento\Framework\ObjectManagerInterface|\PHPUnit_Framework_MockObject_MockObject
23+
*/
24+
private $objectManagerMock;
25+
26+
/**
27+
* @var \Magento\Backend\App\Action\Context
28+
*/
29+
private $context;
30+
31+
/**
32+
* @var \Magento\Backup\Controller\Adminhtml\Index\Rollback
33+
*/
34+
private $rollbackController;
35+
36+
/**
37+
* @var \Magento\Framework\App\RequestInterface|\PHPUnit_Framework_MockObject_MockObject
38+
*/
39+
private $requestMock;
40+
41+
/**
42+
* @var \Magento\Framework\App\ResponseInterface|\PHPUnit_Framework_MockObject_MockObject
43+
*/
44+
private $responseMock;
45+
46+
/**
47+
* @var \Magento\Backup\Model\BackupFactory|\PHPUnit_Framework_MockObject_MockObject
48+
*/
49+
private $backupModelFactoryMock;
50+
51+
/**
52+
* @var \Magento\Backup\Model\Backup|\PHPUnit_Framework_MockObject_MockObject
53+
*/
54+
private $backupModelMock;
55+
56+
/**
57+
* @var \Magento\Backup\Helper\Data|\PHPUnit_Framework_MockObject_MockObject
58+
*/
59+
private $dataHelperMock;
60+
61+
/**
62+
* @var \Magento\Framework\App\Response\Http\FileFactory|\PHPUnit_Framework_MockObject_MockObject
63+
*/
64+
private $fileFactoryMock;
65+
66+
/**
67+
* @var \Magento\Backend\Model\View\Result\RedirectFactory|\PHPUnit_Framework_MockObject_MockObject
68+
*/
69+
private $resultRedirectFactoryMock;
70+
71+
/**
72+
* @var \Magento\Backend\Model\View\Result\Redirect|\PHPUnit_Framework_MockObject_MockObject
73+
*/
74+
private $resultRedirectMock;
75+
76+
/**
77+
* @var \Magento\Backend\Model\View\Result\Forward|\PHPUnit_Framework_MockObject_MockObject
78+
*/
79+
private $resultForwardMock;
80+
81+
/**
82+
* @var \Magento\Framework\Backup\Factory|\PHPUnit_Framework_MockObject_MockObject
83+
*/
84+
private $backupFactoryMock;
85+
86+
/**
87+
* @var \Magento\Framework\Backup\BackupInterface|\PHPUnit_Framework_MockObject_MockObject
88+
*/
89+
private $backupManagerMock;
90+
91+
/**
92+
* @var \Magento\Backup\Model\ResourceModel\Db|\PHPUnit_Framework_MockObject_MockObject
93+
*/
94+
private $backupResourceModelMock;
95+
96+
protected function setUp()
97+
{
98+
$this->objectManagerMock = $this->getMockBuilder(\Magento\Framework\ObjectManagerInterface::class)
99+
->getMock();
100+
$this->requestMock = $this->getMockBuilder(\Magento\Framework\App\RequestInterface::class)
101+
->setMethods(['initForward', 'setDispatched', 'isAjax'])
102+
->getMockForAbstractClass();
103+
$this->responseMock = $this->getMockBuilder(\Magento\Framework\App\ResponseInterface::class)
104+
->setMethods(['setRedirect', 'representJson'])
105+
->getMockForAbstractClass();
106+
$this->backupModelFactoryMock = $this->getMockBuilder(\Magento\Backup\Model\BackupFactory::class)
107+
->disableOriginalConstructor()
108+
->setMethods(['create'])
109+
->getMock();
110+
$this->backupModelMock = $this->getMockBuilder(\Magento\Backup\Model\Backup::class)
111+
->disableOriginalConstructor()
112+
->setMethods(['getTime', 'exists', 'getSize', 'output', 'validateUserPassword'])
113+
->getMock();
114+
$this->backupResourceModelMock = $this->getMockBuilder(\Magento\Backup\Model\ResourceModel\Db::class)
115+
->disableOriginalConstructor()
116+
->getMock();
117+
$this->dataHelperMock = $this->getMockBuilder(\Magento\Backup\Helper\Data::class)
118+
->disableOriginalConstructor()
119+
->setMethods(['isRollbackAllowed', 'getBackupsDir', 'invalidateCache'])
120+
->getMock();
121+
$this->fileFactoryMock = $this->getMockBuilder(\Magento\Framework\App\Response\Http\FileFactory::class)
122+
->disableOriginalConstructor()
123+
->getMock();
124+
$this->resultRedirectFactoryMock =
125+
$this->getMockBuilder(\Magento\Backend\Model\View\Result\RedirectFactory::class)
126+
->disableOriginalConstructor()
127+
->setMethods(['create'])
128+
->getMock();
129+
$this->resultRedirectMock = $this->getMockBuilder(\Magento\Backend\Model\View\Result\Redirect::class)
130+
->disableOriginalConstructor()
131+
->getMock();
132+
$this->resultForwardMock = $this->getMockBuilder(\Magento\Backend\Model\View\Result\Forward::class)
133+
->disableOriginalConstructor()
134+
->getMock();
135+
$this->backupFactoryMock = $this->getMockBuilder(\Magento\Framework\Backup\Factory::class)
136+
->disableOriginalConstructor()
137+
->setMethods(['create'])
138+
->getMock();
139+
$this->backupManagerMock = $this->getMockBuilder(\Magento\Framework\Backup\BackupInterface::class)
140+
->setMethods(['setName'])
141+
->getMockForAbstractClass();
142+
$this->objectManager = new ObjectManager($this);
143+
$this->context = $this->objectManager->getObject(
144+
\Magento\Backend\App\Action\Context::class,
145+
[
146+
'objectManager' => $this->objectManagerMock,
147+
'request' => $this->requestMock,
148+
'response' => $this->responseMock,
149+
'resultRedirectFactory' => $this->resultRedirectFactoryMock
150+
]
151+
);
152+
$this->rollbackController = $this->objectManager->getObject(
153+
\Magento\Backup\Controller\Adminhtml\Index\Rollback::class,
154+
[
155+
'context' => $this->context,
156+
'backupFactory' => $this->backupFactoryMock,
157+
'backupModelFactory' => $this->backupModelFactoryMock,
158+
'fileFactory' => $this->fileFactoryMock
159+
]
160+
);
161+
}
162+
163+
public function testExecuteRollbackDisabled()
164+
{
165+
$rollbackAllowed = false;
166+
167+
$this->dataHelperMock->expects($this->once())
168+
->method('isRollbackAllowed')
169+
->willReturn($rollbackAllowed);
170+
$this->objectManagerMock->expects($this->once())
171+
->method('get')
172+
->with(\Magento\Backup\Helper\Data::class)
173+
->willReturn($this->dataHelperMock);
174+
175+
$this->assertSame($this->responseMock, $this->rollbackController->execute());
176+
}
177+
178+
public function testExecuteBackupNotFound()
179+
{
180+
$rollbackAllowed = true;
181+
$isAjax = true;
182+
$time = 0;
183+
$type = 'db';
184+
$exists = false;
185+
186+
$this->dataHelperMock->expects($this->once())
187+
->method('isRollbackAllowed')
188+
->willReturn($rollbackAllowed);
189+
$this->objectManagerMock->expects($this->atLeastOnce())
190+
->method('get')
191+
->with(\Magento\Backup\Helper\Data::class)
192+
->willReturn($this->dataHelperMock);
193+
$this->requestMock->expects($this->once())
194+
->method('isAjax')
195+
->willReturn($isAjax);
196+
$this->backupModelMock->expects($this->atLeastOnce())
197+
->method('getTime')
198+
->willReturn($time);
199+
$this->backupModelMock->expects($this->any())
200+
->method('exists')
201+
->willReturn($exists);
202+
$this->requestMock->expects($this->any())
203+
->method('getParam')
204+
->willReturnMap(
205+
[
206+
['time', null, $time],
207+
['type', null, $type]
208+
]
209+
);
210+
$this->backupModelFactoryMock->expects($this->once())
211+
->method('create')
212+
->with($time, $type)
213+
->willReturn($this->backupModelMock);
214+
215+
$this->assertSame($this->responseMock, $this->rollbackController->execute());
216+
}
217+
218+
public function testExecute()
219+
{
220+
$rollbackAllowed = true;
221+
$isAjax = true;
222+
$time = 1;
223+
$type = 'db';
224+
$exists = true;
225+
$passwordValid = true;
226+
227+
$this->dataHelperMock->expects($this->once())
228+
->method('isRollbackAllowed')
229+
->willReturn($rollbackAllowed);
230+
$this->objectManagerMock->expects($this->any())
231+
->method('get')
232+
->with(\Magento\Backup\Helper\Data::class)
233+
->willReturn($this->dataHelperMock);
234+
$this->requestMock->expects($this->once())
235+
->method('isAjax')
236+
->willReturn($isAjax);
237+
$this->backupModelMock->expects($this->atLeastOnce())
238+
->method('getTime')
239+
->willReturn($time);
240+
$this->backupModelMock->expects($this->any())
241+
->method('exists')
242+
->willReturn($exists);
243+
$this->requestMock->expects($this->any())
244+
->method('getParam')
245+
->willReturnMap(
246+
[
247+
['time', null, $time],
248+
['type', null, $type]
249+
]
250+
);
251+
$this->backupModelFactoryMock->expects($this->once())
252+
->method('create')
253+
->with($time, $type)
254+
->willReturn($this->backupModelMock);
255+
$this->backupManagerMock->expects($this->once())
256+
->method('setBackupExtension')
257+
->willReturn($this->backupManagerMock);
258+
$this->backupManagerMock->expects($this->once())
259+
->method('setTime')
260+
->willReturn($this->backupManagerMock);
261+
$this->backupManagerMock->expects($this->once())
262+
->method('setBackupsDir')
263+
->willReturn($this->backupManagerMock);
264+
$this->backupManagerMock->expects($this->once())
265+
->method('setName')
266+
->willReturn($this->backupManagerMock);
267+
$this->backupManagerMock->expects($this->once())
268+
->method('setResourceModel')
269+
->willReturn($this->backupManagerMock);
270+
$this->backupFactoryMock->expects($this->once())
271+
->method('create')
272+
->with($type)
273+
->willReturn($this->backupManagerMock);
274+
$this->objectManagerMock->expects($this->at(2))
275+
->method('create')
276+
->with(\Magento\Backup\Model\ResourceModel\Db::class, [])
277+
->willReturn($this->backupResourceModelMock);
278+
$this->objectManagerMock->expects($this->at(3))
279+
->method('create')
280+
->with(\Magento\Backup\Model\Backup::class, [])
281+
->willReturn($this->backupModelMock);
282+
$this->backupModelMock->expects($this->once())
283+
->method('validateUserPassword')
284+
->willReturn($passwordValid);
285+
286+
$this->rollbackController->execute();
287+
}
288+
}

app/code/Magento/Developer/Model/Css/PreProcessor/FileGenerator/PublicationDecorator.php

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
*/
66
namespace Magento\Developer\Model\Css\PreProcessor\FileGenerator;
77

8+
use Magento\Framework\App\DeploymentConfig;
9+
use Magento\Framework\App\State;
10+
use Magento\Framework\App\ObjectManager;
811
use Magento\Framework\Filesystem;
912
use Magento\Framework\View\Asset\Repository;
1013
use Magento\Framework\App\View\Asset\Publisher;
@@ -36,6 +39,11 @@ class PublicationDecorator extends RelatedGenerator
3639
*/
3740
private $hasRelatedPublishing;
3841

42+
/**
43+
* @var State
44+
*/
45+
private $state;
46+
3947
/**
4048
* Constructor
4149
*
@@ -66,12 +74,27 @@ public function __construct(
6674
protected function generateRelatedFile($relatedFileId, LocalInterface $asset)
6775
{
6876
$relatedAsset = parent::generateRelatedFile($relatedFileId, $asset);
69-
if ($this->hasRelatedPublishing
70-
|| WorkflowType::CLIENT_SIDE_COMPILATION === $this->scopeConfig->getValue(WorkflowType::CONFIG_NAME_PATH)
71-
) {
77+
$isClientSideCompilation =
78+
$this->getState()->getMode() !== State::MODE_PRODUCTION
79+
&& WorkflowType::CLIENT_SIDE_COMPILATION === $this->scopeConfig->getValue(WorkflowType::CONFIG_NAME_PATH);
80+
81+
if ($this->hasRelatedPublishing || $isClientSideCompilation) {
7282
$this->assetPublisher->publish($relatedAsset);
7383
}
7484

7585
return $relatedAsset;
7686
}
87+
88+
/**
89+
* @return State
90+
* @deprecated
91+
*/
92+
private function getState()
93+
{
94+
if (null === $this->state) {
95+
$this->state = ObjectManager::getInstance()->get(State::class);
96+
}
97+
98+
return $this->state;
99+
}
77100
}

app/code/Magento/Developer/Model/View/Asset/PreProcessor/PreprocessorStrategy.php

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
*/
66
namespace Magento\Developer\Model\View\Asset\PreProcessor;
77

8+
use Magento\Framework\App\DeploymentConfig;
9+
use Magento\Framework\App\ObjectManager;
10+
use Magento\Framework\App\State;
811
use Magento\Framework\View\Asset\PreProcessor;
912
use Magento\Framework\App\Config\ScopeConfigInterface;
1013
use Magento\Developer\Model\Config\Source\WorkflowType;
@@ -31,6 +34,11 @@ class PreprocessorStrategy implements PreProcessorInterface
3134
*/
3235
private $scopeConfig;
3336

37+
/**
38+
* @var State
39+
*/
40+
private $state;
41+
3442
/**
3543
* Constructor
3644
*
@@ -56,10 +64,26 @@ public function __construct(
5664
*/
5765
public function process(PreProcessor\Chain $chain)
5866
{
59-
if (WorkflowType::CLIENT_SIDE_COMPILATION === $this->scopeConfig->getValue(WorkflowType::CONFIG_NAME_PATH)) {
67+
$isClientSideCompilation =
68+
$this->getState()->getMode() !== State::MODE_PRODUCTION
69+
&& WorkflowType::CLIENT_SIDE_COMPILATION === $this->scopeConfig->getValue(WorkflowType::CONFIG_NAME_PATH);
70+
71+
if ($isClientSideCompilation) {
6072
$this->frontendCompilation->process($chain);
6173
} else {
6274
$this->alternativeSource->process($chain);
6375
}
6476
}
77+
78+
/**
79+
* @return State
80+
* @deprecated
81+
*/
82+
private function getState()
83+
{
84+
if (null === $this->state) {
85+
$this->state = ObjectManager::getInstance()->get(State::class);
86+
}
87+
return $this->state;
88+
}
6589
}

0 commit comments

Comments
 (0)