Skip to content

Commit 53ad206

Browse files
author
Stanislav Idolov
authored
ENGCOM-1103: [Forwardport] Category\Collection::joinUrlRewrite should use the store set on the collection #14381
2 parents ad6f898 + f4fc5b9 commit 53ad206

File tree

4 files changed

+147
-7
lines changed

4 files changed

+147
-7
lines changed

app/code/Magento/Catalog/Model/ResourceModel/Category/Collection.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,7 @@ public function joinUrlRewrite()
371371
['request_path'],
372372
sprintf(
373373
'{{table}}.is_autogenerated = 1 AND {{table}}.store_id = %d AND {{table}}.entity_type = \'%s\'',
374-
$this->_storeManager->getStore()->getId(),
374+
$this->getStoreId(),
375375
CategoryUrlRewriteGenerator::ENTITY_TYPE
376376
),
377377
'left'

dev/tests/integration/testsuite/Magento/Bundle/Model/Category/ProductIndexerTest.php

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -215,18 +215,28 @@ public function testCategoryCreate()
215215
}
216216

217217
/**
218+
* Finds 4 categories
219+
*
218220
* @return Category[]
219221
*/
220222
private function getCategories()
221223
{
222-
/** @var Category $category */
223-
$category = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
224-
\Magento\Catalog\Model\Category::class
224+
$collectionFactory = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
225+
\Magento\Catalog\Model\ResourceModel\Category\CollectionFactory::class
225226
);
226227

227-
$result = $category->getCollection()->addAttributeToSelect('name')->getItems();
228-
$result = array_slice($result, 2);
228+
/** @var \Magento\Catalog\Model\ResourceModel\Category\Collection $collection */
229+
$collection = $collectionFactory->create();
230+
231+
$collection
232+
->addAttributeToSelect('name')
233+
->addAttributeToFilter('name', ['in' => [
234+
'Category 1',
235+
'Category 2',
236+
'Category 3',
237+
'Category 4',
238+
]]);
229239

230-
return array_slice($result, 0, 4);
240+
return array_values($collection->getItems());
231241
}
232242
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Catalog\Model\ResourceModel\Category;
7+
8+
class CollectionTest extends \PHPUnit\Framework\TestCase
9+
{
10+
/**
11+
* @var \Magento\Catalog\Model\ResourceModel\Category\Collection
12+
*/
13+
private $collection;
14+
15+
/**
16+
* Sets up the fixture, for example, opens a network connection.
17+
* This method is called before a test is executed.
18+
*/
19+
protected function setUp()
20+
{
21+
$this->collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
22+
\Magento\Catalog\Model\ResourceModel\Category\Collection::class
23+
);
24+
}
25+
26+
protected function setDown()
27+
{
28+
/* Refresh stores memory cache after store deletion */
29+
\Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
30+
\Magento\Store\Model\StoreManagerInterface::class
31+
)->reinitStores();
32+
}
33+
34+
/**
35+
* @magentoAppIsolation enabled
36+
* @magentoDbIsolation enabled
37+
* @magentoDataFixture Magento/Catalog/Model/ResourceModel/_files/category_multiple_stores.php
38+
*/
39+
public function testJoinUrlRewriteOnDefault()
40+
{
41+
$categories = $this->collection->joinUrlRewrite()->addPathFilter('1/2/3');
42+
$this->assertCount(1, $categories);
43+
/** @var $category \Magento\Catalog\Model\Category */
44+
$category = $categories->getFirstItem();
45+
$this->assertStringEndsWith('category.html', $category->getUrl());
46+
}
47+
48+
/**
49+
* @magentoAppIsolation enabled
50+
* @magentoDbIsolation enabled
51+
* @magentoDataFixture Magento/Catalog/Model/ResourceModel/_files/category_multiple_stores.php
52+
*/
53+
public function testJoinUrlRewriteNotOnDefaultStore()
54+
{
55+
$store = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
56+
->create(\Magento\Store\Model\Store::class);
57+
$storeId = $store->load('second_category_store', 'code')->getId();
58+
$categories = $this->collection->setStoreId($storeId)->joinUrlRewrite()->addPathFilter('1/2/3');
59+
$this->assertCount(1, $categories);
60+
/** @var $category \Magento\Catalog\Model\Category */
61+
$category = $categories->getFirstItem();
62+
$this->assertStringEndsWith('category-3-on-2.html', $category->getUrl());
63+
}
64+
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
/** @var \Magento\Catalog\Model\CategoryFactory $factory */
8+
$factory = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
9+
\Magento\Catalog\Model\CategoryFactory::class
10+
);
11+
/** @var \Magento\Catalog\Model\CategoryRepository $repository */
12+
$repository = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
13+
\Magento\Catalog\Model\CategoryRepository::class
14+
);
15+
/** @var \Magento\Store\Model\StoreManagerInterface $storeManager */
16+
$storeManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
17+
\Magento\Store\Model\StoreManagerInterface::class
18+
);
19+
/** @var \Magento\Store\Model\Store $store */
20+
$store = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(\Magento\Store\Model\Store::class);
21+
if (!$store->load('second_category_store', 'code')->getId()) {
22+
$websiteId = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
23+
\Magento\Store\Model\StoreManagerInterface::class
24+
)->getWebsite()->getId();
25+
$groupId = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
26+
\Magento\Store\Model\StoreManagerInterface::class
27+
)->getWebsite()->getDefaultGroupId();
28+
29+
$store->setCode(
30+
'second_category_store'
31+
)->setWebsiteId(
32+
$websiteId
33+
)->setGroupId(
34+
$groupId
35+
)->setName(
36+
'Fixture Store'
37+
)->setSortOrder(
38+
10
39+
)->setIsActive(
40+
1
41+
);
42+
$store->save();
43+
}
44+
45+
/* Refresh stores memory cache */
46+
\Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
47+
\Magento\Store\Model\StoreManagerInterface::class
48+
)->reinitStores();
49+
50+
/** @var \Magento\Catalog\Model\Category $newCategory */
51+
$newCategory = $factory->create();
52+
$newCategory
53+
->setName('Category')
54+
->setParentId(2)
55+
->setLevel(2)
56+
->setPath('1/2/3')
57+
->setAvailableSortBy('name')
58+
->setDefaultSortBy('name')
59+
->setIsActive(true)
60+
->setPosition(1);
61+
$repository->save($newCategory);
62+
$currentStoreId = $storeManager->getStore()->getId();
63+
$storeManager->setCurrentStore($storeManager->getStore($store->getId()));
64+
$newCategory->setUrlKey('category-3-on-2');
65+
$repository->save($newCategory);
66+
$storeManager->setCurrentStore($storeManager->getStore($currentStoreId));

0 commit comments

Comments
 (0)