Skip to content

Commit 21468d1

Browse files
author
Volodymyr Klymenko
authored
Merge pull request #597 from magento-tsg/2.0-develop-pr1
[TSG] Backporting for 2.0
2 parents ca68e6e + 62af13f commit 21468d1

File tree

25 files changed

+664
-210
lines changed

25 files changed

+664
-210
lines changed

app/code/Magento/Catalog/Controller/Adminhtml/Product/MassStatus.php

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,17 @@
66
*/
77
namespace Magento\Catalog\Controller\Adminhtml\Product;
88

9-
use Magento\Backend\App\Action;
9+
use Magento\Backend\App\Action\Context;
1010
use Magento\Catalog\Controller\Adminhtml\Product;
11+
use Magento\Catalog\Model\Indexer\Product\Price\Processor;
12+
use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory;
1113
use Magento\Framework\Controller\ResultFactory;
1214
use Magento\Ui\Component\MassAction\Filter;
13-
use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory;
1415

1516
class MassStatus extends \Magento\Catalog\Controller\Adminhtml\Product
1617
{
1718
/**
18-
* @var \Magento\Catalog\Model\Indexer\Product\Price\Processor
19+
* @var Processor
1920
*/
2021
protected $_productPriceIndexerProcessor;
2122

@@ -32,22 +33,23 @@ class MassStatus extends \Magento\Catalog\Controller\Adminhtml\Product
3233
protected $collectionFactory;
3334

3435
/**
35-
* @param Action\Context $context
36+
* @param Context $context
3637
* @param Builder $productBuilder
37-
* @param \Magento\Catalog\Model\Indexer\Product\Price\Processor $productPriceIndexerProcessor
38+
* @param Processor $productPriceIndexerProcessor
3839
* @param Filter $filter
3940
* @param CollectionFactory $collectionFactory
4041
*/
4142
public function __construct(
42-
\Magento\Backend\App\Action\Context $context,
43+
Context $context,
4344
Product\Builder $productBuilder,
44-
\Magento\Catalog\Model\Indexer\Product\Price\Processor $productPriceIndexerProcessor,
45+
Processor $productPriceIndexerProcessor,
4546
Filter $filter,
4647
CollectionFactory $collectionFactory
4748
) {
4849
$this->filter = $filter;
4950
$this->collectionFactory = $collectionFactory;
5051
$this->_productPriceIndexerProcessor = $productPriceIndexerProcessor;
52+
5153
parent::__construct($context, $productBuilder);
5254
}
5355

@@ -82,6 +84,14 @@ public function execute()
8284
$storeId = (int) $this->getRequest()->getParam('store', 0);
8385
$status = (int) $this->getRequest()->getParam('status');
8486

87+
/** @var array $filters */
88+
$filters = (array) $this->getRequest()->getParam('filters', []);
89+
90+
if (isset($filters['store_id'])) {
91+
/** @var int $storeId */
92+
$storeId = (int) $filters['store_id'];
93+
}
94+
8595
try {
8696
$this->_validateMassStatus($productIds, $status);
8797
$this->_objectManager->get('Magento\Catalog\Model\Product\Action')
@@ -96,6 +106,7 @@ public function execute()
96106

97107
/** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
98108
$resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
109+
99110
return $resultRedirect->setPath('catalog/*/', ['store' => $storeId]);
100111
}
101112
}

app/code/Magento/Catalog/Model/Product/Option/Type/File.php

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*/
66
namespace Magento\Catalog\Model\Product\Option\Type;
77

8+
use Magento\Framework\App\Filesystem\DirectoryList;
89
use Magento\Framework\Filesystem;
910
use Magento\Framework\Exception\LocalizedException;
1011
use Magento\Catalog\Model\Product\Exception as ProductException;
@@ -69,17 +70,23 @@ class File extends \Magento\Catalog\Model\Product\Option\Type\DefaultType
6970
*/
7071
protected $validatorFile;
7172

73+
/**
74+
* @var Filesystem
75+
*/
76+
private $filesystem;
77+
7278
/**
7379
* @param \Magento\Checkout\Model\Session $checkoutSession
7480
* @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
7581
* @param \Magento\Quote\Model\Quote\Item\OptionFactory $itemOptionFactory
76-
* @param \Magento\Catalog\Model\Product\Option\UrlBuilder $urlBuilder
77-
* @param \Magento\Framework\Escaper $escaper
7882
* @param \Magento\MediaStorage\Helper\File\Storage\Database $coreFileStorageDatabase
7983
* @param File\ValidatorInfo $validatorInfo
8084
* @param File\ValidatorFile $validatorFile
85+
* @param \Magento\Catalog\Model\Product\Option\UrlBuilder $urlBuilder
86+
* @param \Magento\Framework\Escaper $escaper
8187
* @param array $data
82-
* @throws \Magento\Framework\Exception\FileSystemException
88+
* @param Filesystem $filesystem
89+
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
8390
*/
8491
public function __construct(
8592
\Magento\Checkout\Model\Session $checkoutSession,
@@ -90,12 +97,15 @@ public function __construct(
9097
\Magento\Catalog\Model\Product\Option\Type\File\ValidatorFile $validatorFile,
9198
\Magento\Catalog\Model\Product\Option\UrlBuilder $urlBuilder,
9299
\Magento\Framework\Escaper $escaper,
93-
array $data = []
100+
array $data = [],
101+
Filesystem $filesystem = null
94102
) {
95103
$this->_itemOptionFactory = $itemOptionFactory;
96104
$this->_urlBuilder = $urlBuilder;
97105
$this->_escaper = $escaper;
98106
$this->_coreFileStorageDatabase = $coreFileStorageDatabase;
107+
$this->filesystem = $filesystem ?: \Magento\Framework\App\ObjectManager::getInstance()->get(Filesystem::class);
108+
$this->_rootDirectory = $this->filesystem->getDirectoryRead(DirectoryList::MEDIA);
99109
$this->validatorInfo = $validatorInfo;
100110
$this->validatorFile = $validatorFile;
101111
parent::__construct($checkoutSession, $scopeConfig, $data);

app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/MassStatusTest.php

Lines changed: 118 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -6,80 +6,165 @@
66
*/
77
namespace Magento\Catalog\Test\Unit\Controller\Adminhtml\Product;
88

9-
class MassStatusTest extends \Magento\Catalog\Test\Unit\Controller\Adminhtml\ProductTest
9+
use Magento\Backend\Model\View\Result\Redirect;
10+
use Magento\Catalog\Controller\Adminhtml\Product\Builder;
11+
use Magento\Catalog\Controller\Adminhtml\Product\MassStatus;
12+
use Magento\Catalog\Model\Indexer\Product\Price\Processor;
13+
use Magento\Catalog\Model\Product;
14+
use Magento\Catalog\Model\Product\Action;
15+
use Magento\Catalog\Model\Product\Attribute\Source\Status;
16+
use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory as ProductCollectionFactory;
17+
use Magento\Framework\App\Request\Http;
18+
use Magento\Framework\Controller\ResultFactory;
19+
use Magento\Framework\Data\Collection\AbstractDb;
20+
use Magento\Framework\ObjectManager\ObjectManager as Manager;
21+
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
22+
use Magento\Ui\Component\MassAction\Filter;
23+
24+
/**
25+
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
26+
*/
27+
class MassStatusTest extends \PHPUnit_Framework_TestCase
1028
{
1129
/**
1230
* @var \PHPUnit_Framework_MockObject_MockObject
1331
*/
14-
protected $priceProcessor;
32+
private $priceProcessorMock;
33+
34+
/**
35+
* @var \Magento\Catalog\Controller\Adminhtml\Product\MassStatus
36+
*/
37+
private $action;
38+
39+
/**
40+
* @var \PHPUnit_Framework_MockObject_MockObject
41+
*/
42+
private $abstractDbMock;
43+
44+
/**
45+
* @var \PHPUnit_Framework_MockObject_MockObject
46+
*/
47+
private $filterMock;
48+
49+
/**
50+
* @var \PHPUnit_Framework_MockObject_MockObject
51+
*/
52+
private $requestMock;
1553

16-
/** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Backend\Model\View\Result\Redirect */
17-
protected $resultRedirect;
54+
/**
55+
* @var \PHPUnit_Framework_MockObject_MockObject
56+
*/
57+
private $actionMock;
1858

1959
protected function setUp()
2060
{
21-
$this->priceProcessor = $this->getMockBuilder('Magento\Catalog\Model\Indexer\Product\Price\Processor')
61+
$objectManagerMock = $this->getMockBuilder(Manager::class)
62+
->disableOriginalConstructor()
63+
->getMock();
64+
65+
$objectManagerHelper = new ObjectManager($this);
66+
$this->priceProcessorMock = $this->getMockBuilder(Processor::class)
2267
->disableOriginalConstructor()->getMock();
2368

24-
$productBuilder = $this->getMockBuilder('Magento\Catalog\Controller\Adminhtml\Product\Builder')->setMethods([
25-
'build',
26-
])->disableOriginalConstructor()->getMock();
69+
$productBuilderMock = $this->getMockBuilder(Builder::class)->setMethods([
70+
'build',
71+
])->disableOriginalConstructor()->getMock();
2772

28-
$product = $this->getMockBuilder('\Magento\Catalog\Model\Product')->disableOriginalConstructor()
73+
$this->requestMock = $this->getMockBuilder(Http::class)->setMethods(
74+
['getParam', 'getPost', 'getFullActionName', 'getPostValue']
75+
)->disableOriginalConstructor()->getMock();
76+
77+
$productMock = $this->getMockBuilder(Product::class)->disableOriginalConstructor()
2978
->setMethods(['getTypeId', 'getStoreId', '__sleep', '__wakeup'])->getMock();
30-
$product->expects($this->any())->method('getTypeId')->will($this->returnValue('simple'));
31-
$product->expects($this->any())->method('getStoreId')->will($this->returnValue('1'));
32-
$productBuilder->expects($this->any())->method('build')->will($this->returnValue($product));
79+
$productMock->expects($this->any())->method('getTypeId')->will($this->returnValue('simple'));
80+
$productMock->expects($this->any())->method('getStoreId')->will($this->returnValue('1'));
81+
$productBuilderMock->expects($this->any())->method('build')->will($this->returnValue($productMock));
3382

34-
$this->resultRedirect = $this->getMockBuilder('Magento\Backend\Model\View\Result\Redirect')
83+
$resultRedirectMock = $this->getMockBuilder(Redirect::class)
3584
->disableOriginalConstructor()
3685
->getMock();
37-
$resultFactory = $this->getMockBuilder('Magento\Framework\Controller\ResultFactory')
86+
$resultFactory = $this->getMockBuilder(ResultFactory::class)
3887
->disableOriginalConstructor()
3988
->setMethods(['create'])
4089
->getMock();
4190
$resultFactory->expects($this->atLeastOnce())
4291
->method('create')
43-
->with(\Magento\Framework\Controller\ResultFactory::TYPE_REDIRECT)
44-
->willReturn($this->resultRedirect);
92+
->with(ResultFactory::TYPE_REDIRECT)
93+
->willReturn($resultRedirectMock);
4594

46-
$abstractDbMock = $this->getMockBuilder('Magento\Framework\Data\Collection\AbstractDb')
95+
$this->abstractDbMock = $this->getMockBuilder(AbstractDb::class)
4796
->disableOriginalConstructor()
4897
->setMethods(['getAllIds', 'getResource'])
4998
->getMock();
50-
$abstractDbMock->expects($this->any())
99+
$this->abstractDbMock->expects($this->any())
51100
->method('getAllIds')
52101
->willReturn([]);
53102

54-
$filterMock = $this->getMockBuilder('Magento\Ui\Component\MassAction\Filter')
103+
$this->filterMock = $this->getMockBuilder(Filter::class)
55104
->disableOriginalConstructor()
56105
->setMethods(['getCollection'])
57106
->getMock();
58-
$filterMock->expects($this->any())
107+
$this->filterMock->expects($this->any())
59108
->method('getCollection')
60-
->willReturn($abstractDbMock);
61-
62-
$collectionFactoryMock = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Product\CollectionFactory')
109+
->willReturn($this->abstractDbMock);
110+
$this->actionMock = $this->getMockBuilder(Action::class)
111+
->disableOriginalConstructor()
112+
->getMock();
113+
$objectManagerMock->expects($this->any())->method('get')->willReturn($this->actionMock);
114+
$collectionFactoryMock = $this->getMockBuilder(ProductCollectionFactory::class)
63115
->disableOriginalConstructor()
64116
->setMethods(['create'])
65117
->getMock();
66118
$collectionFactoryMock->expects($this->any())
67119
->method('create')
68-
->willReturn($abstractDbMock);
69-
70-
$additionalParams = ['resultFactory' => $resultFactory];
71-
$this->action = new \Magento\Catalog\Controller\Adminhtml\Product\MassStatus(
72-
$this->initContext($additionalParams),
73-
$productBuilder,
74-
$this->priceProcessor,
75-
$filterMock,
76-
$collectionFactoryMock
120+
->willReturn($this->abstractDbMock);
121+
$this->requestMock = $this->getMockBuilder(Http::class)->setMethods(
122+
['getParam', 'getPost', 'getFullActionName', 'getPostValue']
123+
)->disableOriginalConstructor()->getMock();
124+
125+
$this->action = $objectManagerHelper->getObject(
126+
MassStatus::class,
127+
[
128+
'objectManager' => $objectManagerMock,
129+
'request' => $this->requestMock,
130+
'productBuilder' => $productBuilderMock,
131+
'filter' => $this->filterMock,
132+
'productPriceIndexerProcessor' => $this->priceProcessorMock,
133+
'collectionFactory' => $collectionFactoryMock,
134+
'resultFactory' => $resultFactory
135+
]
77136
);
137+
78138
}
79139

80140
public function testMassStatusAction()
81141
{
82-
$this->priceProcessor->expects($this->once())->method('reindexList');
142+
$storeId = 1;
143+
$status = Status::STATUS_DISABLED;
144+
$filters = [
145+
'store_id' => 2,
146+
];
147+
148+
$productIds = [3];
149+
150+
$this->filterMock->expects($this->once())
151+
->method('getCollection')
152+
->willReturn($this->abstractDbMock);
153+
$this->abstractDbMock->expects($this->once())
154+
->method('getAllIds')
155+
->willReturn($productIds);
156+
$this->requestMock->expects($this->exactly(3))
157+
->method('getParam')
158+
->willReturnMap([
159+
['store', 0, $storeId],
160+
['status', null, $status],
161+
['filters', [], $filters]
162+
]);
163+
$this->actionMock->expects($this->once())
164+
->method('updateAttributes');
165+
$this->priceProcessorMock->expects($this->once())
166+
->method('reindexList');
167+
83168
$this->action->execute();
84169
}
85170
}

app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/ProductTest.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,16 @@ abstract class ProductTest extends \PHPUnit_Framework_TestCase
99
{
1010
/** @var \PHPUnit_Framework_MockObject_MockObject */
1111
protected $context;
12+
1213
/** @var \Magento\Catalog\Controller\Product */
1314
protected $action;
15+
1416
/** @var \Magento\Framework\View\Layout */
1517
protected $layout;
18+
1619
/** @var \Magento\Backend\Model\Session|\PHPUnit_Framework_MockObject_MockObject */
1720
protected $session;
21+
1822
/** @var \Magento\Framework\App\Request\Http|\PHPUnit_Framework_MockObject_MockObject */
1923
protected $request;
2024

0 commit comments

Comments
 (0)