Skip to content

Commit 28dde3c

Browse files
authored
Merge branch '2.4-develop' into fix-accepted-types-for-escaper-methods
2 parents 47aa3b3 + 3920c2b commit 28dde3c

File tree

62 files changed

+2400
-211
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+2400
-211
lines changed

app/code/Magento/AsynchronousOperations/Controller/Adminhtml/Index/Index.php

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,23 @@
66

77
namespace Magento\AsynchronousOperations\Controller\Adminhtml\Index;
88

9-
class Index extends \Magento\Backend\App\Action
9+
use Magento\Backend\App\Action;
10+
use Magento\Backend\App\Action\Context;
11+
use Magento\Framework\App\Action\HttpGetActionInterface;
12+
use Magento\Framework\View\Result\Page;
13+
use Magento\Framework\View\Result\PageFactory;
14+
15+
class Index extends Action implements HttpGetActionInterface
1016
{
1117
/**
1218
* Authorization level of a basic admin session
1319
*
1420
* @see _isAllowed()
1521
*/
16-
const ADMIN_RESOURCE = 'Magento_Logging::system_magento_logging_bulk_operations';
22+
public const ADMIN_RESOURCE = 'Magento_Logging::system_magento_logging_bulk_operations';
1723

1824
/**
19-
* @var \Magento\Framework\View\Result\PageFactory
25+
* @var PageFactory
2026
*/
2127
private $resultPageFactory;
2228

@@ -26,33 +32,24 @@ class Index extends \Magento\Backend\App\Action
2632
private $menuId;
2733

2834
/**
29-
* Details constructor.
30-
* @param \Magento\Backend\App\Action\Context $context
31-
* @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
35+
* @param Context $context
36+
* @param PageFactory $resultPageFactory
3237
* @param string $menuId
3338
*/
3439
public function __construct(
35-
\Magento\Backend\App\Action\Context $context,
36-
\Magento\Framework\View\Result\PageFactory $resultPageFactory,
40+
Context $context,
41+
PageFactory $resultPageFactory,
3742
$menuId = 'Magento_AsynchronousOperations::system_magento_logging_bulk_operations'
3843
) {
3944
$this->resultPageFactory = $resultPageFactory;
4045
$this->menuId = $menuId;
4146
parent::__construct($context);
4247
}
4348

44-
/**
45-
* @inheritDoc
46-
*/
47-
protected function _isAllowed()
48-
{
49-
return parent::_isAllowed();
50-
}
51-
5249
/**
5350
* Bulk list action
5451
*
55-
* @return \Magento\Framework\View\Result\Page
52+
* @return Page
5653
*/
5754
public function execute()
5855
{
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright 2025 Adobe
5+
* All Rights Reserved.
6+
*/
7+
-->
8+
<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
9+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
10+
<actionGroup name="AdminCreateCustomConditionWithMultipleSelectInCartPriceRuleActionGroup" extends="AdminCreateCustomConditionInCartPriceRuleActionGroup">
11+
<annotations>
12+
<description>Create custom condition in action tab in cart price rule</description>
13+
</annotations>
14+
<arguments>
15+
<argument name="productAttributeOption" type="string" defaultValue="{{productAttributeColour.black}}"/>
16+
</arguments>
17+
<remove keyForRemoval="fillCategoryId"/>
18+
<selectOption selector="{{AdminCartPriceRulesFormSection.ruleFieldByIndex('1--1--1')}}" userInput="{{productAttributeOption}}" stepKey="selectProductAttributeValue"/>
19+
</actionGroup>
20+
</actionGroups>

app/code/Magento/Backend/Test/Mftf/Data/BackenedData.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,8 @@
1414
<entity name="WebdriverKey">
1515
<data key="tabKey">[\Facebook\WebDriver\WebDriverKeys::TAB]</data>
1616
</entity>
17+
<entity name="productAttributeColour" type="productAttribute">
18+
<data key="gold">gold</data>
19+
<data key="black">black</data>
20+
</entity>
1721
</entities>
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright 2025 Adobe
5+
* All Rights Reserved.
6+
*/
7+
-->
8+
<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
9+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd">
10+
<test name="AdminProductAttributeAdminValuesUsedInsteadOfDefaultValueTest">
11+
<annotations>
12+
<features value="Backend"/>
13+
<stories value="Product attribute admin values should be used in backend"/>
14+
<title value="Product attribute admin values should be used instead of default store view values in backend"/>
15+
<description value="Verify that product attribute admin values should be used in cart price rule instead of default store view values in backend"/>
16+
<testCaseId value="AC-13048"/>
17+
<severity value="MINOR"/>
18+
<group value="backend"/>
19+
</annotations>
20+
<before>
21+
<createData entity="productAttributeMultiselectTwoOptions" stepKey="createColourProductAttribute"/>
22+
</before>
23+
<after>
24+
<!-- Delete cart price rule -->
25+
<actionGroup ref="DeleteCartPriceRuleByName" stepKey="deleteCartPriceRule">
26+
<argument name="ruleName" value="{{CustomSalesRuleWithNoCouponCode.name}}"/>
27+
</actionGroup>
28+
<!-- Delete attribute -->
29+
<actionGroup ref="NavigateToCreatedProductAttributeActionGroup" stepKey="openAttributeFromGrid">
30+
<argument name="ProductAttribute" value="$$createColourProductAttribute$$"/>
31+
</actionGroup>
32+
<actionGroup ref="DeleteProductAttributeByAttributeCodeActionGroup" stepKey="deleteProductAttribute"/>
33+
<actionGroup ref="AdminLogoutActionGroup" stepKey="logout"/>
34+
</after>
35+
<!-- Login as admin -->
36+
<actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/>
37+
<!--Step-1 Set Admin value & Default store view value in product attribute & Save the product -->
38+
<actionGroup ref="AdminOpenProductAttributePageActionGroup" stepKey="goToProductAttributes"/>
39+
<actionGroup ref="NavigateToCreatedProductAttributeActionGroup" stepKey="openAttributeFromGrid">
40+
<argument name="ProductAttribute" value="$$createColourProductAttribute$$"/>
41+
</actionGroup>
42+
<fillField selector="{{AttributePropertiesSection.DefaultLabel}}" userInput="$$createColourProductAttribute.attribute_code$$" stepKey="fillDefaultLabel"/>
43+
<actionGroup ref="CreateAttributeDropdownNthOptionActionGroup" stepKey="createColourOptionWhichAsDifferentValuesInAdminAndDefaultStoreView">
44+
<argument name="adminName" value="{{productAttributeColour.black}}"/>
45+
<argument name="frontName" value="{{productAttributeColour.gold}}"/>
46+
<argument name="row" value="1"/>
47+
</actionGroup>
48+
<actionGroup ref="AdminSaveProductAttributeActionGroup" stepKey="saveMultiSelectAttribute"/>
49+
<!-- Product Attribute added to default Attribute set -->
50+
<actionGroup ref="AdminOpenAttributeSetGridPageActionGroup" stepKey="openAttributeSetPage"/>
51+
<actionGroup ref="AdminOpenAttributeSetByNameActionGroup" stepKey="openDefaultAttributeSet"/>
52+
<actionGroup ref="AssignAttributeToGroupActionGroup" stepKey="assignAttributeToGroup">
53+
<argument name="group" value="Product Details"/>
54+
<argument name="attribute" value="$$createColourProductAttribute.attribute_code$$"/>
55+
</actionGroup>
56+
<actionGroup ref="SaveAttributeSetActionGroup" stepKey="saveAttributeSet"/>
57+
<!--Step 2: Create cart price rule with custom condition and verify admin value is displayed under product attribute combination -->
58+
<actionGroup ref="AdminCreateCartPriceRuleActionGroup" stepKey="createCartPriceRule">
59+
<argument name="ruleName" value="CustomSalesRuleWithNoCouponCode"/>
60+
</actionGroup>
61+
<actionGroup ref="AdminFilterCartPriceRuleActionGroup" stepKey="filterCreatedCartPriceRule">
62+
<argument name="ruleName" value="CustomSalesRuleWithNoCouponCode.name"/>
63+
</actionGroup>
64+
<actionGroup ref="AdminCreateCustomConditionWithMultipleSelectInCartPriceRuleActionGroup" stepKey="createProductAttributeCombinationCondition">
65+
<argument name="productAttribute" value="$$createColourProductAttribute.attribute_code$$"/>
66+
</actionGroup>
67+
<waitForText selector="{{AdminCartPriceRulesFormSection.ruleFieldByIndex('1--1--1')}}" userInput="{{productAttributeColour.black}}" stepKey="verifyAdminValueIsVisibleInTheConditionInsteadOfDefaultStoreViewValue"/>
68+
<dontSee selector="{{AdminCartPriceRulesFormSection.ruleFieldByIndex('1--1--1')}}" userInput="{{productAttributeColour.gold}}" stepKey="verifyDefaultStoreViewValueIsNotVisible"/>
69+
<actionGroup ref="AssertCartPriceRuleSuccessSaveMessageActionGroup" stepKey="saveAndAssertCartPriceRuleSuccessSaveMessage"/>
70+
</test>
71+
</tests>

app/code/Magento/Catalog/Observer/SetSpecialPriceStartDate.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,14 @@ public function execute(\Magento\Framework\Event\Observer $observer)
3939
/** @var $product \Magento\Catalog\Model\Product */
4040
$product = $observer->getEvent()->getProduct();
4141
if ($product->getSpecialPrice() && $product->getSpecialFromDate() === null) {
42-
$product->setData('special_from_date', $this->localeDate->date()->setTime(0, 0));
42+
// Set the special_from_date to the current date with time 00:00:00 when a special price is defined
43+
// but no start date is specified. This ensures the special price takes effect immediately
44+
// and is consistent with how the special price validation works in Magento.
45+
// The time is explicitly set to midnight to ensure the special price is active for the entire day.
46+
$product->setData(
47+
'special_from_date',
48+
$this->localeDate->date()->setTime(0, 0)->format('Y-m-d H:i:s')
49+
);
4350
}
4451
return $this;
4552
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright 2025 Adobe
5+
* All Rights Reserved.
6+
*/
7+
-->
8+
9+
<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
11+
<actionGroup name="AdminDisableCategoryPathForProductUrlActionGroup">
12+
<annotations>
13+
<description>Disable the category path for product url through CLI</description>
14+
</annotations>
15+
<magentoCLI command="config:set {{DisableCategoriesPathForProductUrls.path}} {{DisableCategoriesPathForProductUrls.value}}" stepKey="disableCategoriesPathForProductUrls"/>
16+
</actionGroup>
17+
</actionGroups>
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright 2025 Adobe
5+
* All Rights Reserved.
6+
*/
7+
-->
8+
9+
<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
11+
<actionGroup name="AdminDisableRememberCategoryPaginationActionGroup">
12+
<annotations>
13+
<description>Disable the remember category pagination through CLI</description>
14+
</annotations>
15+
<magentoCLI command="config:set {{DisableRememberCategoryPagination.path}} {{DisableRememberCategoryPagination.value}}" stepKey="disableCategoryPagination"/>
16+
</actionGroup>
17+
</actionGroups>
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright 2025 Adobe
5+
* All Rights Reserved.
6+
*/
7+
-->
8+
9+
<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
11+
<actionGroup name="AdminEnableCategoryPathForProductUrlActionGroup">
12+
<annotations>
13+
<description>Enable the category path for product url through CLI</description>
14+
</annotations>
15+
<magentoCLI command="config:set {{EnableCategoriesPathForProductUrls.path}} {{EnableCategoriesPathForProductUrls.value}}" stepKey="enableCategoriesPathForProductUrls"/>
16+
</actionGroup>
17+
</actionGroups>
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright 2025 Adobe
5+
* All Rights Reserved.
6+
*/
7+
-->
8+
9+
<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
11+
<actionGroup name="AdminEnableRememberCategoryPaginationActionGroup">
12+
<annotations>
13+
<description>Enable the remember category pagination through CLI</description>
14+
</annotations>
15+
<magentoCLI command="config:set {{EnableRememberCategoryPagination.path}} {{EnableRememberCategoryPagination.value}}" stepKey="enableCategoryPagination"/>
16+
</actionGroup>
17+
</actionGroups>
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright 2025 Adobe
5+
* All Rights Reserved.
6+
*/
7+
-->
8+
9+
<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
11+
<actionGroup name="AdminUpdateCategoryDisplaySettingsWithCustomValuesActionGroup"
12+
extends="AdminUpdateCategoryDisplaySettingsActionGroup">
13+
<annotations>
14+
<description>Update Category Display settings with custom values (unchecks Use Config first)</description>
15+
</annotations>
16+
<arguments>
17+
<argument name="availableSortOptions" type="string" defaultValue="Product Name"/>
18+
<argument name="defaultSortingOption" type="string" defaultValue="name"/>
19+
<argument name="priceRange" type="string" defaultValue="5.5"/>
20+
</arguments>
21+
<!-- Override the checkbox behavior to uncheck instead of check -->
22+
<remove keyForRemoval="enableTheAvailableProductList" />
23+
<uncheckOption selector="{{CategoryDisplaySettingsSection.productListCheckBox}}" after="selectDisplaySetting"
24+
stepKey="uncheckUseConfigForAvailableSort"/>
25+
<remove keyForRemoval="enableTheDefaultProductList" />
26+
<uncheckOption selector="{{CategoryDisplaySettingsSection.defaultProductLisCheckBox}}"
27+
after="scrollToDefaultProductList" stepKey="uncheckUseConfigForDefaultSort"/>
28+
</actionGroup>
29+
</actionGroups>

0 commit comments

Comments
 (0)