Skip to content

Commit 171fe6b

Browse files
author
Elena Marchenko
committed
Merge branch 'develop' of https://github.com/magento/magento2ce into MAGETWO-54942
2 parents 38f1afa + d8eac00 commit 171fe6b

File tree

45 files changed

+1217
-96
lines changed

Some content is hidden

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

45 files changed

+1217
-96
lines changed

app/code/Magento/Backend/etc/config.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111
<template>
1212
<minify_html>0</minify_html>
1313
</template>
14+
<static>
15+
<sign>1</sign>
16+
</static>
1417
</dev>
1518
<system>
1619
<media_storage_configuration>

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,11 @@ public function execute()
8484
$productIds = $collection->getAllIds();
8585
$storeId = (int) $this->getRequest()->getParam('store', 0);
8686
$status = (int) $this->getRequest()->getParam('status');
87+
$filters = (array)$this->getRequest()->getParam('filters', []);
88+
89+
if (isset($filters['store_id'])) {
90+
$storeId = (int)$filters['store_id'];
91+
}
8792

8893
try {
8994
$this->_validateMassStatus($productIds, $status);

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

Lines changed: 102 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -6,32 +6,74 @@
66
*/
77
namespace Magento\Catalog\Test\Unit\Controller\Adminhtml\Product;
88

9+
use Magento\Ui\Component\MassAction\Filter;
10+
use Magento\Backend\Model\View\Result\Redirect;
11+
use Magento\Catalog\Model\Indexer\Product\Price\Processor;
12+
use Magento\Catalog\Controller\Adminhtml\Product\Builder;
13+
use Magento\Framework\Data\Collection\AbstractDb;
14+
use Magento\Catalog\Model\Product\Action;
15+
16+
/**
17+
* Class MassStatusTest
18+
*
19+
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
20+
*/
921
class MassStatusTest extends \Magento\Catalog\Test\Unit\Controller\Adminhtml\ProductTest
1022
{
1123
/**
12-
* @var \PHPUnit_Framework_MockObject_MockObject
24+
* @var Processor|\PHPUnit_Framework_MockObject_MockObject
1325
*/
14-
protected $priceProcessor;
26+
private $priceProcessorMock;
1527

16-
/** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Backend\Model\View\Result\Redirect */
17-
protected $resultRedirect;
28+
/**
29+
* @var Redirect|\PHPUnit_Framework_MockObject_MockObject
30+
*/
31+
private $resultRedirectMock;
32+
33+
/**
34+
* @var Filter|\PHPUnit_Framework_MockObject_MockObject
35+
*/
36+
private $filterMock;
37+
38+
/**
39+
* @var Builder|\PHPUnit_Framework_MockObject_MockObject
40+
*/
41+
private $productBuilderMock;
42+
43+
/**
44+
* @var AbstractDb|\PHPUnit_Framework_MockObject_MockObject
45+
*/
46+
private $abstractDbMock;
47+
48+
/**
49+
* @var Action|\PHPUnit_Framework_MockObject_MockObject
50+
*/
51+
private $actionMock;
1852

1953
protected function setUp()
2054
{
21-
$this->priceProcessor = $this->getMockBuilder(\Magento\Catalog\Model\Indexer\Product\Price\Processor::class)
55+
$this->priceProcessorMock = $this->getMockBuilder(Processor::class)
2256
->disableOriginalConstructor()->getMock();
57+
$this->productBuilderMock = $this->getMockBuilder(Builder::class)
58+
->setMethods(['build'])
59+
->disableOriginalConstructor()
60+
->getMock();
2361

24-
$productBuilder = $this->getMockBuilder(
25-
\Magento\Catalog\Controller\Adminhtml\Product\Builder::class
26-
)->setMethods(['build'])->disableOriginalConstructor()->getMock();
27-
28-
$product = $this->getMockBuilder(\Magento\Catalog\Model\Product::class)->disableOriginalConstructor()
29-
->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));
62+
$productMock = $this->getMockBuilder(\Magento\Catalog\Model\Product::class)
63+
->disableOriginalConstructor()
64+
->setMethods(['getTypeId', 'getStoreId', '__sleep', '__wakeup'])
65+
->getMock();
66+
$productMock->expects($this->any())
67+
->method('getTypeId')
68+
->willReturn('simple');
69+
$productMock->expects($this->any())
70+
->method('getStoreId')
71+
->willReturn('1');
72+
$this->productBuilderMock->expects($this->any())
73+
->method('build')
74+
->willReturn($productMock);
3375

34-
$this->resultRedirect = $this->getMockBuilder(\Magento\Backend\Model\View\Result\Redirect::class)
76+
$this->resultRedirectMock = $this->getMockBuilder(\Magento\Backend\Model\View\Result\Redirect::class)
3577
->disableOriginalConstructor()
3678
->getMock();
3779
$resultFactory = $this->getMockBuilder(\Magento\Framework\Controller\ResultFactory::class)
@@ -41,47 +83,71 @@ protected function setUp()
4183
$resultFactory->expects($this->atLeastOnce())
4284
->method('create')
4385
->with(\Magento\Framework\Controller\ResultFactory::TYPE_REDIRECT)
44-
->willReturn($this->resultRedirect);
86+
->willReturn($this->resultRedirectMock);
4587

46-
$abstractDbMock = $this->getMockBuilder(\Magento\Framework\Data\Collection\AbstractDb::class)
88+
$this->abstractDbMock = $this->getMockBuilder(AbstractDb::class)
4789
->disableOriginalConstructor()
4890
->setMethods(['getAllIds', 'getResource'])
4991
->getMock();
50-
$abstractDbMock->expects($this->any())
51-
->method('getAllIds')
52-
->willReturn([]);
53-
54-
$filterMock = $this->getMockBuilder(\Magento\Ui\Component\MassAction\Filter::class)
92+
$this->filterMock = $this->getMockBuilder(\Magento\Ui\Component\MassAction\Filter::class)
5593
->disableOriginalConstructor()
5694
->setMethods(['getCollection'])
5795
->getMock();
58-
$filterMock->expects($this->any())
59-
->method('getCollection')
60-
->willReturn($abstractDbMock);
61-
62-
$collectionFactoryMock = $this->getMockBuilder(
63-
\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory::class
64-
)
96+
$this->actionMock = $this->getMockBuilder(Action::class)
97+
->disableOriginalConstructor()
98+
->getMock();
99+
100+
$collectionFactoryMock =
101+
$this->getMockBuilder(\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory::class)
65102
->disableOriginalConstructor()
66103
->setMethods(['create'])
67104
->getMock();
68105
$collectionFactoryMock->expects($this->any())
69106
->method('create')
70-
->willReturn($abstractDbMock);
107+
->willReturn($this->abstractDbMock);
108+
109+
$additionalParams = [
110+
'resultFactory' => $resultFactory
111+
];
112+
/** @var \Magento\Backend\App\Action\Context $context */
113+
$context = $this->initContext($additionalParams, [[Action::class, $this->actionMock]]);
71114

72-
$additionalParams = ['resultFactory' => $resultFactory];
73115
$this->action = new \Magento\Catalog\Controller\Adminhtml\Product\MassStatus(
74-
$this->initContext($additionalParams),
75-
$productBuilder,
76-
$this->priceProcessor,
77-
$filterMock,
116+
$context,
117+
$this->productBuilderMock,
118+
$this->priceProcessorMock,
119+
$this->filterMock,
78120
$collectionFactoryMock
79121
);
80122
}
81123

82124
public function testMassStatusAction()
83125
{
84-
$this->priceProcessor->expects($this->once())->method('reindexList');
126+
$storeId = 1;
127+
$status = \Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_DISABLED;
128+
$filters = [
129+
'store_id' => 2,
130+
];
131+
132+
$this->filterMock->expects($this->once())
133+
->method('getCollection')
134+
->willReturn($this->abstractDbMock);
135+
$this->abstractDbMock->expects($this->once())
136+
->method('getAllIds')
137+
->willReturn([3]);
138+
$this->request->expects($this->exactly(3))
139+
->method('getParam')
140+
->willReturnMap([
141+
['store', 0, $storeId],
142+
['status', null, $status],
143+
['filters', [], $filters]
144+
]);
145+
$this->actionMock->expects($this->once())
146+
->method('updateAttributes')
147+
->with([3], ['status' => $status], 2);
148+
$this->priceProcessorMock->expects($this->once())
149+
->method('reindexList');
150+
85151
$this->action->execute();
86152
}
87153
}

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

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
*/
66
namespace Magento\Catalog\Test\Unit\Controller\Adminhtml;
77

8+
use Magento\Catalog\Api\Data\ProductInterface;
9+
810
/**
911
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
1012
*/
@@ -25,17 +27,33 @@ abstract class ProductTest extends \PHPUnit_Framework_TestCase
2527
/** @var \Magento\Framework\App\Request\Http|\PHPUnit_Framework_MockObject_MockObject */
2628
protected $request;
2729

30+
/**
31+
* @var \Magento\Framework\ObjectManagerInterface|\PHPUnit_Framework_MockObject_MockObject
32+
*/
33+
private $objectManagerMock;
34+
2835
/**
2936
* Init context object
3037
*
3138
* @param array $additionalParams
39+
* @param array $objectManagerMap Object Manager mappings
3240
* @return \PHPUnit_Framework_MockObject_MockObject
3341
*/
34-
protected function initContext(array $additionalParams = [])
42+
protected function initContext(array $additionalParams = [], array $objectManagerMap = [])
3543
{
3644
$productActionMock = $this->getMock(\Magento\Catalog\Model\Product\Action::class, [], [], '', false);
37-
$objectManagerMock = $this->getMockForAbstractClass(\Magento\Framework\ObjectManagerInterface::class);
38-
$objectManagerMock->expects($this->any())->method('get')->will($this->returnValue($productActionMock));
45+
46+
$this->objectManagerMock = $this->getMockForAbstractClass(\Magento\Framework\ObjectManagerInterface::class);
47+
48+
if ($objectManagerMap) {
49+
$this->objectManagerMock->expects($this->any())
50+
->method('get')
51+
->willReturnMap($objectManagerMap);
52+
}
53+
54+
$this->objectManagerMock->expects($this->any())
55+
->method('get')
56+
->willReturn($productActionMock);
3957

4058
$block = $this->getMockBuilder(\Magento\Framework\View\Element\AbstractBlock::class)
4159
->disableOriginalConstructor()->getMockForAbstractClass();
@@ -93,7 +111,7 @@ protected function initContext(array $additionalParams = [])
93111
$this->context->expects($this->any())->method('getEventManager')->will($this->returnValue($eventManager));
94112
$this->context->expects($this->any())->method('getRequest')->will($this->returnValue($requestInterfaceMock));
95113
$this->context->expects($this->any())->method('getResponse')->will($this->returnValue($responseInterfaceMock));
96-
$this->context->expects($this->any())->method('getObjectManager')->will($this->returnValue($objectManagerMock));
114+
$this->context->expects($this->any())->method('getObjectManager')->willReturn($this->objectManagerMock);
97115

98116
$this->context->expects($this->any())->method('getMessageManager')
99117
->will($this->returnValue($managerInterfaceMock));

app/code/Magento/CatalogInventory/Helper/Stock.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,10 @@ public function addIsInStockFilterToCollection($collection)
154154
\Magento\Store\Model\ScopeInterface::SCOPE_STORE
155155
);
156156
$resource = $this->getStockStatusResource();
157-
$resource->addStockDataToCollection($collection, !$isShowOutOfStock);
157+
$resource->addStockDataToCollection(
158+
$collection,
159+
!$isShowOutOfStock && $collection->getFlag('require_stock_items')
160+
);
158161
$collection->setFlag($stockFlag, true);
159162
}
160163
}

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 ?

dev/tests/functional/tests/app/Magento/Backend/Test/Block/System/Store/Edit/Form/StoreForm.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,13 @@ class StoreForm extends Form
2222
*/
2323
protected $store = '//option[contains(.,"%s")]';
2424

25+
/**
26+
* Store dropdown selector
27+
*
28+
* @var string
29+
*/
30+
protected $storeGroupId = '//select[@id="store_group_id"]';
31+
2532
/**
2633
* Check that Store visible in Store dropdown
2734
*
@@ -32,4 +39,16 @@ public function isStoreVisible($name)
3239
{
3340
return $this->_rootElement->find(sprintf($this->store, $name), Locator::SELECTOR_XPATH)->isVisible();
3441
}
42+
43+
/**
44+
* Select store view by name from dropdown
45+
*
46+
* @param string $name
47+
* @return bool
48+
*/
49+
public function selectStore($name)
50+
{
51+
return $this->_rootElement->find($this->storeGroupId, Locator::SELECTOR_XPATH, 'optgroupselect')
52+
->setValue($name);
53+
}
3554
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<?php
2+
/**
3+
* Copyright © 2016 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
namespace Magento\Cms\Test\Constraint;
8+
9+
use Magento\Cms\Test\Fixture\CmsPage;
10+
use Magento\Cms\Test\Page\CmsPage as FrontCmsPage;
11+
use Magento\Mtf\Client\BrowserInterface;
12+
use Magento\Mtf\Constraint\AbstractConstraint;
13+
14+
/**
15+
* Assert that created CMS page with expected contents displayed on Frontend.
16+
*/
17+
class AssertCmsPageOnFrontend extends AbstractConstraint
18+
{
19+
/**
20+
* Assert that created CMS page with expected contents displayed on Frontend.
21+
*
22+
* @param CmsPage $cms
23+
* @param FrontCmsPage $frontCmsPage,
24+
* @param BrowserInterface $browser
25+
* @param string $displayContent
26+
* @return void
27+
*/
28+
public function processAssert(
29+
CmsPage $cms,
30+
FrontCmsPage $frontCmsPage,
31+
BrowserInterface $browser,
32+
$displayContent = null
33+
) {
34+
$browser->open($_ENV['app_frontend_url'] . $cms->getIdentifier());
35+
$fixtureContent = $cms->getContent();
36+
\PHPUnit_Framework_Assert::assertContains(
37+
$displayContent != null ? $displayContent : $fixtureContent['content'],
38+
$frontCmsPage->getCmsPageBlock()->getPageContent(),
39+
'Wrong content is displayed.'
40+
);
41+
}
42+
43+
/**
44+
* CMS Page content equals to data from fixture.
45+
*
46+
* @return string
47+
*/
48+
public function toString()
49+
{
50+
return 'CMS Page content equals to data from fixture.';
51+
}
52+
}

dev/tests/functional/tests/app/Magento/Cms/Test/Constraint/AssertCmsPagePreview.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,16 @@ class AssertCmsPagePreview extends AbstractConstraint
3030
* @param FrontCmsPage $frontCmsPage
3131
* @param CmsPage $cms
3232
* @param BrowserInterface $browser
33+
* @param string $displayContent
3334
* @return void
3435
*/
3536
public function processAssert(
3637
CmsPageIndex $cmsIndex,
3738
FrontCmsIndex $frontCmsIndex,
3839
FrontCmsPage $frontCmsPage,
3940
CmsPage $cms,
40-
BrowserInterface $browser
41+
BrowserInterface $browser,
42+
$displayContent = null
4143
) {
4244
$cmsIndex->open();
4345
$filter = ['title' => $cms->getTitle()];
@@ -46,7 +48,7 @@ public function processAssert(
4648

4749
$fixtureContent = $cms->getContent();
4850
\PHPUnit_Framework_Assert::assertContains(
49-
$fixtureContent['content'],
51+
$displayContent != null ? $displayContent : $fixtureContent['content'],
5052
$frontCmsPage->getCmsPageBlock()->getPageContent(),
5153
'Wrong content is displayed.'
5254
);

0 commit comments

Comments
 (0)