Skip to content

Commit c3f9d30

Browse files
author
Stanislav Idolov
authored
MAGETWO-88107: Category\Collection::joinUrlRewrite should use the store set on the collection #13716
2 parents a28702a + 38045a0 commit c3f9d30

File tree

4 files changed

+170
-1
lines changed

4 files changed

+170
-1
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
@@ -313,7 +313,7 @@ public function joinUrlRewrite()
313313
['request_path'],
314314
sprintf(
315315
'{{table}}.is_autogenerated = 1 AND {{table}}.store_id = %d AND {{table}}.entity_type = \'%s\'',
316-
$this->_storeManager->getStore()->getId(),
316+
$this->getStoreId(),
317317
CategoryUrlRewriteGenerator::ENTITY_TYPE
318318
),
319319
'left'
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
namespace Magento\Catalog\Test\Unit\Model\ResourceModel\Category\Collection;
8+
9+
class UrlRewriteTest extends \PHPUnit\Framework\TestCase
10+
{
11+
/**
12+
* @var \PHPUnit_Framework_MockObject_MockObject
13+
*/
14+
private $model;
15+
16+
protected function setUp()
17+
{
18+
$this->model = $this->getMockBuilder(\Magento\Catalog\Model\ResourceModel\Category\Collection::class)
19+
->disableOriginalConstructor()
20+
->setMethodsExcept(['joinUrlRewrite', 'setStoreId', 'getStoreId'])
21+
->getMock();
22+
}
23+
24+
public function testStoreIdUsedByUrlRewrite()
25+
{
26+
$cond = '{{table}}.is_autogenerated = 1 AND {{table}}.store_id = 100 AND {{table}}.entity_type = \'category\'';
27+
$this->model->expects($this->once())
28+
->method('joinTable')
29+
->with(
30+
$this->anything(),
31+
$this->anything(),
32+
$this->anything(),
33+
$this->equalTo($cond),
34+
$this->anything()
35+
);
36+
$this->model->setStoreId(100);
37+
$this->model->joinUrlRewrite();
38+
}
39+
}
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)