diff --git a/app/code/Magento/Catalog/Model/Indexer/Category/Flat/Plugin/StoreGroup.php b/app/code/Magento/Catalog/Model/Indexer/Category/Flat/Plugin/StoreGroup.php index 670f19db725f7..16f96d794a97b 100644 --- a/app/code/Magento/Catalog/Model/Indexer/Category/Flat/Plugin/StoreGroup.php +++ b/app/code/Magento/Catalog/Model/Indexer/Category/Flat/Plugin/StoreGroup.php @@ -5,18 +5,13 @@ */ namespace Magento\Catalog\Model\Indexer\Category\Flat\Plugin; -use Magento\Framework\Model\ResourceModel\Db\AbstractDb; -use Magento\Framework\Model\AbstractModel; -use Magento\Framework\Indexer\IndexerRegistry; use Magento\Catalog\Model\Indexer\Category\Flat\State; +use Magento\Framework\Indexer\IndexerRegistry; +use Magento\Framework\Model\AbstractModel; +use Magento\Framework\Model\ResourceModel\Db\AbstractDb; class StoreGroup { - /** - * @var bool - */ - private $needInvalidating; - /** * @var IndexerRegistry */ @@ -48,35 +43,21 @@ protected function validate(AbstractModel $group) return $group->dataHasChangedFor('root_category_id') && !$group->isObjectNew(); } - /** - * Check if need invalidate flat category indexer - * - * @param AbstractDb $subject - * @param AbstractModel $group - * - * @return void - * @SuppressWarnings(PHPMD.UnusedFormalParameter) - */ - public function beforeSave(AbstractDb $subject, AbstractModel $group) - { - $this->needInvalidating = $this->validate($group); - } - /** * Invalidate flat category indexer if root category changed for store group * * @param AbstractDb $subject - * @param AbstractDb $objectResource - * + * @param AbstractDb $result + * @param AbstractModel $group * @return AbstractDb * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function afterSave(AbstractDb $subject, AbstractDb $objectResource) + public function afterSave(AbstractDb $subject, AbstractDb $result, AbstractModel $group) { - if ($this->needInvalidating && $this->state->isFlatEnabled()) { + if ($this->validate($group) && $this->state->isFlatEnabled()) { $this->indexerRegistry->get(State::INDEXER_ID)->invalidate(); } - return $objectResource; + return $result; } } diff --git a/app/code/Magento/Catalog/Model/Indexer/Category/Product/Plugin/StoreGroup.php b/app/code/Magento/Catalog/Model/Indexer/Category/Product/Plugin/StoreGroup.php index 005936a75e6d6..12a9d85dc416b 100644 --- a/app/code/Magento/Catalog/Model/Indexer/Category/Product/Plugin/StoreGroup.php +++ b/app/code/Magento/Catalog/Model/Indexer/Category/Product/Plugin/StoreGroup.php @@ -5,19 +5,14 @@ */ namespace Magento\Catalog\Model\Indexer\Category\Product\Plugin; -use Magento\Framework\Indexer\IndexerRegistry; -use Magento\Framework\Model\ResourceModel\Db\AbstractDb; -use Magento\Framework\Model\AbstractModel; use Magento\Catalog\Model\Indexer\Category\Product; use Magento\Catalog\Model\Indexer\Category\Product\TableMaintainer; +use Magento\Framework\Indexer\IndexerRegistry; +use Magento\Framework\Model\AbstractModel; +use Magento\Framework\Model\ResourceModel\Db\AbstractDb; class StoreGroup { - /** - * @var bool - */ - private $needInvalidating; - /** * @var IndexerRegistry */ @@ -40,36 +35,23 @@ public function __construct( $this->tableMaintainer = $tableMaintainer; } - /** - * Check if need invalidate flat category indexer - * - * @param AbstractDb $subject - * @param AbstractModel $group - * - * @return void - * @SuppressWarnings(PHPMD.UnusedFormalParameter) - */ - public function beforeSave(AbstractDb $subject, AbstractModel $group) - { - $this->needInvalidating = $this->validate($group); - } - /** * Invalidate flat product * * @param AbstractDb $subject - * @param AbstractDb $objectResource + * @param AbstractDb $result + * @param AbstractModel $group * * @return AbstractDb * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function afterSave(AbstractDb $subject, AbstractDb $objectResource) + public function afterSave(AbstractDb $subject, AbstractDb $result, AbstractModel $group) { - if ($this->needInvalidating) { + if ($this->validate($group)) { $this->indexerRegistry->get(Product::INDEXER_ID)->invalidate(); } - return $objectResource; + return $result; } /** diff --git a/app/code/Magento/Catalog/Model/Indexer/Category/Product/Plugin/StoreView.php b/app/code/Magento/Catalog/Model/Indexer/Category/Product/Plugin/StoreView.php index b6f9e6adf4a1c..78353f56a0e13 100644 --- a/app/code/Magento/Catalog/Model/Indexer/Category/Product/Plugin/StoreView.php +++ b/app/code/Magento/Catalog/Model/Indexer/Category/Product/Plugin/StoreView.php @@ -5,18 +5,18 @@ */ namespace Magento\Catalog\Model\Indexer\Category\Product\Plugin; -use Magento\Framework\Model\ResourceModel\Db\AbstractDb; use Magento\Framework\Model\AbstractModel; +use Magento\Framework\Model\ResourceModel\Db\AbstractDb; class StoreView extends StoreGroup { /** * Validate changes for invalidating indexer * - * @param \Magento\Framework\Model\AbstractModel $store + * @param AbstractModel $store * @return bool */ - protected function validate(\Magento\Framework\Model\AbstractModel $store) + protected function validate(AbstractModel $store) { return $store->isObjectNew() || $store->dataHasChangedFor('group_id'); } @@ -36,7 +36,7 @@ public function afterSave(AbstractDb $subject, AbstractDb $objectResource, Abstr $this->tableMaintainer->createTablesForStore($store->getId()); } - return parent::afterSave($subject, $objectResource); + return parent::afterSave($subject, $objectResource, $store); } /** diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Eav/Plugin/StoreView.php b/app/code/Magento/Catalog/Model/Indexer/Product/Eav/Plugin/StoreView.php index 95e525b2601f4..4503ca5ea23c7 100644 --- a/app/code/Magento/Catalog/Model/Indexer/Product/Eav/Plugin/StoreView.php +++ b/app/code/Magento/Catalog/Model/Indexer/Product/Eav/Plugin/StoreView.php @@ -3,21 +3,26 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\Catalog\Model\Indexer\Product\Eav\Plugin; +use Magento\Catalog\Model\Indexer\Product\Eav\Processor; +use Magento\Framework\Model\AbstractModel; +use Magento\Store\Model\ResourceModel\Store; + class StoreView { /** * Product attribute indexer processor * - * @var \Magento\Catalog\Model\Indexer\Product\Eav\Processor + * @var Processor */ protected $_indexerEavProcessor; /** - * @param \Magento\Catalog\Model\Indexer\Product\Eav\Processor $indexerEavProcessor + * @param Processor $indexerEavProcessor */ - public function __construct(\Magento\Catalog\Model\Indexer\Product\Eav\Processor $indexerEavProcessor) + public function __construct(Processor $indexerEavProcessor) { $this->_indexerEavProcessor = $indexerEavProcessor; } @@ -25,18 +30,19 @@ public function __construct(\Magento\Catalog\Model\Indexer\Product\Eav\Processor /** * Before save handler * - * @param \Magento\Store\Model\ResourceModel\Store $subject - * @param \Magento\Framework\Model\AbstractModel $object + * @param Store $subject + * @param Store $result + * @param AbstractModel $object * - * @return void + * @return Store * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function beforeSave( - \Magento\Store\Model\ResourceModel\Store $subject, - \Magento\Framework\Model\AbstractModel $object - ) { - if ((!$object->getId() || $object->dataHasChangedFor('group_id')) && $object->getIsActive()) { + public function afterSave(Store $subject, Store $result, AbstractModel $object) + { + if (($object->isObjectNew() || $object->dataHasChangedFor('group_id')) && $object->getIsActive()) { $this->_indexerEavProcessor->markIndexerAsInvalid(); } + + return $result; } } diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Plugin/Store.php b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Plugin/Store.php index ef7919193e609..38b9281f42cca 100644 --- a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Plugin/Store.php +++ b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Plugin/Store.php @@ -6,19 +6,23 @@ namespace Magento\Catalog\Model\Indexer\Product\Flat\Plugin; +use Magento\Catalog\Model\Indexer\Product\Flat\Processor; +use Magento\Framework\Model\AbstractModel; +use Magento\Store\Model\ResourceModel\Store as StoreResourceModel; + class Store { /** * Product flat indexer processor * - * @var \Magento\Catalog\Model\Indexer\Product\Flat\Processor + * @var Processor */ protected $_productFlatIndexerProcessor; /** - * @param \Magento\Catalog\Model\Indexer\Product\Flat\Processor $productFlatIndexerProcessor + * @param Processor $productFlatIndexerProcessor */ - public function __construct(\Magento\Catalog\Model\Indexer\Product\Flat\Processor $productFlatIndexerProcessor) + public function __construct(Processor $productFlatIndexerProcessor) { $this->_productFlatIndexerProcessor = $productFlatIndexerProcessor; } @@ -26,18 +30,19 @@ public function __construct(\Magento\Catalog\Model\Indexer\Product\Flat\Processo /** * Before save handler * - * @param \Magento\Store\Model\ResourceModel\Store $subject - * @param \Magento\Framework\Model\AbstractModel $object + * @param StoreResourceModel $subject + * @param StoreResourceModel $result + * @param AbstractModel $object * - * @return void + * @return StoreResourceModel * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function beforeSave( - \Magento\Store\Model\ResourceModel\Store $subject, - \Magento\Framework\Model\AbstractModel $object - ) { - if (!$object->getId() || $object->dataHasChangedFor('group_id')) { + public function afterSave(StoreResourceModel $subject, StoreResourceModel $result, AbstractModel $object) + { + if ($object->isObjectNew() || $object->dataHasChangedFor('group_id')) { $this->_productFlatIndexerProcessor->markIndexerAsInvalid(); } + + return $result; } } diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Plugin/StoreGroup.php b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Plugin/StoreGroup.php index df62fe8d349e4..1276e60ac74b0 100644 --- a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Plugin/StoreGroup.php +++ b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Plugin/StoreGroup.php @@ -6,19 +6,23 @@ namespace Magento\Catalog\Model\Indexer\Product\Flat\Plugin; +use Magento\Catalog\Model\Indexer\Product\Flat\Processor; +use Magento\Framework\Model\AbstractModel; +use Magento\Store\Model\ResourceModel\Group; + class StoreGroup { /** * Product flat indexer processor * - * @var \Magento\Catalog\Model\Indexer\Product\Flat\Processor + * @var Processor */ protected $_productFlatIndexerProcessor; /** - * @param \Magento\Catalog\Model\Indexer\Product\Flat\Processor $productFlatIndexerProcessor + * @param Processor $productFlatIndexerProcessor */ - public function __construct(\Magento\Catalog\Model\Indexer\Product\Flat\Processor $productFlatIndexerProcessor) + public function __construct(Processor $productFlatIndexerProcessor) { $this->_productFlatIndexerProcessor = $productFlatIndexerProcessor; } @@ -26,18 +30,19 @@ public function __construct(\Magento\Catalog\Model\Indexer\Product\Flat\Processo /** * Before save handler * - * @param \Magento\Store\Model\ResourceModel\Group $subject - * @param \Magento\Framework\Model\AbstractModel $object + * @param Group $subject + * @param Group $result + * @param AbstractModel $object * - * @return void + * @return Group * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function beforeSave( - \Magento\Store\Model\ResourceModel\Group $subject, - \Magento\Framework\Model\AbstractModel $object - ) { - if (!$object->getId() || $object->dataHasChangedFor('root_category_id')) { + public function afterSave(Group $subject, Group $result, AbstractModel $object) + { + if ($object->isObjectNew() || $object->dataHasChangedFor('root_category_id')) { $this->_productFlatIndexerProcessor->markIndexerAsInvalid(); } + + return $result; } } diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Category/Flat/Plugin/StoreGroupTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Category/Flat/Plugin/StoreGroupTest.php index 7dba4ddfd3d8c..cb4fd12e8d6f2 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Category/Flat/Plugin/StoreGroupTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Category/Flat/Plugin/StoreGroupTest.php @@ -11,7 +11,6 @@ use Magento\Catalog\Model\Indexer\Category\Flat\State; use Magento\Framework\Indexer\IndexerInterface; use Magento\Framework\Indexer\IndexerRegistry; -use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Store\Model\Group as GroupModel; use Magento\Store\Model\ResourceModel\Group; use PHPUnit\Framework\MockObject\MockObject; @@ -22,32 +21,32 @@ class StoreGroupTest extends TestCase /** * @var MockObject|IndexerInterface */ - protected $indexerMock; + private $indexerMock; /** * @var MockObject|State */ - protected $stateMock; + private $stateMock; /** * @var StoreGroup */ - protected $model; + private $model; /** * @var MockObject|Group */ - protected $subjectMock; + private $subjectMock; /** * @var IndexerRegistry|MockObject */ - protected $indexerRegistryMock; + private $indexerRegistryMock; /** * @var MockObject|GroupModel */ - protected $groupMock; + private $groupMock; protected function setUp(): void { @@ -70,14 +69,10 @@ protected function setUp(): void $this->indexerRegistryMock = $this->createPartialMock(IndexerRegistry::class, ['get']); - $this->model = (new ObjectManager($this)) - ->getObject( - StoreGroup::class, - ['indexerRegistry' => $this->indexerRegistryMock, 'state' => $this->stateMock] - ); + $this->model = new StoreGroup($this->indexerRegistryMock, $this->stateMock); } - public function testBeforeAndAfterSave() + public function testAfterSave(): void { $this->stateMock->expects($this->once())->method('isFlatEnabled')->willReturn(true); $this->indexerMock->expects($this->once())->method('invalidate'); @@ -90,14 +85,14 @@ public function testBeforeAndAfterSave() ->with('root_category_id') ->willReturn(true); $this->groupMock->expects($this->once())->method('isObjectNew')->willReturn(false); - $this->model->beforeSave($this->subjectMock, $this->groupMock); + $this->assertSame( $this->subjectMock, $this->model->afterSave($this->subjectMock, $this->subjectMock, $this->groupMock) ); } - public function testBeforeAndAfterSaveNotNew() + public function testAfterSaveNotNew(): void { $this->stateMock->expects($this->never())->method('isFlatEnabled'); $this->groupMock->expects($this->once()) @@ -105,7 +100,7 @@ public function testBeforeAndAfterSaveNotNew() ->with('root_category_id') ->willReturn(true); $this->groupMock->expects($this->once())->method('isObjectNew')->willReturn(true); - $this->model->beforeSave($this->subjectMock, $this->groupMock); + $this->assertSame( $this->subjectMock, $this->model->afterSave($this->subjectMock, $this->subjectMock, $this->groupMock) diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Category/Flat/Plugin/StoreViewTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Category/Flat/Plugin/StoreViewTest.php index 6f39cc9a7b220..d818af8f1233c 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Category/Flat/Plugin/StoreViewTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Category/Flat/Plugin/StoreViewTest.php @@ -12,6 +12,7 @@ use Magento\Framework\Indexer\IndexerInterface; use Magento\Framework\Indexer\IndexerRegistry; use Magento\Store\Model\ResourceModel\Store; +use Magento\Store\Model\Store as StoreModel; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; @@ -20,27 +21,27 @@ class StoreViewTest extends TestCase /** * @var MockObject|IndexerInterface */ - protected $indexerMock; + private $indexerMock; /** * @var MockObject|State */ - protected $stateMock; + private $stateMock; /** * @var StoreView */ - protected $model; + private $model; /** * @var IndexerRegistry|MockObject */ - protected $indexerRegistryMock; + private $indexerRegistryMock; /** - * @var MockObject + * @var Store|MockObject */ - protected $subjectMock; + private $subjectMock; protected function setUp(): void { @@ -65,50 +66,51 @@ protected function setUp(): void $this->model = new StoreView($this->indexerRegistryMock, $this->stateMock); } - public function testBeforeAndAfterSaveNewObject() + public function testAfterSaveNewObject(): void { $this->mockConfigFlatEnabled(); $this->mockIndexerMethods(); $storeMock = $this->createPartialMock( - \Magento\Store\Model\Store::class, + StoreModel::class, ['isObjectNew', 'dataHasChangedFor'] ); $storeMock->expects($this->once())->method('isObjectNew')->willReturn(true); - $this->model->beforeSave($this->subjectMock, $storeMock); + $this->assertSame( $this->subjectMock, $this->model->afterSave($this->subjectMock, $this->subjectMock, $storeMock) ); } - public function testBeforeAndAfterSaveHasChanged() + public function testAfterSaveHasChanged(): void { $storeMock = $this->createPartialMock( - \Magento\Store\Model\Store::class, + StoreModel::class, ['isObjectNew', 'dataHasChangedFor'] ); - $this->model->beforeSave($this->subjectMock, $storeMock); + $this->assertSame( $this->subjectMock, $this->model->afterSave($this->subjectMock, $this->subjectMock, $storeMock) ); } - public function testBeforeAndAfterSaveNoNeed() + public function testAfterSaveNoNeed(): void { $this->mockConfigFlatEnabledNever(); + $storeMock = $this->createPartialMock( - \Magento\Store\Model\Store::class, + StoreModel::class, ['isObjectNew', 'dataHasChangedFor'] ); - $this->model->beforeSave($this->subjectMock, $storeMock); + $this->assertSame( $this->subjectMock, $this->model->afterSave($this->subjectMock, $this->subjectMock, $storeMock) ); } - protected function mockIndexerMethods() + private function mockIndexerMethods(): void { $this->indexerMock->expects($this->once())->method('invalidate'); $this->indexerRegistryMock->expects($this->once()) @@ -117,12 +119,12 @@ protected function mockIndexerMethods() ->willReturn($this->indexerMock); } - protected function mockConfigFlatEnabled() + private function mockConfigFlatEnabled(): void { $this->stateMock->expects($this->once())->method('isFlatEnabled')->willReturn(true); } - protected function mockConfigFlatEnabledNever() + private function mockConfigFlatEnabledNever(): void { $this->stateMock->expects($this->never())->method('isFlatEnabled'); } diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Category/Product/Plugin/StoreGroupTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Category/Product/Plugin/StoreGroupTest.php index 500f7f714e159..f7064b7e1117c 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Category/Product/Plugin/StoreGroupTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Category/Product/Plugin/StoreGroupTest.php @@ -9,9 +9,9 @@ use Magento\Catalog\Model\Indexer\Category\Product; use Magento\Catalog\Model\Indexer\Category\Product\Plugin\StoreGroup; +use Magento\Catalog\Model\Indexer\Category\Product\TableMaintainer; use Magento\Framework\Indexer\IndexerInterface; use Magento\Framework\Indexer\IndexerRegistry; -use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Store\Model\Group as GroupModel; use Magento\Store\Model\ResourceModel\Group; use PHPUnit\Framework\MockObject\MockObject; @@ -22,7 +22,7 @@ class StoreGroupTest extends TestCase /** * @var GroupModel|MockObject */ - private $groupMock; + private $groupModelMock; /** * @var MockObject|IndexerInterface @@ -32,13 +32,18 @@ class StoreGroupTest extends TestCase /** * @var MockObject|Group */ - private $subject; + private $subjectMock; /** * @var IndexerRegistry|MockObject */ private $indexerRegistryMock; + /** + * @var TableMaintainer|MockObject + */ + private $tableMaintainerMock; + /** * @var StoreGroup */ @@ -46,7 +51,7 @@ class StoreGroupTest extends TestCase protected function setUp(): void { - $this->groupMock = $this->createPartialMock( + $this->groupModelMock = $this->createPartialMock( GroupModel::class, ['dataHasChangedFor', 'isObjectNew'] ); @@ -59,44 +64,48 @@ protected function setUp(): void true, ['getId', 'getState'] ); - $this->subject = $this->createMock(Group::class); + $this->subjectMock = $this->createMock(Group::class); $this->indexerRegistryMock = $this->createPartialMock(IndexerRegistry::class, ['get']); + $this->tableMaintainerMock = $this->createMock(TableMaintainer::class); - $this->model = (new ObjectManager($this)) - ->getObject(StoreGroup::class, ['indexerRegistry' => $this->indexerRegistryMock]); + $this->model = new StoreGroup($this->indexerRegistryMock, $this->tableMaintainerMock); } /** * @param array $valueMap * @dataProvider changedDataProvider */ - public function testBeforeAndAfterSave($valueMap) + public function testAfterSave(array $valueMap): void { $this->mockIndexerMethods(); - $this->groupMock->expects($this->exactly(2))->method('dataHasChangedFor')->willReturnMap($valueMap); - $this->groupMock->expects($this->once())->method('isObjectNew')->willReturn(false); + $this->groupModelMock->expects($this->exactly(2))->method('dataHasChangedFor')->willReturnMap($valueMap); + $this->groupModelMock->expects($this->once())->method('isObjectNew')->willReturn(false); - $this->model->beforeSave($this->subject, $this->groupMock); - $this->assertSame($this->subject, $this->model->afterSave($this->subject, $this->subject, $this->groupMock)); + $this->assertSame( + $this->subjectMock, + $this->model->afterSave($this->subjectMock, $this->subjectMock, $this->groupModelMock) + ); } /** * @param array $valueMap * @dataProvider changedDataProvider */ - public function testBeforeAndAfterSaveNotNew($valueMap) + public function testAfterSaveNotNew(array $valueMap): void { - $this->groupMock->expects($this->exactly(2))->method('dataHasChangedFor')->willReturnMap($valueMap); - $this->groupMock->expects($this->once())->method('isObjectNew')->willReturn(true); + $this->groupModelMock->expects($this->exactly(2))->method('dataHasChangedFor')->willReturnMap($valueMap); + $this->groupModelMock->expects($this->once())->method('isObjectNew')->willReturn(true); - $this->model->beforeSave($this->subject, $this->groupMock); - $this->assertSame($this->subject, $this->model->afterSave($this->subject, $this->subject, $this->groupMock)); + $this->assertSame( + $this->subjectMock, + $this->model->afterSave($this->subjectMock, $this->subjectMock, $this->groupModelMock) + ); } /** * @return array */ - public function changedDataProvider() + public function changedDataProvider(): array { return [ [ @@ -106,18 +115,20 @@ public function changedDataProvider() ]; } - public function testBeforeAndAfterSaveWithoutChanges() + public function testAfterSaveWithoutChanges(): void { - $this->groupMock->expects($this->exactly(2)) + $this->groupModelMock->expects($this->exactly(2)) ->method('dataHasChangedFor') ->willReturnMap([['root_category_id', false], ['website_id', false]]); - $this->groupMock->expects($this->never())->method('isObjectNew'); + $this->groupModelMock->expects($this->never())->method('isObjectNew'); - $this->model->beforeSave($this->subject, $this->groupMock); - $this->assertSame($this->subject, $this->model->afterSave($this->subject, $this->subject, $this->groupMock)); + $this->assertSame( + $this->subjectMock, + $this->model->afterSave($this->subjectMock, $this->subjectMock, $this->groupModelMock) + ); } - private function mockIndexerMethods() + private function mockIndexerMethods(): void { $this->indexerMock->expects($this->once())->method('invalidate'); $this->indexerRegistryMock->expects($this->once()) diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Category/Product/Plugin/StoreViewTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Category/Product/Plugin/StoreViewTest.php index 3108934d50f5a..4ecc2404153ba 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Category/Product/Plugin/StoreViewTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Category/Product/Plugin/StoreViewTest.php @@ -27,27 +27,27 @@ class StoreViewTest extends TestCase /** * @var MockObject|IndexerInterface */ - protected $indexerMock; + private $indexerMock; /** * @var StoreView */ - protected $model; + private $model; /** * @var IndexerRegistry|MockObject */ - protected $indexerRegistryMock; + private $indexerRegistryMock; /** * @var TableMaintainer|MockObject */ - protected $tableMaintainer; + private $tableMaintainerMock; /** - * @var MockObject + * @var Group|MockObject */ - protected $subject; + private $subjectMock; protected function setUp(): void { @@ -60,7 +60,7 @@ protected function setUp(): void true, ['getId', 'getState'] ); - $this->subject = $this->createMock(Group::class); + $this->subjectMock = $this->createMock(Group::class); $this->indexerRegistryMock = $this->createPartialMock(IndexerRegistry::class, ['get']); $this->storeMock = $this->createPartialMock( Store::class, @@ -70,47 +70,56 @@ protected function setUp(): void 'dataHasChangedFor' ] ); - $this->tableMaintainer = $this->createPartialMock( + $this->tableMaintainerMock = $this->createPartialMock( TableMaintainer::class, [ 'createTablesForStore' ] ); - $this->model = new StoreView($this->indexerRegistryMock, $this->tableMaintainer); + $this->model = new StoreView($this->indexerRegistryMock, $this->tableMaintainerMock); } - public function testAroundSaveNewObject() + public function testAfterSaveNewObject(): void { $this->mockIndexerMethods(); $this->storeMock->expects($this->atLeastOnce())->method('isObjectNew')->willReturn(true); $this->storeMock->expects($this->atLeastOnce())->method('getId')->willReturn(1); - $this->model->beforeSave($this->subject, $this->storeMock); - $this->assertSame($this->subject, $this->model->afterSave($this->subject, $this->subject, $this->storeMock)); + + $this->assertSame( + $this->subjectMock, + $this->model->afterSave($this->subjectMock, $this->subjectMock, $this->storeMock) + ); } - public function testAroundSaveHasChanged() + public function testAfterSaveHasChanged(): void { $this->mockIndexerMethods(); $this->storeMock->expects($this->once()) ->method('dataHasChangedFor') ->with('group_id') ->willReturn(true); - $this->model->beforeSave($this->subject, $this->storeMock); - $this->assertSame($this->subject, $this->model->afterSave($this->subject, $this->subject, $this->storeMock)); + + $this->assertSame( + $this->subjectMock, + $this->model->afterSave($this->subjectMock, $this->subjectMock, $this->storeMock) + ); } - public function testAroundSaveNoNeed() + public function testAfterSaveNoNeed(): void { $this->storeMock->expects($this->once()) ->method('dataHasChangedFor') ->with('group_id') ->willReturn(false); - $this->model->beforeSave($this->subject, $this->storeMock); - $this->assertSame($this->subject, $this->model->afterSave($this->subject, $this->subject, $this->storeMock)); + + $this->assertSame( + $this->subjectMock, + $this->model->afterSave($this->subjectMock, $this->subjectMock, $this->storeMock) + ); } - private function mockIndexerMethods() + private function mockIndexerMethods(): void { $this->indexerMock->expects($this->once())->method('invalidate'); $this->indexerRegistryMock->expects($this->once()) diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/Plugin/StoreViewTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/Plugin/StoreViewTest.php index 0d5a3bb93a6bd..4b2c803c66744 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/Plugin/StoreViewTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/Plugin/StoreViewTest.php @@ -11,50 +11,81 @@ use Magento\Catalog\Model\Indexer\Product\Eav\Processor; use Magento\Framework\Model\AbstractModel; use Magento\Store\Model\ResourceModel\Store; +use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class StoreViewTest extends TestCase { /** - * @param array $data - * @dataProvider beforeSaveDataProvider + * @var Processor|MockObject + */ + private $eavProcessorMock; + /** + * @var Store|MockObject */ - public function testBeforeSave(array $data) + private $subjectMock; + /** + * @var AbstractModel|MockObject + */ + private $objectMock; + + /** + * @var StoreView + */ + private $storeViewPlugin; + + protected function setUp(): void { - $eavProcessorMock = $this->getMockBuilder(Processor::class) + $this->eavProcessorMock = $this->getMockBuilder(Processor::class) ->disableOriginalConstructor() ->getMock(); - $matcher = $data['matcher']; - $eavProcessorMock->expects($this->$matcher()) - ->method('markIndexerAsInvalid'); - $subjectMock = $this->getMockBuilder(Store::class) + $this->subjectMock = $this->getMockBuilder(Store::class) ->disableOriginalConstructor() ->getMock(); - $objectMock = $this->getMockBuilder(AbstractModel::class) + $this->objectMock = $this->getMockBuilder(AbstractModel::class) ->disableOriginalConstructor() ->setMethods(['getId', 'dataHasChangedFor', 'getIsActive']) ->getMock(); - $objectMock->expects($this->any()) + + $this->storeViewPlugin = new StoreView($this->eavProcessorMock); + } + + /** + * @param array $data + * @dataProvider beforeSaveDataProvider + */ + public function testAfterSave(array $data): void + { + $matcher = $data['matcher']; + + $this->eavProcessorMock->expects($this->$matcher()) + ->method('markIndexerAsInvalid'); + + $this->objectMock->expects($this->any()) ->method('getId') ->willReturn($data['object_id']); - $objectMock->expects($this->any()) + + $this->objectMock->expects($this->any()) ->method('dataHasChangedFor') ->with('group_id') ->willReturn($data['has_group_id_changed']); - $objectMock->expects($this->any()) + + $this->objectMock->expects($this->any()) ->method('getIsActive') ->willReturn($data['is_active']); - $model = new StoreView($eavProcessorMock); - $model->beforeSave($subjectMock, $objectMock); + $this->assertSame( + $this->subjectMock, + $this->storeViewPlugin->afterSave($this->subjectMock, $this->subjectMock, $this->objectMock) + ); } /** * @return array */ - public function beforeSaveDataProvider() + public function beforeSaveDataProvider(): array { return [ [ diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/Plugin/StoreGroupTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/Plugin/StoreGroupTest.php index 5500081d5e11d..adabfab1560dd 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/Plugin/StoreGroupTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/Plugin/StoreGroupTest.php @@ -9,6 +9,7 @@ use Magento\Catalog\Model\Indexer\Product\Flat\Plugin\StoreGroup; use Magento\Catalog\Model\Indexer\Product\Flat\Processor; +use Magento\Store\Model\Group as StoreGroupModel; use Magento\Store\Model\ResourceModel\Group; use Magento\Store\Model\Store; use PHPUnit\Framework\MockObject\MockObject; @@ -19,17 +20,22 @@ class StoreGroupTest extends TestCase /** * @var Processor|MockObject */ - protected $processorMock; + private $processorMock; /** * @var Store|MockObject */ - protected $storeGroupMock; + private $storeGroupMock; /** * @var MockObject */ - protected $subjectMock; + private $subjectMock; + + /** + * @var StoreGroup + */ + private $storeGroupPlugin; protected function setUp(): void { @@ -40,9 +46,11 @@ protected function setUp(): void $this->subjectMock = $this->createMock(Group::class); $this->storeGroupMock = $this->createPartialMock( - \Magento\Store\Model\Group::class, + StoreGroupModel::class, ['getId', 'dataHasChangedFor'] ); + + $this->storeGroupPlugin = new StoreGroup($this->processorMock); } /** @@ -50,14 +58,16 @@ protected function setUp(): void * @param int|null $storeId * @dataProvider storeGroupDataProvider */ - public function testBeforeSave($matcherMethod, $storeId) + public function testAfterSave(string $matcherMethod, ?int $storeId): void { $this->processorMock->expects($this->{$matcherMethod}())->method('markIndexerAsInvalid'); $this->storeGroupMock->expects($this->once())->method('getId')->willReturn($storeId); - $model = new StoreGroup($this->processorMock); - $model->beforeSave($this->subjectMock, $this->storeGroupMock); + $this->assertSame( + $this->subjectMock, + $this->storeGroupPlugin->afterSave($this->subjectMock, $this->subjectMock, $this->storeGroupMock) + ); } /** @@ -65,30 +75,25 @@ public function testBeforeSave($matcherMethod, $storeId) * @param bool $websiteChanged * @dataProvider storeGroupWebsiteDataProvider */ - public function testChangedWebsiteBeforeSave($matcherMethod, $websiteChanged) + public function testAfterSaveChangedWebsite(string $matcherMethod, bool $websiteChanged): void { $this->processorMock->expects($this->{$matcherMethod}())->method('markIndexerAsInvalid'); $this->storeGroupMock->expects($this->once())->method('getId')->willReturn(1); - $this->storeGroupMock->expects( - $this->once() - )->method( - 'dataHasChangedFor' - )->with( - 'root_category_id' - )->willReturn( - $websiteChanged - ); + $this->storeGroupMock->expects($this->once())->method('dataHasChangedFor') + ->with('root_category_id')->willReturn($websiteChanged); - $model = new StoreGroup($this->processorMock); - $model->beforeSave($this->subjectMock, $this->storeGroupMock); + $this->assertSame( + $this->subjectMock, + $this->storeGroupPlugin->afterSave($this->subjectMock, $this->subjectMock, $this->storeGroupMock) + ); } /** * @return array */ - public function storeGroupWebsiteDataProvider() + public function storeGroupWebsiteDataProvider(): array { return [['once', true], ['never', false]]; } @@ -96,7 +101,7 @@ public function storeGroupWebsiteDataProvider() /** * @return array */ - public function storeGroupDataProvider() + public function storeGroupDataProvider(): array { return [['once', null], ['never', 1]]; } diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/Plugin/StoreTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/Plugin/StoreTest.php index 1b74039fa944c..219149a57d361 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/Plugin/StoreTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/Plugin/StoreTest.php @@ -7,7 +7,9 @@ namespace Magento\Catalog\Test\Unit\Model\Indexer\Product\Flat\Plugin; +use Magento\Catalog\Model\Indexer\Product\Flat\Plugin\Store as StorePlugin; use Magento\Catalog\Model\Indexer\Product\Flat\Processor; +use Magento\Store\Model\ResourceModel\Store as StoreResourceModel; use Magento\Store\Model\Store; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; @@ -17,17 +19,22 @@ class StoreTest extends TestCase /** * @var Processor|MockObject */ - protected $processorMock; + private $processorMock; /** * @var Store|MockObject */ - protected $storeMock; + private $storeMock; /** * @var MockObject */ - protected $subjectMock; + private $subjectMock; + + /** + * @var StorePlugin + */ + private $storePlugin; protected function setUp(): void { @@ -36,11 +43,13 @@ protected function setUp(): void ['markIndexerAsInvalid'] ); - $this->subjectMock = $this->createMock(\Magento\Store\Model\ResourceModel\Store::class); + $this->subjectMock = $this->createMock(StoreResourceModel::class); $this->storeMock = $this->createPartialMock( Store::class, ['getId', 'dataHasChangedFor'] ); + + $this->storePlugin = new StorePlugin($this->processorMock); } /** @@ -48,14 +57,16 @@ protected function setUp(): void * @param int|null $storeId * @dataProvider storeDataProvider */ - public function testBeforeSave($matcherMethod, $storeId) + public function testAfterSave(string $matcherMethod, ?int $storeId): void { $this->processorMock->expects($this->{$matcherMethod}())->method('markIndexerAsInvalid'); $this->storeMock->expects($this->once())->method('getId')->willReturn($storeId); - $model = new \Magento\Catalog\Model\Indexer\Product\Flat\Plugin\Store($this->processorMock); - $model->beforeSave($this->subjectMock, $this->storeMock); + $this->assertSame( + $this->subjectMock, + $this->storePlugin->afterSave($this->subjectMock, $this->subjectMock, $this->storeMock) + ); } /** @@ -63,30 +74,25 @@ public function testBeforeSave($matcherMethod, $storeId) * @param bool $storeGroupChanged * @dataProvider storeGroupDataProvider */ - public function testBeforeSaveSwitchStoreGroup($matcherMethod, $storeGroupChanged) + public function testAfterSaveSwitchStoreGroup(string $matcherMethod, bool $storeGroupChanged): void { $this->processorMock->expects($this->{$matcherMethod}())->method('markIndexerAsInvalid'); $this->storeMock->expects($this->once())->method('getId')->willReturn(1); - $this->storeMock->expects( - $this->once() - )->method( - 'dataHasChangedFor' - )->with( - 'group_id' - )->willReturn( - $storeGroupChanged - ); + $this->storeMock->expects($this->once())->method('dataHasChangedFor') + ->with('group_id')->willReturn($storeGroupChanged); - $model = new \Magento\Catalog\Model\Indexer\Product\Flat\Plugin\Store($this->processorMock); - $model->beforeSave($this->subjectMock, $this->storeMock); + $this->assertSame( + $this->subjectMock, + $this->storePlugin->afterSave($this->subjectMock, $this->subjectMock, $this->storeMock) + ); } /** * @return array */ - public function storeGroupDataProvider() + public function storeGroupDataProvider(): array { return [['once', true], ['never', false]]; } @@ -94,7 +100,7 @@ public function storeGroupDataProvider() /** * @return array */ - public function storeDataProvider() + public function storeDataProvider(): array { return [['once', null], ['never', 1]]; } diff --git a/app/code/Magento/CatalogInventory/Model/Indexer/Stock/Plugin/StoreGroup.php b/app/code/Magento/CatalogInventory/Model/Indexer/Stock/Plugin/StoreGroup.php index c171e9bda2612..29a8b1e5404fa 100644 --- a/app/code/Magento/CatalogInventory/Model/Indexer/Stock/Plugin/StoreGroup.php +++ b/app/code/Magento/CatalogInventory/Model/Indexer/Stock/Plugin/StoreGroup.php @@ -3,19 +3,24 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + namespace Magento\CatalogInventory\Model\Indexer\Stock\Plugin; +use Magento\CatalogInventory\Model\Indexer\Stock\Processor; +use Magento\Framework\Model\AbstractModel; +use Magento\Store\Model\ResourceModel\Group; + class StoreGroup { /** - * @var \Magento\CatalogInventory\Model\Indexer\Stock\Processor + * @var Processor */ protected $_indexerProcessor; /** - * @param \Magento\CatalogInventory\Model\Indexer\Stock\Processor $indexerProcessor + * @param Processor $indexerProcessor */ - public function __construct(\Magento\CatalogInventory\Model\Indexer\Stock\Processor $indexerProcessor) + public function __construct(Processor $indexerProcessor) { $this->_indexerProcessor = $indexerProcessor; } @@ -23,18 +28,19 @@ public function __construct(\Magento\CatalogInventory\Model\Indexer\Stock\Proces /** * Before save handler * - * @param \Magento\Store\Model\ResourceModel\Group $subject - * @param \Magento\Framework\Model\AbstractModel $object + * @param Group $subject + * @param Group $result + * @param AbstractModel $object * - * @return void + * @return Group * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function beforeSave( - \Magento\Store\Model\ResourceModel\Group $subject, - \Magento\Framework\Model\AbstractModel $object - ) { - if (!$object->getId() || $object->dataHasChangedFor('website_id')) { + public function afterSave(Group $subject, Group $result, AbstractModel $object) + { + if ($object->isObjectNew() || $object->dataHasChangedFor('website_id')) { $this->_indexerProcessor->markIndexerAsInvalid(); } + + return $result; } } diff --git a/app/code/Magento/CatalogInventory/Test/Unit/Model/Indexer/Stock/Plugin/StoreGroupTest.php b/app/code/Magento/CatalogInventory/Test/Unit/Model/Indexer/Stock/Plugin/StoreGroupTest.php index 9e2b7f29ce0fa..0e2b6b2f329c1 100644 --- a/app/code/Magento/CatalogInventory/Test/Unit/Model/Indexer/Stock/Plugin/StoreGroupTest.php +++ b/app/code/Magento/CatalogInventory/Test/Unit/Model/Indexer/Stock/Plugin/StoreGroupTest.php @@ -12,7 +12,6 @@ use Magento\CatalogInventory\Model\Indexer\Stock\Plugin\StoreGroup; use Magento\CatalogInventory\Model\Indexer\Stock\Processor; -use Magento\Framework\Indexer\IndexerInterface; use Magento\Framework\Model\AbstractModel; use Magento\Store\Model\ResourceModel\Group; use PHPUnit\Framework\MockObject\MockObject; @@ -23,24 +22,24 @@ class StoreGroupTest extends TestCase /** * @var StoreGroup */ - protected $_model; + private $model; /** - * @var IndexerInterface|MockObject + * @var Processor|MockObject */ - protected $_indexerMock; + private $indexerProcessorMock; protected function setUp(): void { - $this->_indexerMock = $this->createMock(Processor::class); - $this->_model = new StoreGroup($this->_indexerMock); + $this->indexerProcessorMock = $this->createMock(Processor::class); + $this->model = new StoreGroup($this->indexerProcessorMock); } /** * @param array $data - * @dataProvider beforeSaveDataProvider + * @dataProvider afterSaveDataProvider */ - public function testBeforeSave(array $data) + public function testAfterSave(array $data): void { $subjectMock = $this->createMock(Group::class); $objectMock = $this->createPartialMock( @@ -55,16 +54,19 @@ public function testBeforeSave(array $data) ->with('website_id') ->willReturn($data['has_website_id_changed']); - $this->_indexerMock->expects($this->once()) + $this->indexerProcessorMock->expects($this->once()) ->method('markIndexerAsInvalid'); - $this->_model->beforeSave($subjectMock, $objectMock); + $this->assertSame( + $subjectMock, + $this->model->afterSave($subjectMock, $subjectMock, $objectMock) + ); } /** * @return array */ - public function beforeSaveDataProvider() + public function afterSaveDataProvider(): array { return [ [ diff --git a/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Plugin/Store/Group.php b/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Plugin/Store/Group.php index 73a79f7c87239..e7bbf72bdd7e3 100644 --- a/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Plugin/Store/Group.php +++ b/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Plugin/Store/Group.php @@ -5,47 +5,29 @@ */ namespace Magento\CatalogSearch\Model\Indexer\Fulltext\Plugin\Store; +use Magento\CatalogSearch\Model\Indexer\Fulltext as FulltextIndexer; use Magento\CatalogSearch\Model\Indexer\Fulltext\Plugin\AbstractPlugin as AbstractIndexerPlugin; -use Magento\Store\Model\ResourceModel\Group as StoreGroupResourceModel; use Magento\Framework\Model\AbstractModel; -use Magento\CatalogSearch\Model\Indexer\Fulltext as FulltextIndexer; +use Magento\Store\Model\ResourceModel\Group as StoreGroupResourceModel; /** * Plugin for Magento\Store\Model\ResourceModel\Group */ class Group extends AbstractIndexerPlugin { - /** - * @var bool - */ - private $needInvalidation; - - /** - * Check if indexer requires invalidation after store group save - * - * @param StoreGroupResourceModel $subject - * @param AbstractModel $group - * @return void - * - * @SuppressWarnings(PHPMD.UnusedFormalParameter) - */ - public function beforeSave(StoreGroupResourceModel $subject, AbstractModel $group) - { - $this->needInvalidation = !$group->isObjectNew() && $group->dataHasChangedFor('website_id'); - } - /** * Invalidate indexer on store group save * * @param StoreGroupResourceModel $subject * @param StoreGroupResourceModel $result + * @param AbstractModel $group * @return StoreGroupResourceModel * * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function afterSave(StoreGroupResourceModel $subject, StoreGroupResourceModel $result) + public function afterSave(StoreGroupResourceModel $subject, StoreGroupResourceModel $result, AbstractModel $group) { - if ($this->needInvalidation) { + if (!$group->isObjectNew() && $group->dataHasChangedFor('website_id')) { $this->indexerRegistry->get(FulltextIndexer::INDEXER_ID)->invalidate(); } diff --git a/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Plugin/Store/View.php b/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Plugin/Store/View.php index 7f0c5fdae6d42..242a4f3f0c36b 100644 --- a/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Plugin/Store/View.php +++ b/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Plugin/Store/View.php @@ -5,47 +5,29 @@ */ namespace Magento\CatalogSearch\Model\Indexer\Fulltext\Plugin\Store; +use Magento\CatalogSearch\Model\Indexer\Fulltext as FulltextIndexer; use Magento\CatalogSearch\Model\Indexer\Fulltext\Plugin\AbstractPlugin as AbstractIndexerPlugin; -use Magento\Store\Model\ResourceModel\Store as StoreResourceModel; use Magento\Framework\Model\AbstractModel; -use Magento\CatalogSearch\Model\Indexer\Fulltext as FulltextIndexer; +use Magento\Store\Model\ResourceModel\Store as StoreResourceModel; /** * Plugin for Magento\Store\Model\ResourceModel\Store */ class View extends AbstractIndexerPlugin { - /** - * @var bool - */ - private $needInvalidation; - - /** - * Check if indexer requires invalidation after store view save - * - * @param StoreResourceModel $subject - * @param AbstractModel $store - * @return void - * - * @SuppressWarnings(PHPMD.UnusedFormalParameter) - */ - public function beforeSave(StoreResourceModel $subject, AbstractModel $store) - { - $this->needInvalidation = $store->isObjectNew(); - } - /** * Invalidate indexer on store view save * * @param StoreResourceModel $subject * @param StoreResourceModel $result + * @param AbstractModel $store * @return StoreResourceModel * * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function afterSave(StoreResourceModel $subject, StoreResourceModel $result) + public function afterSave(StoreResourceModel $subject, StoreResourceModel $result, AbstractModel $store) { - if ($this->needInvalidation) { + if ($store->isObjectNew()) { $this->indexerRegistry->get(FulltextIndexer::INDEXER_ID)->invalidate(); } diff --git a/app/code/Magento/CatalogSearch/Test/Unit/Model/Indexer/Fulltext/Plugin/Store/GroupTest.php b/app/code/Magento/CatalogSearch/Test/Unit/Model/Indexer/Fulltext/Plugin/Store/GroupTest.php index b4a27a4350131..302dd0f1e2684 100644 --- a/app/code/Magento/CatalogSearch/Test/Unit/Model/Indexer/Fulltext/Plugin/Store/GroupTest.php +++ b/app/code/Magento/CatalogSearch/Test/Unit/Model/Indexer/Fulltext/Plugin/Store/GroupTest.php @@ -11,7 +11,6 @@ use Magento\CatalogSearch\Model\Indexer\Fulltext\Plugin\Store\Group as StoreGroupIndexerPlugin; use Magento\Framework\Indexer\IndexerInterface; use Magento\Framework\Indexer\IndexerRegistry; -use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper; use Magento\Store\Model\Group as StoreGroup; use Magento\Store\Model\ResourceModel\Group as StoreGroupResourceModel; use PHPUnit\Framework\MockObject\MockObject; @@ -24,11 +23,6 @@ class GroupTest extends TestCase */ private $plugin; - /** - * @var ObjectManagerHelper - */ - private $objectManagerHelper; - /** * @var IndexerRegistry|MockObject */ @@ -64,11 +58,7 @@ protected function setUp(): void ->setMethods(['dataHasChangedFor', 'isObjectNew']) ->getMock(); - $this->objectManagerHelper = new ObjectManagerHelper($this); - $this->plugin = $this->objectManagerHelper->getObject( - StoreGroupIndexerPlugin::class, - ['indexerRegistry' => $this->indexerRegistryMock] - ); + $this->plugin = new StoreGroupIndexerPlugin($this->indexerRegistryMock); } /** @@ -76,9 +66,9 @@ protected function setUp(): void * @param bool $websiteChanged * @param int $invalidateCounter * @return void - * @dataProvider beforeAfterSaveDataProvider + * @dataProvider afterSaveDataProvider */ - public function testBeforeAfterSave($isObjectNew, $websiteChanged, $invalidateCounter) + public function testAfterSave(bool $isObjectNew, bool $websiteChanged, int $invalidateCounter): void { $this->prepareIndexer($invalidateCounter); $this->storeGroupMock->expects(static::any()) @@ -91,14 +81,16 @@ public function testBeforeAfterSave($isObjectNew, $websiteChanged, $invalidateCo $this->indexerMock->expects(static::exactly($invalidateCounter)) ->method('invalidate'); - $this->plugin->beforeSave($this->subjectMock, $this->storeGroupMock); - $this->assertSame($this->subjectMock, $this->plugin->afterSave($this->subjectMock, $this->subjectMock)); + $this->assertSame( + $this->subjectMock, + $this->plugin->afterSave($this->subjectMock, $this->subjectMock, $this->storeGroupMock) + ); } /** * @return array */ - public function beforeAfterSaveDataProvider() + public function afterSaveDataProvider(): array { return [ [false, false, 0], @@ -108,13 +100,16 @@ public function beforeAfterSaveDataProvider() ]; } - public function testAfterDelete() + public function testAfterDelete(): void { $this->prepareIndexer(1); $this->indexerMock->expects(static::once()) ->method('invalidate'); - $this->assertSame($this->subjectMock, $this->plugin->afterDelete($this->subjectMock, $this->subjectMock)); + $this->assertSame( + $this->subjectMock, + $this->plugin->afterDelete($this->subjectMock, $this->subjectMock) + ); } /** @@ -123,7 +118,7 @@ public function testAfterDelete() * @param int $invalidateCounter * @return void */ - private function prepareIndexer($invalidateCounter) + private function prepareIndexer(int $invalidateCounter): void { $this->indexerRegistryMock->expects(static::exactly($invalidateCounter)) ->method('get') diff --git a/app/code/Magento/CatalogSearch/Test/Unit/Model/Indexer/Fulltext/Plugin/Store/ViewTest.php b/app/code/Magento/CatalogSearch/Test/Unit/Model/Indexer/Fulltext/Plugin/Store/ViewTest.php index f778c9340cbd7..23e1c44c5f7c8 100644 --- a/app/code/Magento/CatalogSearch/Test/Unit/Model/Indexer/Fulltext/Plugin/Store/ViewTest.php +++ b/app/code/Magento/CatalogSearch/Test/Unit/Model/Indexer/Fulltext/Plugin/Store/ViewTest.php @@ -11,7 +11,6 @@ use Magento\CatalogSearch\Model\Indexer\Fulltext\Plugin\Store\View as StoreViewIndexerPlugin; use Magento\Framework\Indexer\IndexerInterface; use Magento\Framework\Indexer\IndexerRegistry; -use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper; use Magento\Store\Model\ResourceModel\Store as StoreResourceModel; use Magento\Store\Model\Store; use PHPUnit\Framework\MockObject\MockObject; @@ -24,11 +23,6 @@ class ViewTest extends TestCase */ private $plugin; - /** - * @var ObjectManagerHelper - */ - private $objectManagerHelper; - /** * @var IndexerRegistry|MockObject */ @@ -64,20 +58,16 @@ protected function setUp(): void ->setMethods(['isObjectNew']) ->getMock(); - $this->objectManagerHelper = new ObjectManagerHelper($this); - $this->plugin = $this->objectManagerHelper->getObject( - StoreViewIndexerPlugin::class, - ['indexerRegistry' => $this->indexerRegistryMock] - ); + $this->plugin = new StoreViewIndexerPlugin($this->indexerRegistryMock); } /** * @param bool $isObjectNew * @param int $invalidateCounter * - * @dataProvider beforeAfterSaveDataProvider + * @dataProvider afterSaveDataProvider */ - public function testBeforeAfterSave($isObjectNew, $invalidateCounter) + public function testAfterSave(bool $isObjectNew, int $invalidateCounter): void { $this->prepareIndexer($invalidateCounter); $this->storeMock->expects(static::once()) @@ -86,14 +76,16 @@ public function testBeforeAfterSave($isObjectNew, $invalidateCounter) $this->indexerMock->expects(static::exactly($invalidateCounter)) ->method('invalidate'); - $this->plugin->beforeSave($this->subjectMock, $this->storeMock); - $this->assertSame($this->subjectMock, $this->plugin->afterSave($this->subjectMock, $this->subjectMock)); + $this->assertSame( + $this->subjectMock, + $this->plugin->afterSave($this->subjectMock, $this->subjectMock, $this->storeMock) + ); } /** * @return array */ - public function beforeAfterSaveDataProvider() + public function afterSaveDataProvider(): array { return [ [false, 0], @@ -101,7 +93,7 @@ public function beforeAfterSaveDataProvider() ]; } - public function testAfterDelete() + public function testAfterDelete(): void { $this->prepareIndexer(1); $this->indexerMock->expects(static::once()) @@ -116,7 +108,7 @@ public function testAfterDelete() * @param int $invalidateCounter * @return void */ - private function prepareIndexer($invalidateCounter) + private function prepareIndexer(int $invalidateCounter): void { $this->indexerRegistryMock->expects(static::exactly($invalidateCounter)) ->method('get') diff --git a/app/code/Magento/Theme/Model/Indexer/Design/Config/Plugin/Store.php b/app/code/Magento/Theme/Model/Indexer/Design/Config/Plugin/Store.php index ca4a238fd1ff4..18ce1be2e68d1 100644 --- a/app/code/Magento/Theme/Model/Indexer/Design/Config/Plugin/Store.php +++ b/app/code/Magento/Theme/Model/Indexer/Design/Config/Plugin/Store.php @@ -6,7 +6,7 @@ namespace Magento\Theme\Model\Indexer\Design\Config\Plugin; use Magento\Framework\Indexer\IndexerRegistry; -use Magento\Store\Model\Store as StoreStore; +use Magento\Store\Model\Store as StoreModel; use Magento\Theme\Model\Data\Design\Config; class Store @@ -19,42 +19,41 @@ class Store /** * @param IndexerRegistry $indexerRegistry */ - public function __construct( - IndexerRegistry $indexerRegistry - ) { + public function __construct(IndexerRegistry $indexerRegistry) + { $this->indexerRegistry = $indexerRegistry; } /** * Invalidate design config grid indexer on store creation * - * @param StoreStore $subject - * @param \Closure $proceed - * @return StoreStore + * @param StoreModel $subject + * @param StoreModel $result + * @return StoreModel * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function aroundSave(StoreStore $subject, \Closure $proceed) + public function afterSave(StoreModel $subject, StoreModel $result) { - $isObjectNew = $subject->getId() == 0; - $result = $proceed(); - if ($isObjectNew) { + if ($result->isObjectNew()) { $this->indexerRegistry->get(Config::DESIGN_CONFIG_GRID_INDEXER_ID)->invalidate(); } + return $result; } /** * Invalidate design config grid indexer on store removal * - * @param StoreStore $subject - * @param StoreStore $result - * @return StoreStore + * @param StoreModel $subject + * @param StoreModel $result + * @return StoreModel * * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function afterDelete(StoreStore $subject, $result) + public function afterDelete(StoreModel $subject, $result) { $this->indexerRegistry->get(Config::DESIGN_CONFIG_GRID_INDEXER_ID)->invalidate(); + return $result; } } diff --git a/app/code/Magento/Theme/Test/Unit/Model/Indexer/Design/Config/Plugin/StoreTest.php b/app/code/Magento/Theme/Test/Unit/Model/Indexer/Design/Config/Plugin/StoreTest.php index b61246cc7583f..1d48c0fe04e7a 100644 --- a/app/code/Magento/Theme/Test/Unit/Model/Indexer/Design/Config/Plugin/StoreTest.php +++ b/app/code/Magento/Theme/Test/Unit/Model/Indexer/Design/Config/Plugin/StoreTest.php @@ -9,6 +9,7 @@ use Magento\Framework\Indexer\IndexerInterface; use Magento\Framework\Indexer\IndexerRegistry; +use Magento\Store\Model\Store as StoreModel; use Magento\Theme\Model\Data\Design\Config; use Magento\Theme\Model\Indexer\Design\Config\Plugin\Store; use PHPUnit\Framework\MockObject\MockObject; @@ -17,10 +18,10 @@ class StoreTest extends TestCase { /** @var Store */ - protected $model; + private $model; /** @var IndexerRegistry|MockObject */ - protected $indexerRegistryMock; + private $indexerRegistryMock; protected function setUp(): void { @@ -31,21 +32,15 @@ protected function setUp(): void $this->model = new Store($this->indexerRegistryMock); } - public function testAroundSave() + public function testAfterSave(): void { - $subjectId = 0; - - /** @var \Magento\Store\Model\Store|MockObject $subjectMock */ - $subjectMock = $this->getMockBuilder(\Magento\Store\Model\Store::class) + /** @var StoreModel|MockObject $subjectMock */ + $subjectMock = $this->getMockBuilder(StoreModel::class) ->disableOriginalConstructor() ->getMock(); $subjectMock->expects($this->once()) - ->method('getId') - ->willReturn($subjectId); - - $closureMock = function () use ($subjectMock) { - return $subjectMock; - }; + ->method('isObjectNew') + ->willReturn(true); /** @var IndexerInterface|MockObject $indexerMock */ $indexerMock = $this->getMockBuilder(IndexerInterface::class) @@ -58,35 +53,29 @@ public function testAroundSave() ->with(Config::DESIGN_CONFIG_GRID_INDEXER_ID) ->willReturn($indexerMock); - $this->assertEquals($subjectMock, $this->model->aroundSave($subjectMock, $closureMock)); + $this->assertSame($subjectMock, $this->model->afterSave($subjectMock, $subjectMock)); } - public function testAroundSaveWithExistentSubject() + public function testAfterSaveWithExistentSubject(): void { - $subjectId = 1; - - /** @var \Magento\Store\Model\Store|MockObject $subjectMock */ - $subjectMock = $this->getMockBuilder(\Magento\Store\Model\Store::class) + /** @var StoreModel|MockObject $subjectMock */ + $subjectMock = $this->getMockBuilder(StoreModel::class) ->disableOriginalConstructor() ->getMock(); $subjectMock->expects($this->once()) - ->method('getId') - ->willReturn($subjectId); - - $closureMock = function () use ($subjectMock) { - return $subjectMock; - }; + ->method('isObjectNew') + ->willReturn(false); $this->indexerRegistryMock->expects($this->never()) ->method('get'); - $this->assertEquals($subjectMock, $this->model->aroundSave($subjectMock, $closureMock)); + $this->assertSame($subjectMock, $this->model->afterSave($subjectMock, $subjectMock)); } - public function testAfterDelete() + public function testAfterDelete(): void { - /** @var \Magento\Store\Model\Store|MockObject $subjectMock */ - $subjectMock = $this->getMockBuilder(\Magento\Store\Model\Store::class) + /** @var StoreModel|MockObject $subjectMock */ + $subjectMock = $this->getMockBuilder(StoreModel::class) ->disableOriginalConstructor() ->getMock(); @@ -101,6 +90,6 @@ public function testAfterDelete() ->with(Config::DESIGN_CONFIG_GRID_INDEXER_ID) ->willReturn($indexerMock); - $this->assertEquals($subjectMock, $this->model->afterDelete($subjectMock, $subjectMock)); + $this->assertSame($subjectMock, $this->model->afterDelete($subjectMock, $subjectMock)); } }