Skip to content

Commit 32804b3

Browse files
committed
Merge branch 'ACP2E-1783' of https://github.com/magento-l3/magento2ce into PR-05242023
2 parents 337d701 + 03a1500 commit 32804b3

File tree

4 files changed

+133
-5
lines changed

4 files changed

+133
-5
lines changed

app/code/Magento/UrlRewrite/Controller/Adminhtml/Url/Rewrite/Save.php

Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -97,17 +97,51 @@ protected function getTargetPath($model)
9797
];
9898
$rewrite = $this->urlFinder->findOneByData($data);
9999
if (!$rewrite) {
100-
$message = $model->getEntityType() === self::ENTITY_TYPE_PRODUCT
101-
? __("The selected product isn't associated with the selected store or category.")
102-
: __("The selected category isn't associated with the selected store.");
103-
throw new LocalizedException($message);
100+
$model->getEntityType() === self::ENTITY_TYPE_PRODUCT ? $this->checkProductCorrelation($model) :
101+
$this->checkCategoryCorrelation($model);
102+
} else {
103+
$targetPath = $rewrite->getRequestPath();
104104
}
105-
$targetPath = $rewrite->getRequestPath();
106105
}
107106
return $targetPath;
108107
}
109108

110109
/**
110+
* Checks if rewrite details match category properties
111+
*
112+
* @param \Magento\UrlRewrite\Model\UrlRewrite $model
113+
* @return void
114+
* @throws LocalizedException
115+
*/
116+
private function checkCategoryCorrelation(\Magento\UrlRewrite\Model\UrlRewrite $model): void
117+
{
118+
if (false === in_array($model->getStoreId(), $this->_getCategory()->getStoreIds())) {
119+
throw new LocalizedException(
120+
__("The selected category isn't associated with the selected store.")
121+
);
122+
}
123+
}
124+
125+
/**
126+
* Checks if rewrite details match product properties
127+
*
128+
* @param \Magento\UrlRewrite\Model\UrlRewrite $model
129+
* @return void
130+
* @throws LocalizedException
131+
*/
132+
private function checkProductCorrelation(\Magento\UrlRewrite\Model\UrlRewrite $model): void
133+
{
134+
if (false === ($this->_getProduct()->canBeShowInCategory($this->_getCategory()->getId())) &&
135+
in_array($model->getStoreId(), $this->_getProduct()->getStoreIds())) {
136+
throw new LocalizedException(
137+
__("The selected product isn't associated with the selected store or category.")
138+
);
139+
}
140+
}
141+
142+
/**
143+
* Get rewrite canonical target path
144+
*
111145
* @return string
112146
*/
113147
protected function getCanonicalTargetPath()
@@ -142,6 +176,8 @@ private function _handleCmsPageUrlRewrite($model)
142176
}
143177

144178
/**
179+
* Process save URL rewrite request
180+
*
145181
* @return void
146182
*/
147183
public function execute()
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
9+
<pages xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Page/etc/PageObject.xsd">
11+
<page name="AdminUrlRewriteProductCategoryPage" url="admin/url_rewrite/edit/product/{{productId}}/category/{{categoryId}}" area="admin" module="Magento_UrlRewrite">
12+
<section name="AdminUrlRewriteProductCategorySection"/>
13+
</page>
14+
</pages>

app/code/Magento/UrlRewrite/Test/Mftf/Section/AdminUrlRewriteIndexSection.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,6 @@
1515
<element name="gridCellByColumnValue" type="text" selector="//*[@data-role='grid']//tbody//td[count(//*[@data-role='grid']//th[contains(., '{{column}}')]/preceding-sibling::th)+1][normalize-space(.)='{{columnValue}}']" parameterized="true"/>
1616
<element name="select" type="button" selector="//*[@data-role='grid']//tbody//tr[{{row}}+1]//button[@class='action-select']" timeout="30" parameterized="true"/>
1717
<element name="activeEdit" type="button" selector="//*[@data-role='grid']//tbody//ul[@class='action-menu _active']//a[@data-action='item-edit']" timeout="30"/>
18+
<element name="clearFiltersButton" type="button" selector="//div[@class='admin__data-grid-header']//button[@class='action-tertiary action-clear']" timeout="10"/>
1819
</section>
1920
</sections>
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd">
9+
<test name="AdminDeleteCreateProductUrlRewriteTest">
10+
<annotations>
11+
<stories value="Delete Product and product-category URL rewrites and then create a new one"/>
12+
<title value="Delete Product and product-category URL rewrites and then create a new one"/>
13+
<description value="Delete automated URL rewrites and then create one"/>
14+
<testCaseId value="AC-8380"/>
15+
<severity value="MAJOR"/>
16+
<group value="url_rewrite"/>
17+
</annotations>
18+
<before>
19+
<magentoCLI command="config:set catalog/seo/generate_category_product_rewrites 1" stepKey="enableCategoryProductRewrites"/>
20+
<actionGroup ref="AdminLoginActionGroup" stepKey="login"/>
21+
<!-- Create the category to put the product in -->
22+
<createData entity="SimpleSubCategory" stepKey="createCategory"/>
23+
<createData entity="SimpleProduct" stepKey="createSimpleProduct">
24+
<requiredEntity createDataKey="createCategory"/>
25+
</createData>
26+
<magentoCLI command="indexer:reindex" stepKey="performReindex"/>
27+
<magentoCLI command="cache:flush" stepKey="cleanCache"/>
28+
</before>
29+
<after>
30+
<!-- Clear filters: URL re-write, product -->
31+
<amOnPage url="{{AdminUrlRewriteIndexPage.url}}" stepKey="openUrlRewriteEditPage"/>
32+
<conditionalClick selector="{{AdminUrlRewriteIndexSection.clearFiltersButton}}" dependentSelector="{{AdminUrlRewriteIndexSection.clearFiltersButton}}" visible="true" stepKey="cleanFiltersIfTheySet"/>
33+
<actionGroup ref="ClearProductsFilterActionGroup" stepKey="clearProductsFilter"/>
34+
<!-- Delete the category and product -->
35+
<deleteData createDataKey="createCategory" stepKey="deleteCategory"/>
36+
<deleteData createDataKey="createSimpleProduct" stepKey="deleteProduct"/>
37+
<magentoCLI command="config:set catalog/seo/generate_category_product_rewrites 0" stepKey="disableGenerateUrlRewrite"/>
38+
<magentoCLI command="indexer:reindex" stepKey="performExitReindex"/>
39+
<actionGroup ref="AdminLogoutActionGroup" stepKey="logout"/>
40+
</after>
41+
42+
<!--Delete created product url rewrite and verify AssertUrlRewriteDeletedMessage-->
43+
<actionGroup ref="AdminDeleteUrlRewriteActionGroup" stepKey="deleteProductUrlRewrite">
44+
<argument name="requestPath" value="$$createSimpleProduct.custom_attributes[url_key]$$.html"/>
45+
</actionGroup>
46+
<actionGroup ref="AdminDeleteUrlRewriteActionGroup" stepKey="deleteProductCategoryUrlRewrite">
47+
<argument name="requestPath" value="$$createSimpleProduct.custom_attributes[url_key]$$.html"/>
48+
</actionGroup>
49+
50+
<!--Search and verify AssertUrlRewriteNotInGrid-->
51+
<actionGroup ref="AdminSearchDeletedUrlRewriteActionGroup" stepKey="searchDeletedUrlRewriteInGrid">
52+
<argument name="requestPath" value="$$createSimpleProduct.custom_attributes[url_key]$$.html"/>
53+
</actionGroup>
54+
55+
<!--Filter Product in product page and get the Product ID -->
56+
<actionGroup ref="FilterAndSelectProductActionGroup" stepKey="filterProduct">
57+
<argument name="productSku" value="$$createSimpleProduct.sku$$"/>
58+
</actionGroup>
59+
<grabFromCurrentUrl stepKey="productId" regex="#\/([0-9]*)?\/$#"/>
60+
61+
<!-- Open Category Page and Get Category ID -->
62+
<actionGroup ref="OpenCategoryFromCategoryTreeActionGroup" stepKey="getCategoryId">
63+
<argument name="category" value="$$createCategory.name$$"/>
64+
</actionGroup>
65+
<grabFromCurrentUrl stepKey="categoryId" regex="#\/([0-9]*)?\/$#"/>
66+
67+
<!-- Create product redirect -->
68+
<amOnPage url="{{AdminUrlRewriteProductCategoryPage.url({$productId}, {$categoryId})}}" stepKey="openProductRedirectWithCategory"/>
69+
<click selector="{{AdminUrlRewriteEditSection.redirectTypeValue('Temporary (302)')}}" stepKey="clickOnRedirectTypeValue"/>
70+
<click selector="{{AdminUrlRewriteEditSection.saveButton}}" stepKey="clickOnSaveButton"/>
71+
72+
<!-- Assert Url Rewrite Save Message -->
73+
<actionGroup ref="AssertMessageInAdminPanelActionGroup" stepKey="assertSuccessMessage">
74+
<argument name="message" value="The URL Rewrite has been saved."/>
75+
</actionGroup>
76+
</test>
77+
</tests>

0 commit comments

Comments
 (0)