From 7bd5e25d290bf905fbf8254b66bedae01a5c6717 Mon Sep 17 00:00:00 2001 From: Fabian Schmengler Date: Fri, 8 May 2020 15:19:48 +0200 Subject: [PATCH 1/4] Prevent side effect on category objects store_id and url_key on save --- .../CatalogUrlRewrite/Model/CategoryUrlRewriteGenerator.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/code/Magento/CatalogUrlRewrite/Model/CategoryUrlRewriteGenerator.php b/app/code/Magento/CatalogUrlRewrite/Model/CategoryUrlRewriteGenerator.php index a86604672e2b4..5775d6dffee4a 100644 --- a/app/code/Magento/CatalogUrlRewrite/Model/CategoryUrlRewriteGenerator.php +++ b/app/code/Magento/CatalogUrlRewrite/Model/CategoryUrlRewriteGenerator.php @@ -124,6 +124,9 @@ protected function generateForGlobalScope( $mergeDataProvider = clone $this->mergeDataProviderPrototype; $categoryId = $category->getId(); foreach ($category->getStoreIds() as $storeId) { + if ($storeId !== Store::DEFAULT_STORE_ID) { + $category = clone $category; // prevent undesired side effects on original object + } $category->setStoreId($storeId); if (!$this->isGlobalScope($storeId) && $this->isOverrideUrlsForStore($storeId, $categoryId, $overrideStoreUrls) From 8bcd2fa8839cd3f0fb659d49ee1590b664b9687c Mon Sep 17 00:00:00 2001 From: Fabian Schmengler Date: Fri, 8 May 2020 15:54:36 +0200 Subject: [PATCH 2/4] Refactor: remove redundant check --- .../CatalogUrlRewrite/Model/CategoryUrlRewriteGenerator.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/app/code/Magento/CatalogUrlRewrite/Model/CategoryUrlRewriteGenerator.php b/app/code/Magento/CatalogUrlRewrite/Model/CategoryUrlRewriteGenerator.php index 5775d6dffee4a..f32cd77433c17 100644 --- a/app/code/Magento/CatalogUrlRewrite/Model/CategoryUrlRewriteGenerator.php +++ b/app/code/Magento/CatalogUrlRewrite/Model/CategoryUrlRewriteGenerator.php @@ -124,13 +124,11 @@ protected function generateForGlobalScope( $mergeDataProvider = clone $this->mergeDataProviderPrototype; $categoryId = $category->getId(); foreach ($category->getStoreIds() as $storeId) { - if ($storeId !== Store::DEFAULT_STORE_ID) { - $category = clone $category; // prevent undesired side effects on original object - } - $category->setStoreId($storeId); if (!$this->isGlobalScope($storeId) && $this->isOverrideUrlsForStore($storeId, $categoryId, $overrideStoreUrls) ) { + $category = clone $category; // prevent undesired side effects on original object + $category->setStoreId($storeId); $this->updateCategoryUrlForStore($storeId, $category); $mergeDataProvider->merge($this->generateForSpecificStoreView($storeId, $category, $rootCategoryId)); } From 87c5c609769388433a127ca0999addb4cb841691 Mon Sep 17 00:00:00 2001 From: Fabian Schmengler Date: Fri, 8 May 2020 16:23:34 +0200 Subject: [PATCH 3/4] Add missing categoryRepository property --- .../CatalogUrlRewrite/Model/CategoryUrlRewriteGenerator.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/code/Magento/CatalogUrlRewrite/Model/CategoryUrlRewriteGenerator.php b/app/code/Magento/CatalogUrlRewrite/Model/CategoryUrlRewriteGenerator.php index f32cd77433c17..5972982ff41ce 100644 --- a/app/code/Magento/CatalogUrlRewrite/Model/CategoryUrlRewriteGenerator.php +++ b/app/code/Magento/CatalogUrlRewrite/Model/CategoryUrlRewriteGenerator.php @@ -54,6 +54,11 @@ class CategoryUrlRewriteGenerator */ private $mergeDataProviderPrototype; + /** + * @var CategoryRepositoryInterface + */ + private $categoryRepository; + /** * @var bool */ From 31c5963f8e21008e799598fc34b26e0728ba56f0 Mon Sep 17 00:00:00 2001 From: Fabian Schmengler Date: Fri, 8 May 2020 18:48:38 +0200 Subject: [PATCH 4/4] Add integration test for bugfix --- .../Model/CategoryUrlRewriteGeneratorTest.php | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/CategoryUrlRewriteGeneratorTest.php b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/CategoryUrlRewriteGeneratorTest.php index 1353dbff17b0b..d0b7d49ebccd7 100644 --- a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/CategoryUrlRewriteGeneratorTest.php +++ b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/CategoryUrlRewriteGeneratorTest.php @@ -9,37 +9,35 @@ use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; /** - * Class CategoryUrlRewriteGeneratorTest - * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class CategoryUrlRewriteGeneratorTest extends \PHPUnit\Framework\TestCase { - /** @var \PHPUnit_Framework_MockObject_MockObject */ + /** @var \PHPUnit\Framework\MockObject\MockObject */ private $canonicalUrlRewriteGenerator; - /** @var \PHPUnit_Framework_MockObject_MockObject */ + /** @var \PHPUnit\Framework\MockObject\MockObject */ private $currentUrlRewritesRegenerator; - /** @var \PHPUnit_Framework_MockObject_MockObject */ + /** @var \PHPUnit\Framework\MockObject\MockObject */ private $childrenUrlRewriteGenerator; /** @var \Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator */ private $categoryUrlRewriteGenerator; - /** @var \Magento\CatalogUrlRewrite\Service\V1\StoreViewService|\PHPUnit_Framework_MockObject_MockObject */ + /** @var \Magento\CatalogUrlRewrite\Service\V1\StoreViewService|\PHPUnit\Framework\MockObject\MockObject */ private $storeViewService; - /** @var \Magento\Catalog\Model\Category|\PHPUnit_Framework_MockObject_MockObject */ + /** @var \Magento\Catalog\Model\Category|\PHPUnit\Framework\MockObject\MockObject */ private $category; - /** @var \Magento\Catalog\Api\CategoryRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject */ + /** @var \Magento\Catalog\Api\CategoryRepositoryInterface|\PHPUnit\Framework\MockObject\MockObject */ private $categoryRepository; - /** @var \PHPUnit_Framework_MockObject_MockObject */ + /** @var \PHPUnit\Framework\MockObject\MockObject */ private $mergeDataProvider; - /** @var \Magento\Framework\Serialize\Serializer\Json|\PHPUnit_Framework_MockObject_MockObject */ + /** @var \Magento\Framework\Serialize\Serializer\Json|\PHPUnit\Framework\MockObject\MockObject */ protected $serializer; /** @@ -141,6 +139,7 @@ public function testGenerationForGlobalScope() ], $this->categoryUrlRewriteGenerator->generate($this->category, false, $categoryId) ); + $this->assertEquals(0, $this->category->getStoreId(), 'Store ID should not have been modified'); } /**