Skip to content
This repository was archived by the owner on Apr 29, 2019. It is now read-only.

Commit 2910d8b

Browse files
authored
Merge pull request #2704 from magento-borg/MAGETWO-91608-seo-url
[borg] MAGETWO-91608: SEO-friendly URL for category page not working
2 parents cf2ee26 + a885464 commit 2910d8b

File tree

6 files changed

+127
-3
lines changed

6 files changed

+127
-3
lines changed

app/code/Magento/Catalog/Controller/Adminhtml/Category.php

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,12 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
declare(strict_types=1);
7+
68
namespace Magento\Catalog\Controller\Adminhtml;
79

10+
use Magento\Store\Model\Store;
11+
812
/**
913
* Catalog category controller
1014
*/
@@ -44,7 +48,7 @@ public function __construct(
4448
protected function _initCategory($getRootInstead = false)
4549
{
4650
$categoryId = $this->resolveCategoryId();
47-
$storeId = (int)$this->getRequest()->getParam('store');
51+
$storeId = $this->resolveStoreId();
4852
$category = $this->_objectManager->create(\Magento\Catalog\Model\Category::class);
4953
$category->setStoreId($storeId);
5054

@@ -70,7 +74,7 @@ protected function _initCategory($getRootInstead = false)
7074
$this->_objectManager->get(\Magento\Framework\Registry::class)->register('category', $category);
7175
$this->_objectManager->get(\Magento\Framework\Registry::class)->register('current_category', $category);
7276
$this->_objectManager->get(\Magento\Cms\Model\Wysiwyg\Config::class)
73-
->setStoreId($this->getRequest()->getParam('store'));
77+
->setStoreId($storeId);
7478
return $category;
7579
}
7680

@@ -79,13 +83,28 @@ protected function _initCategory($getRootInstead = false)
7983
*
8084
* @return int
8185
*/
82-
private function resolveCategoryId()
86+
private function resolveCategoryId() : int
8387
{
8488
$categoryId = (int)$this->getRequest()->getParam('id', false);
8589

8690
return $categoryId ?: (int)$this->getRequest()->getParam('entity_id', false);
8791
}
8892

93+
/**
94+
* Resolve store id
95+
*
96+
* Tries to take store id from store HTTP parameter
97+
* @see Store
98+
*
99+
* @return int
100+
*/
101+
private function resolveStoreId() : int
102+
{
103+
$storeId = (int)$this->getRequest()->getParam('store', false);
104+
105+
return $storeId ?: (int)$this->getRequest()->getParam('store_id', Store::DEFAULT_STORE_ID);
106+
}
107+
89108
/**
90109
* Build response for ajax request
91110
*

dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/ActionGroup/AdminCategoryActionGroup.xml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,26 @@
190190
<see selector="{{AdminCategoryBasicFieldSection.FieldError('uid')}}" userInput="This is a required field." stepKey="seeErrorMessage"/>
191191
</actionGroup>
192192

193+
194+
<actionGroup name="switchCategoryStoreView">
195+
<arguments>
196+
<argument name="Store"/>
197+
<argument name="CatName"/>
198+
</arguments>
199+
<amOnPage url="{{AdminCategoryPage.page}}" stepKey="amOnCategoryPage"/>
200+
<waitForPageLoad stepKey="waitForPageLoad1"/>
201+
<click selector="{{AdminCategorySidebarTreeSection.categoryInTree(CatName)}}" stepKey="navigateToCreatedCategory" />
202+
<waitForPageLoad stepKey="waitForPageLoad2"/>
203+
<waitForLoadingMaskToDisappear stepKey="waitForSpinner"/>
204+
<scrollToTopOfPage stepKey="scrollToToggle"/>
205+
<click selector="{{AdminCategoryMainActionsSection.CategoryStoreViewDropdownToggle}}" stepKey="openStoreViewDropDown"/>
206+
<click selector="{{AdminCategoryMainActionsSection.CategoryStoreViewOption(Store)}}" stepKey="selectStoreView"/>
207+
<waitForPageLoad stepKey="waitForPageLoad3"/>
208+
<waitForLoadingMaskToDisappear stepKey="waitForSpinner2"/>
209+
<click selector="{{AdminCategoryMainActionsSection.CategoryStoreViewModalAccept}}" stepKey="selectStoreViewAccept"/>
210+
<waitForPageLoad stepKey="waitForStoreViewChangeLoad"/>
211+
</actionGroup>
212+
193213
<actionGroup name="navigateToCreatedCategory">
194214
<arguments>
195215
<argument name="Category"/>

dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryBasicFieldSection.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,12 @@
1111
<section name="AdminCategoryBasicFieldSection">
1212
<element name="IncludeInMenu" type="checkbox" selector="input[name='include_in_menu']"/>
1313
<element name="includeInMenuLabel" type="text" selector="input[name='include_in_menu']+label"/>
14+
<element name="includeInMenuUseDefault" type="checkbox" selector="input[name='use_default[include_in_menu]']"/>
1415
<element name="EnableCategory" type="checkbox" selector="input[name='is_active']"/>
1516
<element name="enableCategoryLabel" type="text" selector="input[name='is_active']+label"/>
17+
<element name="enableUseDefault" type="checkbox" selector="input[name='use_default[is_active]']"/>
1618
<element name="CategoryNameInput" type="input" selector="input[name='name']"/>
19+
<element name="categoryNameUseDefault" type="checkbox" selector="input[name='use_default[name]']"/>
1720
<element name="ContentTab" type="input" selector="input[name='name']"/>
1821
<element name="FieldError" type="text" selector=".admin__field-error[data-bind='attr: {for: {{field}}}, text: error']" parameterized="true"/>
1922
</section>

dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategoryMainActionsSection.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,8 @@
1111
<section name="AdminCategoryMainActionsSection">
1212
<element name="SaveButton" type="button" selector=".page-actions-inner #save" timeout="30"/>
1313
<element name="DeleteButton" type="button" selector=".page-actions-inner #delete" timeout="30"/>
14+
<element name="CategoryStoreViewDropdownToggle" type="button" selector="#store-change-button"/>
15+
<element name="CategoryStoreViewOption" type="button" selector="//div[contains(@class, 'store-switcher')]//a[normalize-space()='{{store}}']" parameterized="true"/>
16+
<element name="CategoryStoreViewModalAccept" type="button" selector=".modal-popup.confirm._show .action-accept"/>
1417
</section>
1518
</sections>

dev/tests/acceptance/tests/functional/Magento/FunctionalTest/Catalog/Section/AdminCategorySEOSection.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
<section name="AdminCategorySEOSection">
1212
<element name="SectionHeader" type="button" selector="div[data-index='search_engine_optimization']" timeout="30"/>
1313
<element name="UrlKeyInput" type="input" selector="input[name='url_key']"/>
14+
<element name="UrlKeyDefaultValueCheckbox" type="button" selector="input[name='use_default[url_key]']"/>
15+
<element name="UrlKeyRedirectCheckbox" type="button" selector="[data-index='url_key_create_redirect'] input[type='checkbox']"/>
1416
<element name="MetaTitleInput" type="input" selector="input[name='meta_title']"/>
1517
<element name="MetaKeywordsInput" type="textarea" selector="textarea[name='meta_keywords']"/>
1618
<element name="MetaDescriptionInput" type="textarea" selector="textarea[name='meta_description']"/>
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+
9+
<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/magento2-functional-testing-framework/src/Magento/FunctionalTestingFramework/Test/etc/testSchema.xsd">
11+
<test name="AdminUpdateCategoryStoreUrlKeyTest">
12+
<annotations>
13+
<features value="SEO-friendly URL Key Update"/>
14+
<stories value="Update SEO-friendly URL via the Admin"/>
15+
<title value="SEO-friendly URL should update regardless of scope or redirect change."/>
16+
<description value="SEO-friendly URL should update regardless of scope or redirect change."/>
17+
<severity value="CRITICAL"/>
18+
<testCaseId value="MAGETWO-92338"/>
19+
<group value="category"/>
20+
</annotations>
21+
<after>
22+
<actionGroup ref="DeleteCategory" stepKey="deleteCategory">
23+
<argument name="categoryEntity" value="_defaultCategory"/>
24+
</actionGroup>
25+
<amOnPage url="admin/admin/auth/logout/" stepKey="amOnLogoutPage"/>
26+
</after>
27+
28+
<!-- Create category, change store view to default -->
29+
<actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/>
30+
<amOnPage url="{{AdminCategoryPage.url}}" stepKey="navigateToCategoryPage"/>
31+
<waitForPageLoad stepKey="waitForPageLoad1"/>
32+
<actionGroup ref="CreateCategory" stepKey="createCategory">
33+
<argument name="categoryEntity" value="_defaultCategory"/>
34+
</actionGroup>
35+
36+
<!--Switch to "Default Store View" scope-->
37+
<actionGroup ref="switchCategoryStoreView" stepKey="SwitchStoreView">
38+
<argument name="Store" value="_defaultStore.name"/>
39+
<argument name="CatName" value="_defaultCategory.name"/>
40+
</actionGroup>
41+
<!--See "Use Default Value" checkboxes-->
42+
<seeElement selector="{{AdminCategoryBasicFieldSection.enableUseDefault}}" stepKey="seeUseDefaultEnable"/>
43+
<seeElement selector="{{AdminCategoryBasicFieldSection.includeInMenuUseDefault}}" stepKey="seeUseDefaultMenu"/>
44+
<seeElement selector="{{AdminCategoryBasicFieldSection.categoryNameUseDefault}}" stepKey="seeUseDefaultName"/>
45+
<!-- Update SEO key, uncheck "Create Redirect", confirm in frontend -->
46+
<click selector="{{AdminCategorySEOSection.SectionHeader}}" stepKey="openSeoSection"/>
47+
<uncheckOption selector="{{AdminCategorySEOSection.UrlKeyDefaultValueCheckbox}}" stepKey="uncheckUseDefaultUrlKey"/>
48+
<fillField selector="{{AdminCategorySEOSection.UrlKeyInput}}" userInput="{{_defaultCategory.name_lwr}}-hattest" stepKey="enterURLKey"/>
49+
<uncheckOption selector="{{AdminCategorySEOSection.UrlKeyRedirectCheckbox}}" stepKey="uncheckRedirect1"/>
50+
<click selector="{{AdminCategoryMainActionsSection.SaveButton}}" stepKey="saveCategoryAfterFirstSeoUpdate"/>
51+
<seeElement selector="{{AdminCategoryMessagesSection.SuccessMessage}}" stepKey="assertSuccessMessage"/>
52+
<amOnPage url="" stepKey="goToStorefront"/>
53+
<waitForPageLoad stepKey="waitForFrontendLoad"/>
54+
<click stepKey="clickCategory" selector="{{StorefrontHeaderSection.NavigationCategoryByName(_defaultCategory.name)}}"/>
55+
<see selector="{{StorefrontCategoryMainSection.CategoryTitle}}" userInput="{{_defaultCategory.name}}" stepKey="assertCategoryOnStorefront"/>
56+
<seeInTitle userInput="{{_defaultCategory.name}}" stepKey="seeCategoryNameInTitle"/>
57+
<seeInCurrentUrl stepKey="verifyUrlKey" url="{{_defaultCategory.name_lwr}}-hattest.html"/>
58+
59+
<!-- Update SEO key to original, uncheck "Create Redirect", confirm in frontend, delete category -->
60+
<!--Switch to "Default Store View" scope-->
61+
<actionGroup ref="switchCategoryStoreView" stepKey="SwitchStoreView2">
62+
<argument name="Store" value="_defaultStore.name"/>
63+
<argument name="CatName" value="_defaultCategory.name"/>
64+
</actionGroup>
65+
<click selector="{{AdminCategorySEOSection.SectionHeader}}" stepKey="openSeoSection2"/>
66+
<fillField selector="{{AdminCategorySEOSection.UrlKeyInput}}" userInput="{{_defaultCategory.name_lwr}}" stepKey="enterOriginalURLKey"/>
67+
<uncheckOption selector="{{AdminCategorySEOSection.UrlKeyRedirectCheckbox}}" stepKey="uncheckRedirect2"/>
68+
<click selector="{{AdminCategoryMainActionsSection.SaveButton}}" stepKey="saveCategoryAfterOriginalSeoKey"/>
69+
<seeElement selector="{{AdminCategoryMessagesSection.SuccessMessage}}" stepKey="assertSuccessMessageAfterOriginalSeoKey"/>
70+
<amOnPage url="" stepKey="goToStorefrontAfterOriginalSeoKey"/>
71+
<waitForPageLoad stepKey="waitForFrontendLoadAfterOriginalSeoKey"/>
72+
<click stepKey="clickCategoryAfterOriginalSeoKey" selector="{{StorefrontHeaderSection.NavigationCategoryByName(_defaultCategory.name)}}"/>
73+
<see selector="{{StorefrontCategoryMainSection.CategoryTitle}}" userInput="{{_defaultCategory.name}}" stepKey="assertCategoryOnStorefront2"/>
74+
<seeInTitle userInput="{{_defaultCategory.name}}" stepKey="seeCategoryNameInTitle2"/>
75+
<seeInCurrentUrl stepKey="verifyUrlKeyAfterOriginalSeoKey" url="{{_defaultCategory.name_lwr}}.html"/>
76+
</test>
77+
</tests>

0 commit comments

Comments
 (0)