Skip to content

Commit e7a90e5

Browse files
committed
MAGETWO-17177: mass price update doesn't affect discount price
- Created plugin instead of old indexer functionality
1 parent 0efd237 commit e7a90e5

File tree

3 files changed

+124
-0
lines changed
  • app/code/Magento/CatalogRule
  • dev/tests/unit/testsuite/Magento/CatalogRule/Plugin/Model/Product

3 files changed

+124
-0
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
/**
3+
* @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com)
4+
*/
5+
6+
namespace Magento\CatalogRule\Plugin\Model\Product;
7+
8+
use Magento\Catalog\Model\Product\Action as ProductAction;
9+
use Magento\CatalogRule\Model\Indexer\Product\ProductRuleProcessor;
10+
11+
class Action
12+
{
13+
/**
14+
* @var ProductRuleProcessor
15+
*/
16+
protected $productRuleProcessor;
17+
18+
/**
19+
* @param ProductRuleProcessor $productRuleProcessor
20+
*/
21+
public function __construct(ProductRuleProcessor $productRuleProcessor)
22+
{
23+
$this->productRuleProcessor = $productRuleProcessor;
24+
}
25+
26+
/**
27+
* @param ProductAction $object
28+
* @param ProductAction $result
29+
* @return ProductAction
30+
*
31+
* @SuppressWarnings(PHPMD.UnusedFormatParameter)
32+
*/
33+
public function afterUpdateAttributes(ProductAction $object, ProductAction $result)
34+
{
35+
$data = $result->getAttributesData();
36+
if (!empty($data['price'])) {
37+
$this->productRuleProcessor->reindexList($result->getProductIds());
38+
}
39+
40+
return $result;
41+
}
42+
}

app/code/Magento/CatalogRule/etc/adminhtml/di.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,7 @@
3131
<type name="Magento\Catalog\Model\Resource\Eav\Attribute">
3232
<plugin name="change_product_attribute" type="Magento\CatalogRule\Plugin\Indexer\Product\Attribute"/>
3333
</type>
34+
<type name="Magento\Catalog\Model\Product\Action">
35+
<plugin name="price_plugin" type="Magento\CatalogRule\Plugin\Model\Product\Action"/>
36+
</type>
3437
</config>
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
<?php
2+
/**
3+
* @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com)
4+
*/
5+
6+
namespace Magento\CatalogRule\Plugin\Model\Product;
7+
8+
class ActionTest extends \PHPUnit_Framework_TestCase
9+
{
10+
/** @var \Magento\CatalogRule\Plugin\Model\Product\Action */
11+
protected $action;
12+
13+
/** @var \Magento\CatalogRule\Model\Indexer\Product\ProductRuleProcessor|\PHPUnit_Framework_MockObject_MockObject */
14+
protected $productRuleProcessor;
15+
16+
protected function setUp()
17+
{
18+
$this->productRuleProcessor = $this->getMockBuilder(
19+
'Magento\CatalogRule\Model\Indexer\Product\ProductRuleProcessor'
20+
)->disableOriginalConstructor()
21+
->setMethods(['reindexList'])
22+
->getMock();
23+
24+
$this->action = new Action($this->productRuleProcessor);
25+
}
26+
27+
public function testAfterUpdateAttributes()
28+
{
29+
$subject = $this->getMockBuilder('Magento\Catalog\Model\Product\Action')
30+
->disableOriginalConstructor()
31+
->setMethods([])
32+
->getMock();
33+
34+
$result = $this->getMockBuilder('Magento\Catalog\Model\Product\Action')
35+
->disableOriginalConstructor()
36+
->setMethods(['getAttributesData', 'getProductIds'])
37+
->getMock();
38+
39+
$result->expects($this->once())
40+
->method('getAttributesData')
41+
->willReturn([]);
42+
43+
$result->expects($this->never())
44+
->method('getProductIds');
45+
46+
$this->productRuleProcessor->expects($this->never())
47+
->method('reindexList');
48+
49+
$this->action->afterUpdateAttributes($subject, $result);
50+
}
51+
52+
public function testAfterUpdateAttributesWithPrice()
53+
{
54+
$productIds = [1, 2, 3];
55+
$subject = $this->getMockBuilder('Magento\Catalog\Model\Product\Action')
56+
->disableOriginalConstructor()
57+
->setMethods([])
58+
->getMock();
59+
60+
$result = $this->getMockBuilder('Magento\Catalog\Model\Product\Action')
61+
->disableOriginalConstructor()
62+
->setMethods(['getAttributesData', 'getProductIds'])
63+
->getMock();
64+
65+
$result->expects($this->once())
66+
->method('getAttributesData')
67+
->willReturn(['price' => 100]);
68+
69+
$result->expects($this->once())
70+
->method('getProductIds')
71+
->willReturn($productIds);
72+
73+
$this->productRuleProcessor->expects($this->once())
74+
->method('reindexList')
75+
->with($productIds);
76+
77+
$this->action->afterUpdateAttributes($subject, $result);
78+
}
79+
}

0 commit comments

Comments
 (0)