Skip to content

Commit 05619f7

Browse files
Merge pull request #518 from magento-fearless-kiwis/FearlessKiwis-MAGETWO-59284-New
Fixed issue: - MAGETWO-59284: There is no Scope Selector on Product Grid
2 parents 606b04d + 5a20ba7 commit 05619f7

File tree

4 files changed

+133
-35
lines changed

4 files changed

+133
-35
lines changed

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

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,21 @@ class MassStatus extends \Magento\Catalog\Controller\Adminhtml\Product
2222
/**
2323
* MassActions filter
2424
*
25-
* @var Filter
25+
* @var \Magento\Ui\Component\MassAction\Filter
2626
*/
2727
protected $filter;
2828

2929
/**
30-
* @var CollectionFactory
30+
* @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
3131
*/
3232
protected $collectionFactory;
3333

3434
/**
3535
* @param Action\Context $context
3636
* @param Builder $productBuilder
3737
* @param \Magento\Catalog\Model\Indexer\Product\Price\Processor $productPriceIndexerProcessor
38-
* @param Filter $filter
39-
* @param CollectionFactory $collectionFactory
38+
* @param \Magento\Ui\Component\MassAction\Filter $filter
39+
* @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $collectionFactory
4040
*/
4141
public function __construct(
4242
\Magento\Backend\App\Action\Context $context,
@@ -81,6 +81,11 @@ public function execute()
8181
$productIds = $collection->getAllIds();
8282
$storeId = (int) $this->getRequest()->getParam('store', 0);
8383
$status = (int) $this->getRequest()->getParam('status');
84+
$filters = (array)$this->getRequest()->getParam('filters', []);
85+
86+
if (isset($filters['store_id'])) {
87+
$storeId = (int)$filters['store_id'];
88+
}
8489

8590
try {
8691
$this->_validateMassStatus($productIds, $status);

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

Lines changed: 116 additions & 31 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\Framework\TestFramework\Unit\Helper\ObjectManager;
10+
use Magento\Ui\Component\MassAction\Filter;
11+
use Magento\Backend\Model\View\Result\Redirect;
12+
use Magento\Catalog\Model\Indexer\Product\Price\Processor;
13+
use Magento\Catalog\Controller\Adminhtml\Product\Builder;
14+
use Magento\Framework\Data\Collection\AbstractDb;
15+
use Magento\Catalog\Model\Product\Action;
16+
use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory;
17+
use Magento\Catalog\Controller\Adminhtml\Product\MassStatus;
18+
use Magento\Catalog\Model\Product\Attribute\Source\Status;
19+
use Magento\Framework\Controller\ResultFactory;
20+
use Magento\Framework\App\Request\Http;
21+
use Magento\Catalog\Model\Product;
22+
use Magento\Framework\ObjectManager\ObjectManager as Manager;
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([
69+
$productBuilderMock = $this->getMockBuilder(Builder::class)->setMethods([
2570
'build',
2671
])->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(CollectionFactory::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

app/code/Magento/Ui/view/base/web/js/grid/data-storage.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,10 @@ define([
7979
getData: function (params, options) {
8080
var cachedRequest = this.getRequest(params);
8181

82+
if (params && params.filters && params.filters['store_id']) {
83+
cachedRequest = false;
84+
}
85+
8286
options = options || {};
8387

8488
return !options.refresh && cachedRequest ?

0 commit comments

Comments
 (0)