Skip to content

Commit 68f18e4

Browse files
committed
Merge branch 'ACP2E-1514' of https://github.com/magento-l3/magento2ce into PR01262023
2 parents e0f4873 + 6ba7a62 commit 68f18e4

File tree

3 files changed

+118
-2
lines changed

3 files changed

+118
-2
lines changed

app/code/Magento/Sales/Model/Reorder/Reorder.php

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,20 @@
99
use Magento\Catalog\Api\Data\ProductInterface;
1010
use Magento\Catalog\Model\Product;
1111
use Magento\Catalog\Model\ResourceModel\Product\Collection;
12+
use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory as ProductCollectionFactory;
13+
use Magento\Framework\DataObject;
1214
use Magento\Framework\Exception\InputException;
1315
use Magento\Framework\Exception\NoSuchEntityException;
1416
use Magento\Quote\Api\CartRepositoryInterface;
1517
use Magento\Quote\Api\Data\CartInterface;
1618
use Magento\Quote\Model\Cart\CustomerCartResolver;
17-
use Magento\Quote\Model\Quote;
1819
use Magento\Quote\Model\GuestCart\GuestCartResolver;
20+
use Magento\Quote\Model\Quote;
1921
use Magento\Sales\Api\Data\OrderItemInterface;
2022
use Magento\Sales\Helper\Reorder as ReorderHelper;
2123
use Magento\Sales\Model\Order\Item;
2224
use Magento\Sales\Model\OrderFactory;
2325
use Magento\Sales\Model\ResourceModel\Order\Item\Collection as ItemCollection;
24-
use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory as ProductCollectionFactory;
2526
use Psr\Log\LoggerInterface;
2627

2728
/**
@@ -30,6 +31,11 @@
3031
*/
3132
class Reorder
3233
{
34+
/**
35+
* Forbidden reorder item properties
36+
*/
37+
private const FORBIDDEN_REORDER_PROPERTIES = ['custom_price'];
38+
3339
/**#@+
3440
* Error message codes
3541
*/
@@ -254,6 +260,7 @@ private function getOrderProducts(string $storeId, array $orderItemProductIds):
254260
private function addItemToCart(OrderItemInterface $orderItem, Quote $cart, ProductInterface $product): void
255261
{
256262
$infoBuyRequest = $this->orderInfoBuyRequestGetter->getInfoBuyRequest($orderItem);
263+
$this->sanitizeBuyRequest($infoBuyRequest);
257264

258265
$addProductResult = null;
259266
try {
@@ -274,6 +281,21 @@ private function addItemToCart(OrderItemInterface $orderItem, Quote $cart, Produ
274281
}
275282
}
276283

284+
/**
285+
* Removes forbidden reorder item properties
286+
*
287+
* @param DataObject $dataObject
288+
* @return void
289+
*/
290+
private function sanitizeBuyRequest(DataObject $dataObject): void
291+
{
292+
foreach (self::FORBIDDEN_REORDER_PROPERTIES as $forbiddenProp) {
293+
if ($dataObject->hasData($forbiddenProp)) {
294+
$dataObject->unsetData($forbiddenProp);
295+
}
296+
}
297+
}
298+
277299
/**
278300
* Add order line item error
279301
*

app/code/Magento/Sales/Test/Mftf/Section/OrdersGridSection.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
<element name="setQuantity" type="checkbox" selector="//td[contains(., '{{arg}}')]/following-sibling::td[contains(@class, 'col-qty')]/input" parameterized="true"/>
2424
<element name="addProductsToOrder" type="button" selector="//span[text()='Add Selected Product(s) to Order']"/>
2525
<element name="customPrice" type="checkbox" selector="//span[.='{{arg}}']/parent::td/following-sibling::td/div//span[contains(text(),'Custom Price')]" parameterized="true"/>
26+
<element name="customPriceInput" type="input" selector="//span[.='{{arg}}']/parent::td/following-sibling::td/input[@class='input-text item-price admin__control-text']" parameterized="true"/>
2627
<element name="customQuantity" type="input" selector="//span[.='{{arg}}']/parent::td/following-sibling::td[@class='col-qty']/input" parameterized="true"/>
2728
<element name="update" type="button" selector="//span[text()='Update Items and Quantities']"/>
2829
<element name="discount" type="text" selector="//span[.='{{arg}}']/parent::td/following-sibling::td[@class='col-discount col-price']/span" parameterized="true"/>
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
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"
9+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd">
10+
<test name="StorefrontReorderAsCustomerCustomPrice">
11+
<annotations>
12+
<stories value="Reorder"/>
13+
<title value="Make reorder as customer on frontend"/>
14+
<description value="Make reorder with custom product price on frontend"/>
15+
<severity value="CRITICAL"/>
16+
<testCaseId value="AC-7712"/>
17+
<group value="sales"/>
18+
</annotations>
19+
<before>
20+
<!--Enable flat rate shipping-->
21+
<magentoCLI command="config:set {{EnableFlatRateConfigData.path}} {{EnableFlatRateConfigData.value}}"
22+
stepKey="enableFlatRate"/>
23+
24+
<createData entity="SimpleSubCategory" stepKey="createCategory"/>
25+
<createData entity="SimpleProduct" stepKey="createSimpleProduct">
26+
<field key="price">100.00</field>
27+
<requiredEntity createDataKey="createCategory"/>
28+
</createData>
29+
30+
<!-- Create Customer Account -->
31+
<createData entity="Simple_US_Customer" stepKey="createCustomer"/>
32+
33+
<actionGroup ref="AdminLoginActionGroup" stepKey="LoginAsAdmin"/>
34+
</before>
35+
<after>
36+
<!-- Disable shipping method for customer with default address -->
37+
<magentoCLI command="config:set {{DisableFlatRateConfigData.path}} {{DisableFlatRateConfigData.value}}"
38+
stepKey="disableFlatRate"/>
39+
<actionGroup ref="AdminLogoutActionGroup" stepKey="LogoutAsAdmin"/>
40+
<deleteData createDataKey="createSimpleProduct" stepKey="deleteSimpleProduct"/>
41+
<deleteData createDataKey="createCategory" stepKey="deleteCategory"/>
42+
<deleteData createDataKey="createCustomer" stepKey="deleteCustomer"/>
43+
</after>
44+
<!-- Create new order -->
45+
<actionGroup ref="NavigateToNewOrderPageExistingCustomerActionGroup" stepKey="CreateNewOrder">
46+
<argument name="customer" value="Simple_US_Customer"/>
47+
</actionGroup>
48+
49+
<!-- Add product to order -->
50+
<actionGroup ref="AddSimpleProductToOrderActionGroup" stepKey="addProductToOrder">
51+
<argument name="product" value="$$createSimpleProduct$$"/>
52+
<argument name="productQty" value="1"/>
53+
</actionGroup>
54+
<waitForPageLoad stepKey="WaitForProductAdd"/>
55+
<waitForLoadingMaskToDisappear stepKey="WaitForProductAddLoading"/>
56+
57+
<!-- Set product custom price -->
58+
<click selector="{{OrdersGridSection.customPrice($$createSimpleProduct.name$$)}}" stepKey="ClickOnCustomPrice"/>
59+
<fillField selector="{{OrdersGridSection.customPriceInput($$createSimpleProduct.name$$)}}" userInput="10.00"
60+
stepKey="FillCustomPrice"/>
61+
<click selector="{{AdminOrderFormItemsSection.updateItemsAndQuantities}}" stepKey="clickUpdateItemsAndQuantities"/>
62+
<waitForPageLoad stepKey="waitForItemsAndQuantitiesUpdating"/>
63+
64+
<!--Select FlatRate shipping method-->
65+
<actionGroup ref="OrderSelectFlatRateShippingActionGroup" stepKey="orderSelectFlatRateShippingMethod"/>
66+
67+
<!--Submit order-->
68+
<click selector="{{AdminOrderFormActionSection.SubmitOrder}}" stepKey="submitOrder"/>
69+
<waitForPageLoad stepKey="WaitForOrderSubmit"/>
70+
71+
<!--Login customer on storefront-->
72+
<actionGroup ref="LoginToStorefrontActionGroup" stepKey="loginCustomer">
73+
<argument name="Customer" value="$$createCustomer$$" />
74+
</actionGroup>
75+
76+
<!-- Go to my Orders page -->
77+
<amOnPage url="{{StorefrontCustomerDashboardPage.url}}" stepKey="onMyAccount"/>
78+
<waitForPageLoad stepKey="waitForAccountPage"/>
79+
<click selector="{{StorefrontCustomerSidebarSection.sidebarTab('My Orders')}}" stepKey="clickOnMyOrders"/>
80+
<waitForPageLoad stepKey="waitForOrdersLoad"/>
81+
82+
<!-- Clicking on Reorder link from Order Details Tab -->
83+
<click selector="{{StorefrontCustomerOrderViewSection.reorder}}" stepKey="clickReorder"/>
84+
85+
<!-- Validate product subtotal -->
86+
<actionGroup ref="StorefrontCheckCartActionGroup" stepKey="cartAssertCart">
87+
<argument name="subtotal" value="100.00"/>
88+
<argument name="shipping" value="5.00"/>
89+
<argument name="shippingMethod" value="Flat Rate - Fixed"/>
90+
<argument name="total" value="105.00"/>
91+
</actionGroup>
92+
</test>
93+
</tests>

0 commit comments

Comments
 (0)