From 817bc5fb91dff7249b706c06239d2808ddc17558 Mon Sep 17 00:00:00 2001 From: magento-engcom-team Date: Thu, 9 Nov 2017 16:09:57 +0200 Subject: [PATCH 1/8] 12110: Missing cascade into attribute set deletion. --- .../RemoveProductUrlRewrite.php | 83 +++++++++++++ .../RemoveProductUrlRewriteTest.php | 113 ++++++++++++++++++ .../CatalogUrlRewrite/etc/adminhtml/di.xml | 3 + .../RemoveProductUrlRewriteTest.php | 62 ++++++++++ .../_files/attribute_set_with_product.php | 11 ++ 5 files changed, 272 insertions(+) create mode 100644 app/code/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewrite.php create mode 100644 app/code/Magento/CatalogUrlRewrite/Test/Unit/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php create mode 100644 dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php create mode 100644 dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product.php diff --git a/app/code/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewrite.php b/app/code/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewrite.php new file mode 100644 index 0000000000000..82a25531757a2 --- /dev/null +++ b/app/code/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewrite.php @@ -0,0 +1,83 @@ +urlPersist = $urlPersist; + $this->collectionFactory = $collectionFactory; + } + + /** + * Remove url rewrites for products with given attribute set. + * + * @param AttributeSetRepositoryInterface $subject + * @param \Closure $proceed + * @param AttributeSetInterface $attributeSet + * @return bool + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + */ + public function aroundDelete( + AttributeSetRepositoryInterface $subject, + \Closure $proceed, + AttributeSetInterface $attributeSet + ) { + /** @var Collection $productCollection */ + $productCollection = $this->collectionFactory->create(); + $productCollection->addFieldToFilter('attribute_set_id', ['eq' => $attributeSet->getId()]); + $productIds = $productCollection->getAllIds(); + $result = $proceed($attributeSet); + if (!empty($productIds)) { + $productIds = array_chunk($productIds, $this->chunkSize); + foreach ($productIds as $ids) { + $this->urlPersist->deleteByData( + [ + UrlRewrite::ENTITY_ID => $ids, + UrlRewrite::ENTITY_TYPE => ProductUrlRewriteGenerator::ENTITY_TYPE, + ] + ); + } + } + + return $result; + } +} diff --git a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php new file mode 100644 index 0000000000000..cf2337bf7c76c --- /dev/null +++ b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php @@ -0,0 +1,113 @@ +collectionFactory = $this->getMockBuilder(CollectionFactory::class) + ->disableOriginalConstructor() + ->setMethods(['create']) + ->getMock(); + $this->urlPersist = $this->getMockBuilder(UrlPersistInterface::class) + ->disableOriginalConstructor() + ->getMockForAbstractClass(); + $this->testSubject = $objectManager->getObject( + RemoveProductUrlRewrite::class, + [ + 'collectionFactory' => $this->collectionFactory, + 'urlPersist' => $this->urlPersist, + ] + ); + } + + /** + * Test plugin will delete all url rewrites for products with given attribute set. + */ + public function testAroundDelete() + { + $attributeSetId = '1'; + $productId = '1'; + + /** @var Collection|\PHPUnit_Framework_MockObject_MockObject $collection */ + $collection = $this->getMockBuilder(Collection::class) + ->disableOriginalConstructor() + ->getMock(); + $collection->expects(self::once()) + ->method('addFieldToFilter') + ->with(self::identicalTo('attribute_set_id'), self::identicalTo(['eq' => $attributeSetId])); + $collection->expects(self::once()) + ->method('getAllIds') + ->willReturn([$productId]); + + $this->collectionFactory->expects(self::once()) + ->method('create') + ->willReturn($collection); + + $this->urlPersist->expects(self::once()) + ->method('deleteByData') + ->with(self::identicalTo( + [ + UrlRewrite::ENTITY_ID => [$productId], + UrlRewrite::ENTITY_TYPE => ProductUrlRewriteGenerator::ENTITY_TYPE, + ] + )); + /** @var AttributeSetRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject $attributeSetRepository */ + $attributeSetRepository = $this->getMockBuilder(AttributeSetRepositoryInterface::class) + ->disableOriginalConstructor() + ->getMockForAbstractClass(); + + $proceed = function () { + return true; + }; + + /** @var AttributeSetInterface|\PHPUnit_Framework_MockObject_MockObject $attributeSet */ + $attributeSet = $this->getMockBuilder(AttributeSetInterface::class) + ->setMethods(['getId']) + ->disableOriginalConstructor() + ->getMockForAbstractClass(); + $attributeSet->expects(self::once()) + ->method('getId') + ->willReturn($attributeSetId); + + $this->testSubject->aroundDelete($attributeSetRepository, $proceed, $attributeSet); + } +} diff --git a/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml b/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml index 32ecc97d0f85f..ebac217df5fcb 100644 --- a/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml +++ b/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml @@ -25,6 +25,9 @@ + + + diff --git a/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php b/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php new file mode 100644 index 0000000000000..3791bb7894ec4 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php @@ -0,0 +1,62 @@ +get(PluginList::class) + ->get(AttributeSetRepositoryInterface::class, []); + self::assertSame(RemoveProductUrlRewrite::class, $pluginInfo['attribute_set_delete_plugin']['instance']); + } + + /** + * Test url rewrite will be removed for product with given attribute set, if one will be deleted. + * + * @magentoDataFixture Magento/CatalogUrlRewrite/_files/attribute_set_with_product.php + * @magentoDbIsolation disabled + */ + public function testAroundDelete() + { + $attributeSet = Bootstrap::getObjectManager()->get(Set::class); + $attributeSet->load('empty_attribute_set', 'attribute_set_name'); + + $productRepository = Bootstrap::getObjectManager()->get(ProductRepositoryInterface::class); + $product = $productRepository->get('simple'); + + $urlRewriteCollection = Bootstrap::getObjectManager()->get(UrlRewriteCollectionFactory::class)->create(); + $urlRewriteCollection->addFieldToFilter('entity_type', 'product'); + $urlRewriteCollection->addFieldToFilter('entity_id', $product->getId()); + + self::assertSame(1, $urlRewriteCollection->getSize()); + + $attributeSetRepository = Bootstrap::getObjectManager()->get(AttributeSetRepositoryInterface::class); + $attributeSetRepository->deleteById($attributeSet->getAttributeSetId()); + + $urlRewriteCollection = Bootstrap::getObjectManager()->get(UrlRewriteCollectionFactory::class)->create(); + $urlRewriteCollection->addFieldToFilter('entity_type', 'product'); + $urlRewriteCollection->addFieldToFilter('entity_id', $product->getId()); + + self::assertSame(0, $urlRewriteCollection->getSize()); + } +} diff --git a/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product.php b/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product.php new file mode 100644 index 0000000000000..95f277c7124bd --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product.php @@ -0,0 +1,11 @@ +setAttributeSetId($attributeSet->getId()); +$product->save(); From 5cd2757494e5d685e685e12449f7047f56143e60 Mon Sep 17 00:00:00 2001 From: magento-engcom-team Date: Thu, 9 Nov 2017 18:21:24 +0200 Subject: [PATCH 2/8] 12110: Missing cascade into attribute set deletion. --- .../_files/attribute_set_with_product_rollback.php | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product_rollback.php diff --git a/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product_rollback.php b/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product_rollback.php new file mode 100644 index 0000000000000..53d35463f1ac4 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product_rollback.php @@ -0,0 +1,9 @@ + Date: Fri, 10 Nov 2017 10:27:55 +0200 Subject: [PATCH 3/8] 12110: Missing cascade into attribute set deletion. --- .../Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php | 2 +- .../_files/attribute_set_with_product_rollback.php | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php b/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php index 3791bb7894ec4..da189b85932c7 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php +++ b/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php @@ -34,7 +34,7 @@ public function testRemoveProductUrlRewriteIsRegistered() * Test url rewrite will be removed for product with given attribute set, if one will be deleted. * * @magentoDataFixture Magento/CatalogUrlRewrite/_files/attribute_set_with_product.php - * @magentoDbIsolation disabled + * @magentoDbIsolation enabled */ public function testAroundDelete() { diff --git a/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product_rollback.php b/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product_rollback.php index 53d35463f1ac4..cd579bdb76f57 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product_rollback.php +++ b/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product_rollback.php @@ -6,4 +6,3 @@ require __DIR__ . '/../../Catalog/_files/product_simple_rollback.php'; require __DIR__ . '/../../Eav/_files/empty_attribute_set_rollback.php'; - From 88f218d372f4654cebbe248f8e0a014e916c68ab Mon Sep 17 00:00:00 2001 From: magento-engcom-team Date: Fri, 1 Dec 2017 11:50:19 +0200 Subject: [PATCH 4/8] 12110: Missing cascade into attribute set deletion. --- .../RemoveProducts.php} | 42 ++++--------------- .../Magento/Catalog/Setup/UpgradeSchema.php | 22 ++++++++++ .../RemoveProductsTest.php} | 38 ++++------------- app/code/Magento/Catalog/etc/adminhtml/di.xml | 3 ++ app/code/Magento/Catalog/etc/module.xml | 2 +- .../CatalogUrlRewrite/etc/adminhtml/di.xml | 3 -- .../RemoveProductsTest.php} | 20 ++++++--- .../_files/attribute_set_with_product.php | 0 .../attribute_set_with_product_rollback.php | 0 9 files changed, 57 insertions(+), 73 deletions(-) rename app/code/Magento/{CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewrite.php => Catalog/Plugin/Model/AttributeSetRepository/RemoveProducts.php} (50%) rename app/code/Magento/{CatalogUrlRewrite/Test/Unit/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php => Catalog/Test/Unit/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php} (65%) rename dev/tests/integration/testsuite/Magento/{CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php => Catalog/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php} (67%) rename dev/tests/integration/testsuite/Magento/{CatalogUrlRewrite => Catalog}/_files/attribute_set_with_product.php (100%) rename dev/tests/integration/testsuite/Magento/{CatalogUrlRewrite => Catalog}/_files/attribute_set_with_product_rollback.php (100%) diff --git a/app/code/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewrite.php b/app/code/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProducts.php similarity index 50% rename from app/code/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewrite.php rename to app/code/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProducts.php index 82a25531757a2..bc6de17f90cfe 100644 --- a/app/code/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewrite.php +++ b/app/code/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProducts.php @@ -4,50 +4,37 @@ * See COPYING.txt for license details. */ -namespace Magento\CatalogUrlRewrite\Plugin\Eav\AttributeSetRepository; +namespace Magento\Catalog\Plugin\Model\AttributeSetRepository; use Magento\Catalog\Model\ResourceModel\Product\Collection; use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory; -use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator; use Magento\Eav\Api\AttributeSetRepositoryInterface; use Magento\Eav\Api\Data\AttributeSetInterface; -use Magento\UrlRewrite\Model\UrlPersistInterface; -use Magento\UrlRewrite\Service\V1\Data\UrlRewrite; /** - * Remove url rewrites for products with given attribute set. + * Delete related products after attribute set successfully removed. */ -class RemoveProductUrlRewrite +class RemoveProducts { /** - * @var int - */ - private $chunkSize = 1000; - - /** - * @var UrlPersistInterface - */ - private $urlPersist; - - /** + * Retrieve products related to specific attribute set. + * * @var CollectionFactory */ private $collectionFactory; /** - * ProductUrlRewriteProcessor constructor. + * RemoveProducts constructor. * - * @param UrlPersistInterface $urlPersist * @param CollectionFactory $collectionFactory */ - public function __construct(UrlPersistInterface $urlPersist, CollectionFactory $collectionFactory) + public function __construct(CollectionFactory $collectionFactory) { - $this->urlPersist = $urlPersist; $this->collectionFactory = $collectionFactory; } /** - * Remove url rewrites for products with given attribute set. + * Delete related to specific attribute set products, if attribute set was removed successfully. * * @param AttributeSetRepositoryInterface $subject * @param \Closure $proceed @@ -64,19 +51,8 @@ public function aroundDelete( /** @var Collection $productCollection */ $productCollection = $this->collectionFactory->create(); $productCollection->addFieldToFilter('attribute_set_id', ['eq' => $attributeSet->getId()]); - $productIds = $productCollection->getAllIds(); $result = $proceed($attributeSet); - if (!empty($productIds)) { - $productIds = array_chunk($productIds, $this->chunkSize); - foreach ($productIds as $ids) { - $this->urlPersist->deleteByData( - [ - UrlRewrite::ENTITY_ID => $ids, - UrlRewrite::ENTITY_TYPE => ProductUrlRewriteGenerator::ENTITY_TYPE, - ] - ); - } - } + $productCollection->delete(); return $result; } diff --git a/app/code/Magento/Catalog/Setup/UpgradeSchema.php b/app/code/Magento/Catalog/Setup/UpgradeSchema.php index 616bee43de00e..ae09ff1113608 100755 --- a/app/code/Magento/Catalog/Setup/UpgradeSchema.php +++ b/app/code/Magento/Catalog/Setup/UpgradeSchema.php @@ -126,6 +126,10 @@ public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $con $this->fixCustomerGroupIdColumn($setup); } + if (version_compare($context->getVersion(), '2.2.4', '<')) { + $this->removeAttributeSetRelation($setup); + } + $setup->endSetup(); } @@ -699,4 +703,22 @@ private function addReplicaTable(SchemaSetupInterface $setup, $existingTable, $r ); $setup->getConnection()->query($sql); } + + /** + * Remove foreign key between catalog_product_entity and eav_attribute_set tables. + * Drop foreign key to delegate cascade on delete to plugin. + * @see \Magento\Catalog\Plugin\Model\AttributeSetRepository\RemoveProducts + * + * @param SchemaSetupInterface $setup + * @return void + */ + private function removeAttributeSetRelation(SchemaSetupInterface $setup) + { + $productTable = $setup->getTable('catalog_product_entity'); + $attributeSetTable = $setup->getTable('eav_attribute_set'); + $setup->getConnection()->dropForeignKey( + $productTable, + $setup->getFkName($productTable, 'attribute_set_id', $attributeSetTable, 'attribute_set_id') + ); + } } diff --git a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php b/app/code/Magento/Catalog/Test/Unit/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php similarity index 65% rename from app/code/Magento/CatalogUrlRewrite/Test/Unit/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php rename to app/code/Magento/Catalog/Test/Unit/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php index cf2337bf7c76c..a8eb757646e74 100644 --- a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php @@ -4,26 +4,23 @@ * See COPYING.txt for license details. */ -namespace Magento\CatalogUrlRewrite\Test\Unit\Plugin\Eav\AttributeSetRepository; +namespace Magento\Catalog\Test\Unit\Plugin\Model\AttributeSetRepository; use Magento\Catalog\Model\ResourceModel\Product\Collection; use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory; -use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator; -use Magento\CatalogUrlRewrite\Plugin\Eav\AttributeSetRepository\RemoveProductUrlRewrite; +use Magento\Catalog\Plugin\Model\AttributeSetRepository\RemoveProducts; use Magento\Eav\Api\AttributeSetRepositoryInterface; use Magento\Eav\Api\Data\AttributeSetInterface; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; -use Magento\UrlRewrite\Model\UrlPersistInterface; -use Magento\UrlRewrite\Service\V1\Data\UrlRewrite; use PHPUnit\Framework\TestCase; /** - * Provide tests for RemoveProductUrlRewrite plugin. + * Provide tests for RemoveProducts plugin. */ -class RemoveProductUrlRewriteTest extends TestCase +class RemoveProductsTest extends TestCase { /** - * @var RemoveProductUrlRewrite + * @var RemoveProducts */ private $testSubject; @@ -32,11 +29,6 @@ class RemoveProductUrlRewriteTest extends TestCase */ private $collectionFactory; - /** - * @var UrlPersistInterface|\PHPUnit_Framework_MockObject_MockObject - */ - private $urlPersist; - /** * @inheritdoc */ @@ -47,25 +39,20 @@ protected function setUp() ->disableOriginalConstructor() ->setMethods(['create']) ->getMock(); - $this->urlPersist = $this->getMockBuilder(UrlPersistInterface::class) - ->disableOriginalConstructor() - ->getMockForAbstractClass(); $this->testSubject = $objectManager->getObject( - RemoveProductUrlRewrite::class, + RemoveProducts::class, [ 'collectionFactory' => $this->collectionFactory, - 'urlPersist' => $this->urlPersist, ] ); } /** - * Test plugin will delete all url rewrites for products with given attribute set. + * Test plugin will delete all related products for given attribute set. */ public function testAroundDelete() { $attributeSetId = '1'; - $productId = '1'; /** @var Collection|\PHPUnit_Framework_MockObject_MockObject $collection */ $collection = $this->getMockBuilder(Collection::class) @@ -75,21 +62,12 @@ public function testAroundDelete() ->method('addFieldToFilter') ->with(self::identicalTo('attribute_set_id'), self::identicalTo(['eq' => $attributeSetId])); $collection->expects(self::once()) - ->method('getAllIds') - ->willReturn([$productId]); + ->method('delete'); $this->collectionFactory->expects(self::once()) ->method('create') ->willReturn($collection); - $this->urlPersist->expects(self::once()) - ->method('deleteByData') - ->with(self::identicalTo( - [ - UrlRewrite::ENTITY_ID => [$productId], - UrlRewrite::ENTITY_TYPE => ProductUrlRewriteGenerator::ENTITY_TYPE, - ] - )); /** @var AttributeSetRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject $attributeSetRepository */ $attributeSetRepository = $this->getMockBuilder(AttributeSetRepositoryInterface::class) ->disableOriginalConstructor() diff --git a/app/code/Magento/Catalog/etc/adminhtml/di.xml b/app/code/Magento/Catalog/etc/adminhtml/di.xml index b97e6fc1aa318..34d089580906f 100644 --- a/app/code/Magento/Catalog/etc/adminhtml/di.xml +++ b/app/code/Magento/Catalog/etc/adminhtml/di.xml @@ -184,4 +184,7 @@ Magento\Catalog\Model\Attribute\ScopeOverriddenValue + + + diff --git a/app/code/Magento/Catalog/etc/module.xml b/app/code/Magento/Catalog/etc/module.xml index 18671a32bb4fb..26ed173420adb 100644 --- a/app/code/Magento/Catalog/etc/module.xml +++ b/app/code/Magento/Catalog/etc/module.xml @@ -6,7 +6,7 @@ */ --> - + diff --git a/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml b/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml index ebac217df5fcb..32ecc97d0f85f 100644 --- a/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml +++ b/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml @@ -25,9 +25,6 @@ - - - diff --git a/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php similarity index 67% rename from dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php rename to dev/tests/integration/testsuite/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php index da189b85932c7..724e2e62f230d 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/Plugin/Eav/AttributeSetRepository/RemoveProductUrlRewriteTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php @@ -7,6 +7,8 @@ namespace Magento\CatalogUrlRewrite\Plugin\Eav\AttributeSetRepository; use Magento\Catalog\Api\ProductRepositoryInterface; +use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory; +use Magento\Catalog\Plugin\Model\AttributeSetRepository\RemoveProducts; use Magento\Eav\Api\AttributeSetRepositoryInterface; use Magento\Eav\Model\Entity\Attribute\Set; use Magento\TestFramework\Helper\Bootstrap; @@ -15,25 +17,25 @@ use PHPUnit\Framework\TestCase; /** - * Provide tests for RemoveProductUrlRewrite plugin. + * Provide tests for RemoveProducts plugin. * @magentoAppArea adminhtml */ -class RemoveProductUrlRewriteTest extends TestCase +class RemoveProductsTest extends TestCase { /** * @return void */ - public function testRemoveProductUrlRewriteIsRegistered() + public function testRemoveProductsIsRegistered() { $pluginInfo = Bootstrap::getObjectManager()->get(PluginList::class) ->get(AttributeSetRepositoryInterface::class, []); - self::assertSame(RemoveProductUrlRewrite::class, $pluginInfo['attribute_set_delete_plugin']['instance']); + self::assertSame(RemoveProducts::class, $pluginInfo['remove_products']['instance']); } /** - * Test url rewrite will be removed for product with given attribute set, if one will be deleted. + * Test related to given attribute set products will be removed, if attribute set will be deleted. * - * @magentoDataFixture Magento/CatalogUrlRewrite/_files/attribute_set_with_product.php + * @magentoDataFixture Magento/Catalog/_files/attribute_set_with_product.php * @magentoDbIsolation enabled */ public function testAroundDelete() @@ -44,19 +46,25 @@ public function testAroundDelete() $productRepository = Bootstrap::getObjectManager()->get(ProductRepositoryInterface::class); $product = $productRepository->get('simple'); + $productCollection = Bootstrap::getObjectManager()->get(CollectionFactory::class)->create(); + $productCollection->addIdFilter($product->getId()); $urlRewriteCollection = Bootstrap::getObjectManager()->get(UrlRewriteCollectionFactory::class)->create(); $urlRewriteCollection->addFieldToFilter('entity_type', 'product'); $urlRewriteCollection->addFieldToFilter('entity_id', $product->getId()); self::assertSame(1, $urlRewriteCollection->getSize()); + self::assertSame(1, $productCollection->getSize()); $attributeSetRepository = Bootstrap::getObjectManager()->get(AttributeSetRepositoryInterface::class); $attributeSetRepository->deleteById($attributeSet->getAttributeSetId()); + $productCollection = Bootstrap::getObjectManager()->get(CollectionFactory::class)->create(); + $productCollection->addIdFilter($product->getId()); $urlRewriteCollection = Bootstrap::getObjectManager()->get(UrlRewriteCollectionFactory::class)->create(); $urlRewriteCollection->addFieldToFilter('entity_type', 'product'); $urlRewriteCollection->addFieldToFilter('entity_id', $product->getId()); self::assertSame(0, $urlRewriteCollection->getSize()); + self::assertSame(0, $productCollection->getSize()); } } diff --git a/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/attribute_set_with_product.php similarity index 100% rename from dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product.php rename to dev/tests/integration/testsuite/Magento/Catalog/_files/attribute_set_with_product.php diff --git a/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product_rollback.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/attribute_set_with_product_rollback.php similarity index 100% rename from dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/attribute_set_with_product_rollback.php rename to dev/tests/integration/testsuite/Magento/Catalog/_files/attribute_set_with_product_rollback.php From dd4dec8618cd4b514df76145681a3aff71f4a1dd Mon Sep 17 00:00:00 2001 From: magento-engcom-team Date: Mon, 4 Dec 2017 11:38:02 +0200 Subject: [PATCH 5/8] 12110: Missing cascade into attribute set deletion. --- app/code/Magento/Catalog/Setup/UpgradeSchema.php | 6 ++---- .../Model/AttributeSetRepository/RemoveProductsTest.php | 4 +--- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/app/code/Magento/Catalog/Setup/UpgradeSchema.php b/app/code/Magento/Catalog/Setup/UpgradeSchema.php index ae09ff1113608..78106e3ff3a26 100755 --- a/app/code/Magento/Catalog/Setup/UpgradeSchema.php +++ b/app/code/Magento/Catalog/Setup/UpgradeSchema.php @@ -714,11 +714,9 @@ private function addReplicaTable(SchemaSetupInterface $setup, $existingTable, $r */ private function removeAttributeSetRelation(SchemaSetupInterface $setup) { - $productTable = $setup->getTable('catalog_product_entity'); - $attributeSetTable = $setup->getTable('eav_attribute_set'); $setup->getConnection()->dropForeignKey( - $productTable, - $setup->getFkName($productTable, 'attribute_set_id', $attributeSetTable, 'attribute_set_id') + $setup->getTable('catalog_product_entity'), + $setup->getFkName('catalog_product_entity', 'attribute_set_id', 'eav_attribute_set', 'attribute_set_id') ); } } diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php index 724e2e62f230d..2896716a01a04 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php @@ -4,11 +4,10 @@ * See COPYING.txt for license details. */ -namespace Magento\CatalogUrlRewrite\Plugin\Eav\AttributeSetRepository; +namespace Magento\Catalog\Plugin\Model\AttributeSetRepository; use Magento\Catalog\Api\ProductRepositoryInterface; use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory; -use Magento\Catalog\Plugin\Model\AttributeSetRepository\RemoveProducts; use Magento\Eav\Api\AttributeSetRepositoryInterface; use Magento\Eav\Model\Entity\Attribute\Set; use Magento\TestFramework\Helper\Bootstrap; @@ -36,7 +35,6 @@ public function testRemoveProductsIsRegistered() * Test related to given attribute set products will be removed, if attribute set will be deleted. * * @magentoDataFixture Magento/Catalog/_files/attribute_set_with_product.php - * @magentoDbIsolation enabled */ public function testAroundDelete() { From 3143bbb0289d82b0da5a6bccdb779802323d670f Mon Sep 17 00:00:00 2001 From: magento-engcom-team Date: Mon, 4 Dec 2017 13:16:08 +0200 Subject: [PATCH 6/8] 12110: Missing cascade into attribute set deletion. --- .../Model/AttributeSetRepository/RemoveProducts.php | 7 +++---- .../Model/AttributeSetRepository/RemoveProductsTest.php | 8 ++------ .../Model/AttributeSetRepository/RemoveProductsTest.php | 2 +- 3 files changed, 6 insertions(+), 11 deletions(-) diff --git a/app/code/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProducts.php b/app/code/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProducts.php index bc6de17f90cfe..342b703ded0a5 100644 --- a/app/code/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProducts.php +++ b/app/code/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProducts.php @@ -37,21 +37,20 @@ public function __construct(CollectionFactory $collectionFactory) * Delete related to specific attribute set products, if attribute set was removed successfully. * * @param AttributeSetRepositoryInterface $subject - * @param \Closure $proceed + * @param bool $result * @param AttributeSetInterface $attributeSet * @return bool * * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function aroundDelete( + public function afterDelete( AttributeSetRepositoryInterface $subject, - \Closure $proceed, + bool $result, AttributeSetInterface $attributeSet ) { /** @var Collection $productCollection */ $productCollection = $this->collectionFactory->create(); $productCollection->addFieldToFilter('attribute_set_id', ['eq' => $attributeSet->getId()]); - $result = $proceed($attributeSet); $productCollection->delete(); return $result; diff --git a/app/code/Magento/Catalog/Test/Unit/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php b/app/code/Magento/Catalog/Test/Unit/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php index a8eb757646e74..712aeba59dffe 100644 --- a/app/code/Magento/Catalog/Test/Unit/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php @@ -50,7 +50,7 @@ protected function setUp() /** * Test plugin will delete all related products for given attribute set. */ - public function testAroundDelete() + public function testAfterDelete() { $attributeSetId = '1'; @@ -73,10 +73,6 @@ public function testAroundDelete() ->disableOriginalConstructor() ->getMockForAbstractClass(); - $proceed = function () { - return true; - }; - /** @var AttributeSetInterface|\PHPUnit_Framework_MockObject_MockObject $attributeSet */ $attributeSet = $this->getMockBuilder(AttributeSetInterface::class) ->setMethods(['getId']) @@ -86,6 +82,6 @@ public function testAroundDelete() ->method('getId') ->willReturn($attributeSetId); - $this->testSubject->aroundDelete($attributeSetRepository, $proceed, $attributeSet); + self::assertTrue($this->testSubject->afterDelete($attributeSetRepository, true, $attributeSet)); } } diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php index 2896716a01a04..4e8eaf70824db 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Plugin/Model/AttributeSetRepository/RemoveProductsTest.php @@ -36,7 +36,7 @@ public function testRemoveProductsIsRegistered() * * @magentoDataFixture Magento/Catalog/_files/attribute_set_with_product.php */ - public function testAroundDelete() + public function testAfterDelete() { $attributeSet = Bootstrap::getObjectManager()->get(Set::class); $attributeSet->load('empty_attribute_set', 'attribute_set_name'); From 9df89df5572afd0c4ee98d04321e57213b063951 Mon Sep 17 00:00:00 2001 From: Stanislav Idolov Date: Mon, 4 Dec 2017 15:05:46 +0200 Subject: [PATCH 7/8] magento/magento2#12167 --- app/code/Magento/Catalog/Setup/UpgradeSchema.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/code/Magento/Catalog/Setup/UpgradeSchema.php b/app/code/Magento/Catalog/Setup/UpgradeSchema.php index 78106e3ff3a26..dfaa6a110e823 100755 --- a/app/code/Magento/Catalog/Setup/UpgradeSchema.php +++ b/app/code/Magento/Catalog/Setup/UpgradeSchema.php @@ -21,6 +21,7 @@ class UpgradeSchema implements UpgradeSchemaInterface /** * {@inheritdoc} * @SuppressWarnings(PHPMD.ExcessiveMethodLength) + * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $context) { From c14e9e36612a40f3daff270a4e321234f8d3377a Mon Sep 17 00:00:00 2001 From: magento-engcom-team Date: Mon, 4 Dec 2017 15:13:49 +0200 Subject: [PATCH 8/8] 12110: Missing cascade into attribute set deletion. --- app/code/Magento/Catalog/Setup/UpgradeSchema.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/code/Magento/Catalog/Setup/UpgradeSchema.php b/app/code/Magento/Catalog/Setup/UpgradeSchema.php index 78106e3ff3a26..d08108d1fc22b 100755 --- a/app/code/Magento/Catalog/Setup/UpgradeSchema.php +++ b/app/code/Magento/Catalog/Setup/UpgradeSchema.php @@ -21,6 +21,8 @@ class UpgradeSchema implements UpgradeSchemaInterface /** * {@inheritdoc} * @SuppressWarnings(PHPMD.ExcessiveMethodLength) + * @SuppressWarnings(PHPMD.CyclomaticComplexity) + * @SuppressWarnings(PHPMD.NPathComplexity) */ public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $context) {