Skip to content

Commit b56d8d2

Browse files
committed
MAGETWO-60037: User is able to create empty URL key for category which leads to numerous errors
1 parent 76315a6 commit b56d8d2

File tree

2 files changed

+38
-8
lines changed

2 files changed

+38
-8
lines changed

app/code/Magento/CatalogUrlRewrite/Observer/CategoryUrlPathAutogeneratorObserver.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*/
66
namespace Magento\CatalogUrlRewrite\Observer;
77

8+
use Doctrine\Instantiator\Exception\InvalidArgumentException;
89
use Magento\Catalog\Model\Category;
910
use Magento\CatalogUrlRewrite\Model\CategoryUrlPathGenerator;
1011
use Magento\CatalogUrlRewrite\Service\V1\StoreViewService;
@@ -42,13 +43,18 @@ public function __construct(
4243
/**
4344
* @param \Magento\Framework\Event\Observer $observer
4445
* @return void
46+
* @throws \Magento\Framework\Exception\LocalizedException
4547
*/
4648
public function execute(\Magento\Framework\Event\Observer $observer)
4749
{
4850
/** @var Category $category */
4951
$category = $observer->getEvent()->getCategory();
5052
if ($category->getUrlKey() !== false) {
51-
$category->setUrlKey($this->categoryUrlPathGenerator->getUrlKey($category))
53+
$resultUrlKey = $this->categoryUrlPathGenerator->getUrlKey($category);
54+
if (empty($resultUrlKey)) {
55+
throw new \Magento\Framework\Exception\LocalizedException(__('Invalid URL key'));
56+
}
57+
$category->setUrlKey($resultUrlKey)
5258
->setUrlPath($this->categoryUrlPathGenerator->getUrlPath($category));
5359
if (!$category->isObjectNew()) {
5460
$category->getResource()->saveAttribute($category, 'url_path');

dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/Model/CategoryUrlRewriteGeneratorTest.php

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,6 @@ protected function setUp()
2525
$this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
2626
}
2727

28-
public function tearDown()
29-
{
30-
$category = $this->objectManager->create(\Magento\Catalog\Model\Category::class);
31-
$category->load(3);
32-
$category->delete();
33-
}
34-
3528
/**
3629
* @magentoDataFixture Magento/CatalogUrlRewrite/_files/categories.php
3730
* @magentoDbIsolation enabled
@@ -96,6 +89,37 @@ public function testGenerateUrlRewritesWithSaveHistory()
9689
$this->assertResults($categoryExpectedResult, $actualResults);
9790
}
9891

92+
/**
93+
* @magentoDataFixture Magento/CatalogUrlRewrite/_files/categories.php
94+
* @magentoDbIsolation enabled
95+
* @magentoAppIsolation enabled
96+
* @param string $urlKey
97+
* @dataProvider IncorrectUrlRewritesDataProvider
98+
*/
99+
public function testGenerateUrlRewritesWithIncorrectUrlKey($urlKey)
100+
{
101+
$this->setExpectedException(
102+
\Magento\Framework\Exception\LocalizedException::class,
103+
'Invalid URL key'
104+
);
105+
/** @var \Magento\Catalog\Api\CategoryRepositoryInterface $repository */
106+
$repository = $this->objectManager->get(\Magento\Catalog\Api\CategoryRepositoryInterface::class);
107+
$category = $repository->get(3);
108+
$category->setUrlKey($urlKey);
109+
$repository->save($category);
110+
}
111+
112+
/**
113+
* @return array
114+
*/
115+
public function IncorrectUrlRewritesDataProvider()
116+
{
117+
return [
118+
['#'],
119+
['//']
120+
];
121+
}
122+
99123
/**
100124
* @param array $filter
101125
* @return array

0 commit comments

Comments
 (0)