Skip to content

Commit 443c2d2

Browse files
committed
Merge remote-tracking branch 'remotes/origin/MAGETWO-35250-URL-Rewrite-Is-Not-Removed-After-Removing-Category' into Bug-Fixes
2 parents 8a56586 + 70243bd commit 443c2d2

File tree

5 files changed

+55
-8
lines changed

5 files changed

+55
-8
lines changed

app/code/Magento/CatalogUrlRewrite/Model/Category/Plugin/Category/Remove.php

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
*/
66
namespace Magento\CatalogUrlRewrite\Model\Category\Plugin\Category;
77

8-
use Magento\Catalog\Model\Category;
8+
use Magento\Catalog\Api\Data\CategoryInterface;
99
use Magento\CatalogUrlRewrite\Model\Category\ChildrenCategoriesProvider;
1010
use Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator;
1111
use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator;
@@ -41,15 +41,20 @@ public function __construct(
4141
/**
4242
* Remove product urls from storage
4343
*
44-
* @param Category $category
44+
* @param \Magento\Catalog\Model\Resource\Category $subject
4545
* @param callable $proceed
46+
* @param CategoryInterface $category
4647
* @return mixed
48+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
4749
*/
48-
public function aroundDelete(Category $category, \Closure $proceed)
49-
{
50+
public function aroundDelete(
51+
\Magento\Catalog\Model\Resource\Category $subject,
52+
\Closure $proceed,
53+
CategoryInterface $category
54+
) {
5055
$categoryIds = $this->childrenCategoriesProvider->getChildrenIds($category, true);
5156
$categoryIds[] = $category->getId();
52-
$result = $proceed();
57+
$result = $proceed($category);
5358
foreach ($categoryIds as $categoryId) {
5459
$this->deleteRewritesForCategory($categoryId);
5560
}

app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,12 @@
1212
<type name="Magento\Store\Model\Resource\Group">
1313
<plugin name="group_plugin" type="Magento\CatalogUrlRewrite\Model\Category\Plugin\Store\Group"/>
1414
</type>
15-
<type name="Magento\Catalog\Model\Category">
16-
<plugin name="category_delete_plugin" type="Magento\CatalogUrlRewrite\Model\Category\Plugin\Category\Remove"/>
17-
</type>
1815
<type name="Magento\CatalogImportExport\Model\Import\Product">
1916
<plugin name="import_save_plugin" type="Magento\CatalogUrlRewrite\Model\Product\Plugin\Import"/>
2017
</type>
2118
<type name="Magento\Catalog\Model\Resource\Category">
2219
<plugin name="category_move_plugin" type="Magento\CatalogUrlRewrite\Model\Category\Plugin\Category\Move"/>
20+
<plugin name="category_delete_plugin" type="Magento\CatalogUrlRewrite\Model\Category\Plugin\Category\Remove"/>
2321
</type>
2422
<type name="Magento\UrlRewrite\Model\StorageInterface">
2523
<plugin name="storage_plugin" type="Magento\CatalogUrlRewrite\Model\Category\Plugin\Storage"/>

app/code/Magento/CatalogUrlRewrite/etc/di.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,8 @@
1616
<argument name="urlFinder" xsi:type="object">Magento\CatalogUrlRewrite\Model\Storage\DbStorage</argument>
1717
</arguments>
1818
</type>
19+
<type name="Magento\Catalog\Model\Resource\Category">
20+
<plugin name="category_move_plugin" type="Magento\CatalogUrlRewrite\Model\Category\Plugin\Category\Move"/>
21+
<plugin name="category_delete_plugin" type="Magento\CatalogUrlRewrite\Model\Category\Plugin\Category\Remove"/>
22+
</type>
1923
</config>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?xml version="1.0"?>
2+
<!--
3+
/**
4+
* Copyright © 2015 Magento. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Event/etc/events.xsd">
9+
<event name="catalog_category_prepare_save">
10+
<observer name="category_save_rewrites_history_setter" instance="Magento\CatalogUrlRewrite\Observer\CategorySaveRewritesHistorySetter" method="invoke"/>
11+
</event>
12+
<event name="catalog_category_save_after">
13+
<observer name="process_url_rewrite_saving" instance="Magento\CatalogUrlRewrite\Model\Category\Observer" method="processUrlRewriteSaving"/>
14+
</event>
15+
</config>

dev/tests/api-functional/testsuite/Magento/Catalog/Api/CategoryRepositoryTest.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88

99
use Magento\TestFramework\Helper\Bootstrap;
1010
use Magento\TestFramework\TestCase\WebapiAbstract;
11+
use Magento\UrlRewrite\Service\V1\Data\UrlRewrite;
12+
use Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator;
1113

1214
class CategoryRepositoryTest extends WebapiAbstract
1315
{
@@ -98,14 +100,35 @@ public function testCreate($category)
98100
{
99101
$category = $this->createCategory($category);
100102
$this->assertGreaterThan(0, $category['id']);
103+
// delete category to clean up auto-generated url rewrites
104+
$this->deleteCategory($category['id']);
101105
}
102106

103107
/**
104108
* @magentoApiDataFixture Magento/Catalog/_files/category.php
105109
*/
106110
public function testDelete()
107111
{
112+
/** @var \Magento\UrlRewrite\Model\Storage\DbStorage $storage */
113+
$storage = Bootstrap::getObjectManager()->get('Magento\UrlRewrite\Model\Storage\DbStorage');
114+
$categoryId = $this->modelId;
115+
$data = [
116+
UrlRewrite::ENTITY_ID => $categoryId,
117+
UrlRewrite::ENTITY_TYPE => CategoryUrlRewriteGenerator::ENTITY_TYPE
118+
];
119+
/** @var \Magento\UrlRewrite\Service\V1\Data\UrlRewrite $urlRewrite*/
120+
$urlRewrite = $storage->findOneByData($data);
121+
122+
// Assert that a url rewrite is auto-generated for the category created from the data fixture
123+
$this->assertEquals(1, $urlRewrite->getIsAutogenerated());
124+
$this->assertEquals($categoryId, $urlRewrite->getEntityId());
125+
$this->assertEquals(CategoryUrlRewriteGenerator::ENTITY_TYPE, $urlRewrite->getEntityType());
126+
$this->assertEquals('category-1.html', $urlRewrite->getRequestPath());
127+
128+
// Assert deleting category is successful
108129
$this->assertTrue($this->deleteCategory($this->modelId));
130+
// After the category is deleted, assert that the associated url rewrite is also auto-deleted
131+
$this->assertNull($storage->findOneByData($data));
109132
}
110133

111134
public function testDeleteNoSuchEntityException()
@@ -156,6 +179,8 @@ public function testUpdate()
156179
$category = $model->load($categoryId);
157180
$this->assertEquals("Update Category Test", $category->getName());
158181
$this->assertEquals("Update Category Description Test", $category->getDescription());
182+
// delete category to clean up auto-generated url rewrites
183+
$this->deleteCategory($categoryId);
159184
}
160185

161186
protected function getSimpleCategoryData($categoryData = [])

0 commit comments

Comments
 (0)