From 29431e958855ef19cc5289f8c86f39e2bc30f0a5 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Sun, 18 Feb 2018 16:08:58 +0100 Subject: [PATCH 1/7] Category collection now use getStoreId and not directly the store manager --- .../ResourceModel/Category/Collection.php | 2 +- .../Category/Collection/UrlRewriteTest.php | 40 +++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Category/Collection/UrlRewriteTest.php diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Category/Collection.php b/app/code/Magento/Catalog/Model/ResourceModel/Category/Collection.php index 573914a13f6e5..46bb74513b59c 100644 --- a/app/code/Magento/Catalog/Model/ResourceModel/Category/Collection.php +++ b/app/code/Magento/Catalog/Model/ResourceModel/Category/Collection.php @@ -371,7 +371,7 @@ public function joinUrlRewrite() ['request_path'], sprintf( '{{table}}.is_autogenerated = 1 AND {{table}}.store_id = %d AND {{table}}.entity_type = \'%s\'', - $this->_storeManager->getStore()->getId(), + $this->getStoreId(), CategoryUrlRewriteGenerator::ENTITY_TYPE ), 'left' diff --git a/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Category/Collection/UrlRewriteTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Category/Collection/UrlRewriteTest.php new file mode 100644 index 0000000000000..5949b2951de03 --- /dev/null +++ b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Category/Collection/UrlRewriteTest.php @@ -0,0 +1,40 @@ +_model = $this->getMockBuilder( + \Magento\Catalog\Model\ResourceModel\Category\Collection::class + )->disableOriginalConstructor() + ->setMethodsExcept(['joinUrlRewrite', 'setStoreId', 'getStoreId']) + ->getMock(); + } + + + public function testStoreIdUsedByUrlRewrite() + { + $this->_model->expects($this->once()) + ->method('joinTable') + ->with( + $this->anything(), + $this->anything(), + $this->anything(), + $this->equalTo('{{table}}.is_autogenerated = 1 AND {{table}}.store_id = 100 AND {{table}}.entity_type = \'category\''), + $this->anything() + ); + $this->_model->setStoreId(100); + $this->_model->joinUrlRewrite(); + } +} From 47c8d54a84770286e9912b83cf11805d29bf40ea Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Sun, 18 Feb 2018 17:06:42 +0100 Subject: [PATCH 2/7] code style fixes --- .../ResourceModel/Category/Collection/UrlRewriteTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Category/Collection/UrlRewriteTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Category/Collection/UrlRewriteTest.php index 5949b2951de03..ea8cb51bf5e5e 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Category/Collection/UrlRewriteTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Category/Collection/UrlRewriteTest.php @@ -22,16 +22,16 @@ protected function setUp() ->getMock(); } - public function testStoreIdUsedByUrlRewrite() { + $cond = '{{table}}.is_autogenerated = 1 AND {{table}}.store_id = 100 AND {{table}}.entity_type = \'category\''; $this->_model->expects($this->once()) ->method('joinTable') ->with( $this->anything(), $this->anything(), $this->anything(), - $this->equalTo('{{table}}.is_autogenerated = 1 AND {{table}}.store_id = 100 AND {{table}}.entity_type = \'category\''), + $this->equalTo($cond), $this->anything() ); $this->_model->setStoreId(100); From 2a014892b5d19c04f5462d2f00c3c7f5b557b0c2 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Sun, 18 Feb 2018 20:05:40 +0100 Subject: [PATCH 3/7] fixes to code style --- .../Category/Collection/UrlRewriteTest.php | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Category/Collection/UrlRewriteTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Category/Collection/UrlRewriteTest.php index ea8cb51bf5e5e..7dec04fceaef6 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Category/Collection/UrlRewriteTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Category/Collection/UrlRewriteTest.php @@ -15,9 +15,8 @@ class UrlRewriteTest extends \PHPUnit\Framework\TestCase protected function setUp() { - $this->_model = $this->getMockBuilder( - \Magento\Catalog\Model\ResourceModel\Category\Collection::class - )->disableOriginalConstructor() + $this->_model = $this->getMockBuilder(\Magento\Catalog\Model\ResourceModel\Category\Collection::class) + ->disableOriginalConstructor() ->setMethodsExcept(['joinUrlRewrite', 'setStoreId', 'getStoreId']) ->getMock(); } @@ -26,14 +25,14 @@ public function testStoreIdUsedByUrlRewrite() { $cond = '{{table}}.is_autogenerated = 1 AND {{table}}.store_id = 100 AND {{table}}.entity_type = \'category\''; $this->_model->expects($this->once()) - ->method('joinTable') - ->with( - $this->anything(), - $this->anything(), - $this->anything(), - $this->equalTo($cond), - $this->anything() - ); + ->method('joinTable') + ->with( + $this->anything(), + $this->anything(), + $this->anything(), + $this->equalTo($cond), + $this->anything() + ); $this->_model->setStoreId(100); $this->_model->joinUrlRewrite(); } From 2d12dac1672aa4125b1012e454a8b58bb9ee9b73 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Sun, 18 Mar 2018 23:26:09 +0100 Subject: [PATCH 4/7] add integration test --- .../ResourceModel/Category/CollectionTest.php | 62 +++++++++++++++++++ .../_files/category_multiple_stores.php | 61 ++++++++++++++++++ 2 files changed, 123 insertions(+) create mode 100644 dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/Category/CollectionTest.php create mode 100644 dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/_files/category_multiple_stores.php diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/Category/CollectionTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/Category/CollectionTest.php new file mode 100644 index 0000000000000..7d2d5d8e443a7 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/Category/CollectionTest.php @@ -0,0 +1,62 @@ +collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( + \Magento\Catalog\Model\ResourceModel\Category\Collection::class + ); + } + + protected function setDown() { + /* Refresh stores memory cache after store deletion */ + \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get( + \Magento\Store\Model\StoreManagerInterface::class + )->reinitStores(); + } + + /** + * @magentoAppIsolation enabled + * @magentoDbIsolation enabled + * @magentoDataFixture Magento/Catalog/Model/ResourceModel/_files/category_multiple_stores.php + */ + public function testJoinUrlRewriteOnDefault() + { + $categories = $this->collection->joinUrlRewrite()->addPathFilter('1/2/3'); + $this->assertCount(1, $categories); + /** @var $category \Magento\Catalog\Model\Category */ + $category = $categories->getFirstItem(); + $this->assertStringEndsWith('category.html', $category->getUrl()); + } + + /** + * @magentoAppIsolation enabled + * @magentoDbIsolation enabled + * @magentoDataFixture Magento/Catalog/Model/ResourceModel/_files/category_multiple_stores.php + */ + public function testJoinUrlRewriteNotOnDefaultStore() + { + $store = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(\Magento\Store\Model\Store::class); + $storeId = $store->load('second_category_store', 'code')->getId(); + $categories = $this->collection->setStoreId($storeId)->joinUrlRewrite()->addPathFilter('1/2/3'); + $this->assertCount(1, $categories); + /** @var $category \Magento\Catalog\Model\Category */ + $category = $categories->getFirstItem(); + $this->assertStringEndsWith('category-3-on-2.html', $category->getUrl()); + } +} diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/_files/category_multiple_stores.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/_files/category_multiple_stores.php new file mode 100644 index 0000000000000..c6590bb6a0f9f --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/_files/category_multiple_stores.php @@ -0,0 +1,61 @@ +create( + \Magento\Catalog\Model\CategoryFactory::class +); +/** @var \Magento\Catalog\Model\CategoryRepository $repository */ +$repository = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( + \Magento\Catalog\Model\CategoryRepository::class +); +/** @var \Magento\Store\Model\StoreManagerInterface $storeManager */ +$storeManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create( + \Magento\Store\Model\StoreManagerInterface::class +); +/** @var \Magento\Store\Model\Store $store */ +$store = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(\Magento\Store\Model\Store::class); +if (!$store->load('second_category_store', 'code')->getId()) { + $websiteId = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get( + \Magento\Store\Model\StoreManagerInterface::class + )->getWebsite()->getId(); + $groupId = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get( + \Magento\Store\Model\StoreManagerInterface::class + )->getWebsite()->getDefaultGroupId(); + $store->setCode( + 'second_category_store' + )->setWebsiteId( + $websiteId + )->setGroupId( + $groupId + )->setName( + 'Fixture Store' + )->setSortOrder( + 10 + )->setIsActive( + 1 + ); + $store->save(); +} + +/* Refresh stores memory cache */ +\Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get( + \Magento\Store\Model\StoreManagerInterface::class +)->reinitStores(); + +/** @var \Magento\Catalog\Model\Category $newCategory */ +$newCategory = $factory->create(); +$newCategory + ->setName('Category') + ->setParentId(2) + ->setLevel(2) + ->setPath('1/2/3') + ->setAvailableSortBy('name') + ->setDefaultSortBy('name') + ->setIsActive(true) + ->setPosition(1); +$repository->save($newCategory); +$currentStoreId = $storeManager->getStore()->getId(); +$storeManager->setCurrentStore($storeManager->getStore($store->getId())); +$newCategory + ->setUrlKey('category-3-on-2'); +$repository->save($newCategory); +$storeManager->setCurrentStore($storeManager->getStore($currentStoreId)); \ No newline at end of file From 8a097fc1a83acd63b702661e12bcb10a00b36630 Mon Sep 17 00:00:00 2001 From: Alessandro Pagnin Date: Sun, 18 Mar 2018 23:47:39 +0100 Subject: [PATCH 5/7] fix to code style --- .../Catalog/Model/ResourceModel/Category/CollectionTest.php | 6 ++++-- .../Model/ResourceModel/_files/category_multiple_stores.php | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/Category/CollectionTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/Category/CollectionTest.php index 7d2d5d8e443a7..dd1a6eefbe532 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/Category/CollectionTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/Category/CollectionTest.php @@ -23,7 +23,8 @@ protected function setUp() ); } - protected function setDown() { + protected function setDown() + { /* Refresh stores memory cache after store deletion */ \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get( \Magento\Store\Model\StoreManagerInterface::class @@ -51,7 +52,8 @@ public function testJoinUrlRewriteOnDefault() */ public function testJoinUrlRewriteNotOnDefaultStore() { - $store = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(\Magento\Store\Model\Store::class); + $store = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() + ->create(\Magento\Store\Model\Store::class); $storeId = $store->load('second_category_store', 'code')->getId(); $categories = $this->collection->setStoreId($storeId)->joinUrlRewrite()->addPathFilter('1/2/3'); $this->assertCount(1, $categories); diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/_files/category_multiple_stores.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/_files/category_multiple_stores.php index c6590bb6a0f9f..330a682106d89 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/_files/category_multiple_stores.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/_files/category_multiple_stores.php @@ -58,4 +58,4 @@ $newCategory ->setUrlKey('category-3-on-2'); $repository->save($newCategory); -$storeManager->setCurrentStore($storeManager->getStore($currentStoreId)); \ No newline at end of file +$storeManager->setCurrentStore($storeManager->getStore($currentStoreId)); From af3804ac4e846d42593ab73df3535a24d4ff9f8b Mon Sep 17 00:00:00 2001 From: Stanislav Idolov Date: Mon, 26 Mar 2018 16:23:03 +0300 Subject: [PATCH 6/7] magento/magento2#13716 --- .../Category/Collection/UrlRewriteTest.php | 10 +++++----- .../Model/ResourceModel/Category/CollectionTest.php | 2 +- .../ResourceModel/_files/category_multiple_stores.php | 9 +++++++-- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Category/Collection/UrlRewriteTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Category/Collection/UrlRewriteTest.php index 7dec04fceaef6..b1f5f17f64a59 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Category/Collection/UrlRewriteTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Category/Collection/UrlRewriteTest.php @@ -11,11 +11,11 @@ class UrlRewriteTest extends \PHPUnit\Framework\TestCase /** * @var \PHPUnit_Framework_MockObject_MockObject */ - protected $_model; + private $model; protected function setUp() { - $this->_model = $this->getMockBuilder(\Magento\Catalog\Model\ResourceModel\Category\Collection::class) + $this->model = $this->getMockBuilder(\Magento\Catalog\Model\ResourceModel\Category\Collection::class) ->disableOriginalConstructor() ->setMethodsExcept(['joinUrlRewrite', 'setStoreId', 'getStoreId']) ->getMock(); @@ -24,7 +24,7 @@ protected function setUp() public function testStoreIdUsedByUrlRewrite() { $cond = '{{table}}.is_autogenerated = 1 AND {{table}}.store_id = 100 AND {{table}}.entity_type = \'category\''; - $this->_model->expects($this->once()) + $this->model->expects($this->once()) ->method('joinTable') ->with( $this->anything(), @@ -33,7 +33,7 @@ public function testStoreIdUsedByUrlRewrite() $this->equalTo($cond), $this->anything() ); - $this->_model->setStoreId(100); - $this->_model->joinUrlRewrite(); + $this->model->setStoreId(100); + $this->model->joinUrlRewrite(); } } diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/Category/CollectionTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/Category/CollectionTest.php index dd1a6eefbe532..7e26cdb921f39 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/Category/CollectionTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/Category/CollectionTest.php @@ -10,7 +10,7 @@ class CollectionTest extends \PHPUnit\Framework\TestCase /** * @var \Magento\Catalog\Model\ResourceModel\Category\Collection */ - protected $collection; + private $collection; /** * Sets up the fixture, for example, opens a network connection. diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/_files/category_multiple_stores.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/_files/category_multiple_stores.php index 330a682106d89..90bf630000e72 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/_files/category_multiple_stores.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/_files/category_multiple_stores.php @@ -1,4 +1,9 @@ create( \Magento\Catalog\Model\CategoryFactory::class @@ -20,6 +25,7 @@ $groupId = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get( \Magento\Store\Model\StoreManagerInterface::class )->getWebsite()->getDefaultGroupId(); + $store->setCode( 'second_category_store' )->setWebsiteId( @@ -55,7 +61,6 @@ $repository->save($newCategory); $currentStoreId = $storeManager->getStore()->getId(); $storeManager->setCurrentStore($storeManager->getStore($store->getId())); -$newCategory - ->setUrlKey('category-3-on-2'); +$newCategory->setUrlKey('category-3-on-2'); $repository->save($newCategory); $storeManager->setCurrentStore($storeManager->getStore($currentStoreId)); From 8220e3ff214d8911ba7dde971ed6856272228ca1 Mon Sep 17 00:00:00 2001 From: Vlad Veselov Date: Tue, 27 Mar 2018 11:35:13 +0300 Subject: [PATCH 7/7] Remove improper unit test it shall not pass code review as object under test is mocked and thus it does not test anything --- .../Category/Collection/UrlRewriteTest.php | 39 ------------------- 1 file changed, 39 deletions(-) delete mode 100644 app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Category/Collection/UrlRewriteTest.php diff --git a/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Category/Collection/UrlRewriteTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Category/Collection/UrlRewriteTest.php deleted file mode 100644 index b1f5f17f64a59..0000000000000 --- a/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Category/Collection/UrlRewriteTest.php +++ /dev/null @@ -1,39 +0,0 @@ -model = $this->getMockBuilder(\Magento\Catalog\Model\ResourceModel\Category\Collection::class) - ->disableOriginalConstructor() - ->setMethodsExcept(['joinUrlRewrite', 'setStoreId', 'getStoreId']) - ->getMock(); - } - - public function testStoreIdUsedByUrlRewrite() - { - $cond = '{{table}}.is_autogenerated = 1 AND {{table}}.store_id = 100 AND {{table}}.entity_type = \'category\''; - $this->model->expects($this->once()) - ->method('joinTable') - ->with( - $this->anything(), - $this->anything(), - $this->anything(), - $this->equalTo($cond), - $this->anything() - ); - $this->model->setStoreId(100); - $this->model->joinUrlRewrite(); - } -}