diff --git a/app/code/Magento/CatalogRule/Plugin/Model/Product/Action.php b/app/code/Magento/CatalogRule/Plugin/Model/Product/Action.php new file mode 100644 index 0000000000000000000000000000000000000000..c9dbc6742abffc139f7c15d8a0cdfd32c3846aef --- /dev/null +++ b/app/code/Magento/CatalogRule/Plugin/Model/Product/Action.php @@ -0,0 +1,42 @@ +<?php +/** + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + */ + +namespace Magento\CatalogRule\Plugin\Model\Product; + +use Magento\Catalog\Model\Product\Action as ProductAction; +use Magento\CatalogRule\Model\Indexer\Product\ProductRuleProcessor; + +class Action +{ + /** + * @var ProductRuleProcessor + */ + protected $productRuleProcessor; + + /** + * @param ProductRuleProcessor $productRuleProcessor + */ + public function __construct(ProductRuleProcessor $productRuleProcessor) + { + $this->productRuleProcessor = $productRuleProcessor; + } + + /** + * @param ProductAction $object + * @param ProductAction $result + * @return ProductAction + * + * @SuppressWarnings(PHPMD.UnusedFormatParameter) + */ + public function afterUpdateAttributes(ProductAction $object, ProductAction $result) + { + $data = $result->getAttributesData(); + if (!empty($data['price'])) { + $this->productRuleProcessor->reindexList($result->getProductIds()); + } + + return $result; + } +} diff --git a/app/code/Magento/CatalogRule/etc/adminhtml/di.xml b/app/code/Magento/CatalogRule/etc/adminhtml/di.xml index 55eca2f1b83aeaedee7c4f2bdb6a2b2a5141c672..7268cb0de6eda456803dd18572bbb1cd0a1e4e75 100644 --- a/app/code/Magento/CatalogRule/etc/adminhtml/di.xml +++ b/app/code/Magento/CatalogRule/etc/adminhtml/di.xml @@ -31,4 +31,7 @@ <type name="Magento\Catalog\Model\Resource\Eav\Attribute"> <plugin name="change_product_attribute" type="Magento\CatalogRule\Plugin\Indexer\Product\Attribute"/> </type> + <type name="Magento\Catalog\Model\Product\Action"> + <plugin name="price_plugin" type="Magento\CatalogRule\Plugin\Model\Product\Action"/> + </type> </config> diff --git a/dev/tests/unit/testsuite/Magento/CatalogRule/Plugin/Model/Product/ActionTest.php b/dev/tests/unit/testsuite/Magento/CatalogRule/Plugin/Model/Product/ActionTest.php new file mode 100644 index 0000000000000000000000000000000000000000..189e4b63018d71651287e8817f60accba65bc133 --- /dev/null +++ b/dev/tests/unit/testsuite/Magento/CatalogRule/Plugin/Model/Product/ActionTest.php @@ -0,0 +1,79 @@ +<?php +/** + * @copyright Copyright (c) 2014 X.commerce, Inc. (http://www.magentocommerce.com) + */ + +namespace Magento\CatalogRule\Plugin\Model\Product; + +class ActionTest extends \PHPUnit_Framework_TestCase +{ + /** @var \Magento\CatalogRule\Plugin\Model\Product\Action */ + protected $action; + + /** @var \Magento\CatalogRule\Model\Indexer\Product\ProductRuleProcessor|\PHPUnit_Framework_MockObject_MockObject */ + protected $productRuleProcessor; + + protected function setUp() + { + $this->productRuleProcessor = $this->getMockBuilder( + 'Magento\CatalogRule\Model\Indexer\Product\ProductRuleProcessor' + )->disableOriginalConstructor() + ->setMethods(['reindexList']) + ->getMock(); + + $this->action = new Action($this->productRuleProcessor); + } + + public function testAfterUpdateAttributes() + { + $subject = $this->getMockBuilder('Magento\Catalog\Model\Product\Action') + ->disableOriginalConstructor() + ->setMethods([]) + ->getMock(); + + $result = $this->getMockBuilder('Magento\Catalog\Model\Product\Action') + ->disableOriginalConstructor() + ->setMethods(['getAttributesData', 'getProductIds']) + ->getMock(); + + $result->expects($this->once()) + ->method('getAttributesData') + ->willReturn([]); + + $result->expects($this->never()) + ->method('getProductIds'); + + $this->productRuleProcessor->expects($this->never()) + ->method('reindexList'); + + $this->action->afterUpdateAttributes($subject, $result); + } + + public function testAfterUpdateAttributesWithPrice() + { + $productIds = [1, 2, 3]; + $subject = $this->getMockBuilder('Magento\Catalog\Model\Product\Action') + ->disableOriginalConstructor() + ->setMethods([]) + ->getMock(); + + $result = $this->getMockBuilder('Magento\Catalog\Model\Product\Action') + ->disableOriginalConstructor() + ->setMethods(['getAttributesData', 'getProductIds']) + ->getMock(); + + $result->expects($this->once()) + ->method('getAttributesData') + ->willReturn(['price' => 100]); + + $result->expects($this->once()) + ->method('getProductIds') + ->willReturn($productIds); + + $this->productRuleProcessor->expects($this->once()) + ->method('reindexList') + ->with($productIds); + + $this->action->afterUpdateAttributes($subject, $result); + } +}