Skip to content

Commit 2a55512

Browse files
authored
ENGCOM-4238: Missed form validation in Admin Order Address Edit route sales/order/address #20840
2 parents 5376a81 + e61a73d commit 2a55512

File tree

3 files changed

+158
-3
lines changed

3 files changed

+158
-3
lines changed

app/code/Magento/Customer/Test/Mftf/Data/CustomerData.xml

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,19 @@
4646
<data key="website_id">0</data>
4747
<requiredEntity type="address">US_Address_TX</requiredEntity>
4848
</entity>
49+
<entity name="Simple_US_Customer_Incorrect_Name" type="customer">
50+
<data key="group_id">1</data>
51+
<data key="default_billing">true</data>
52+
<data key="default_shipping">true</data>
53+
<data key="email" unique="prefix">[email protected]</data>
54+
<data key="firstname">LoremIpsumLoremIpsumLoremIpsumLoremIpsumLoremIpsumLoremIpsumLoremIpsumLoremIpsumLoremIpsumLoremIpsumLoremIpsumLoremIpsumLoremIpsumLoremIpsumLoremIpsumLoremIpsumLoremIpsumLoremIpsumLoremIpsumLoremIpsumLoremIpsumLoremIpsumLoremIpsumLoremIpsumLoremIpsumLoremIpsum</data>
55+
<data key="lastname">Doe</data>
56+
<data key="fullname">John Doe</data>
57+
<data key="password">pwdTest123!</data>
58+
<data key="store_id">0</data>
59+
<data key="website_id">0</data>
60+
<requiredEntity type="address">US_Address_TX</requiredEntity>
61+
</entity>
4962
<entity name="Simple_Customer_Without_Address" type="customer">
5063
<data key="group_id">1</data>
5164
<data key="email" unique="prefix">[email protected]</data>
@@ -190,4 +203,4 @@
190203
<data key="store_id">0</data>
191204
<data key="website_id">0</data>
192205
</entity>
193-
</entities>
206+
</entities>

app/code/Magento/Sales/Block/Adminhtml/Order/Create/Form/AbstractForm.php

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,8 +176,8 @@ protected function _addAttributesToForm($attributes, \Magento\Framework\Data\For
176176
[
177177
'name' => $attribute->getAttributeCode(),
178178
'label' => __($attribute->getStoreLabel()),
179-
'class' => $attribute->getFrontendClass(),
180-
'required' => $attribute->isRequired()
179+
'class' => $this->getValidationClasses($attribute),
180+
'required' => $attribute->isRequired(),
181181
]
182182
);
183183
if ($inputType == 'multiline') {
@@ -227,4 +227,58 @@ public function getFormValues()
227227
{
228228
return [];
229229
}
230+
231+
/**
232+
* Retrieve frontend classes according validation rules
233+
*
234+
* @param \Magento\Customer\Api\Data\AttributeMetadataInterface $attribute
235+
*
236+
* @return string
237+
*/
238+
private function getValidationClasses(\Magento\Customer\Api\Data\AttributeMetadataInterface $attribute) : string
239+
{
240+
$out = [];
241+
$out[] = $attribute->getFrontendClass();
242+
243+
$textClasses = $this->getTextLengthValidateClasses($attribute);
244+
if (!empty($textClasses)) {
245+
$out = array_merge($out, $textClasses);
246+
}
247+
248+
$out = !empty($out) ? implode(' ', array_unique(array_filter($out))) : '';
249+
return $out;
250+
}
251+
252+
/**
253+
* Retrieve validation classes by min_text_length and max_text_length rules
254+
*
255+
* @param \Magento\Customer\Api\Data\AttributeMetadataInterface $attribute
256+
*
257+
* @return array
258+
*/
259+
private function getTextLengthValidateClasses(\Magento\Customer\Api\Data\AttributeMetadataInterface $attribute) : array
260+
{
261+
$classes = [];
262+
263+
$validateRules = $attribute->getValidationRules();
264+
if(!empty($validateRules)) {
265+
foreach ($validateRules as $rule) {
266+
switch ($rule->getName()) {
267+
case 'min_text_length' :
268+
$classes[] = 'minimum-length-' . $rule->getValue();
269+
break;
270+
271+
case 'max_text_length' :
272+
$classes[] = 'maximum-length-' . $rule->getValue();
273+
break;
274+
}
275+
}
276+
277+
if (!empty($classes)) {
278+
$classes[] = 'validate-length';
279+
}
280+
}
281+
282+
return $classes;
283+
}
230284
}
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
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="AdminSubmitsOrderWithAndWithoutFieldsValidationTest">
11+
<annotations>
12+
<features value="Sales"/>
13+
<stories value="Create orders"/>
14+
<title value="Fields validation is required to create an order from Admin Panel"/>
15+
<description value="Admin should not be able to submit orders without invalid address fields"/>
16+
<group value="sales"/>
17+
</annotations>
18+
<before>
19+
<createData entity="_defaultCategory" stepKey="createCategory"/>
20+
<createData entity="_defaultProduct" stepKey="createSimpleProduct">
21+
<requiredEntity createDataKey="createCategory"/>
22+
</createData>
23+
</before>
24+
<after>
25+
<deleteData createDataKey="createSimpleProduct" stepKey="deleteProduct"/>
26+
<deleteData createDataKey="createCategory" stepKey="deleteCategory"/>
27+
<amOnPage url="admin/admin/auth/logout/" stepKey="amOnLogoutPage"/>
28+
</after>
29+
<!--Create order via Admin-->
30+
<actionGroup ref="LoginAsAdmin" stepKey="loginAsAdmin"/>
31+
<comment userInput="Admin creates order" stepKey="adminCreateOrderComment"/>
32+
<!--<actionGroup ref="navigateToNewOrderPageNewCustomer" stepKey="navigateToNewOrderPage"/>-->
33+
<amOnPage url="{{AdminOrdersPage.url}}" stepKey="navigateToOrderIndexPage"/>
34+
<waitForPageLoad stepKey="waitForIndexPageLoad"/>
35+
<see selector="{{AdminHeaderSection.pageTitle}}" userInput="Orders" stepKey="seeIndexPageTitle"/>
36+
<click selector="{{AdminOrdersGridSection.createNewOrder}}" stepKey="clickCreateNewOrder"/>
37+
<click selector="{{AdminOrderFormActionSection.CreateNewCustomer}}" stepKey="clickCreateCustomer"/>
38+
<see selector="{{AdminHeaderSection.pageTitle}}" userInput="Create New Order" stepKey="seeNewOrderPageTitle"/>
39+
40+
<!--Check if order can be submitted without the required fields including email address-->
41+
<actionGroup ref="checkRequiredFieldsNewOrderForm" stepKey="checkRequiredFieldsNewOrder" after="seeNewOrderPageTitle"/>
42+
<scrollToTopOfPage stepKey="scrollToTopOfOrderFormPage" after="checkRequiredFieldsNewOrder"/>
43+
<actionGroup ref="addSimpleProductToOrder" stepKey="addSimpleProductToOrder" after="scrollToTopOfOrderFormPage">
44+
<argument name="product" value="_defaultProduct"/>
45+
</actionGroup>
46+
47+
<!--Fill customer group and customer email-->
48+
<selectOption selector="{{AdminOrderFormAccountSection.group}}" userInput="{{GeneralCustomerGroup.code}}" stepKey="selectCustomerGroup" after="addSimpleProductToOrder"/>
49+
<fillField selector="{{AdminOrderFormAccountSection.email}}" userInput="{{Simple_US_Customer.email}}" stepKey="fillCustomerEmail" after="selectCustomerGroup"/>
50+
51+
<!--Fill wrong customer address information-->
52+
<actionGroup ref="fillOrderCustomerInformation" stepKey="fillWrongCustomerAddress" after="fillCustomerEmail">
53+
<argument name="customer" value="Simple_US_Customer_Incorrect_Name"/>
54+
<argument name="address" value="US_Address_TX"/>
55+
</actionGroup>
56+
<!-- Select shipping -->
57+
<actionGroup ref="orderSelectFlatRateShipping" stepKey="selectFlatRateShipping"
58+
after="fillWrongCustomerAddress"/>
59+
60+
<!--Verify totals on Order page-->
61+
<see selector="{{AdminOrderFormTotalSection.total('Subtotal')}}" userInput="${{AdminOrderSimpleProduct.subtotal}}" stepKey="seeOrderSubTotal" after="selectFlatRateShipping"/>
62+
<see selector="{{AdminOrderFormTotalSection.total('Shipping')}}" userInput="${{AdminOrderSimpleProduct.shipping}}" stepKey="seeOrderShipping" after="seeOrderSubTotal"/>
63+
<scrollTo selector="{{AdminOrderFormTotalSection.grandTotal}}" stepKey="scrollToOrderGrandTotal"/>
64+
<see selector="{{AdminOrderFormTotalSection.grandTotal}}" userInput="${{AdminOrderSimpleProduct.grandTotal}}" stepKey="seeCorrectGrandTotal" after="scrollToOrderGrandTotal"/>
65+
66+
<!--Submit Order and verify information-->
67+
<click selector="{{AdminOrderFormActionSection.SubmitOrder}}" stepKey="clickSubmitOrderWrong"
68+
after="seeCorrectGrandTotal"/>
69+
<see selector="{{AdminOrderFormBillingAddressSection.firstNameError}}"
70+
userInput="Please enter less or equal than 255 symbols." stepKey="firstNameError"
71+
after="clickSubmitOrderWrong"/>
72+
73+
<!--Fill correct customer address information-->
74+
<actionGroup ref="fillOrderCustomerInformation" stepKey="fillCustomerAddress" after="firstNameError">
75+
<argument name="customer" value="Simple_US_Customer"/>
76+
<argument name="address" value="US_Address_TX"/>
77+
</actionGroup>
78+
79+
<!-- Select shipping -->
80+
<click selector="{{AdminOrderFormPaymentSection.getShippingMethods}}" stepKey="clickShipping" after="fillCustomerAddress"/>
81+
<click selector="{{AdminOrderFormPaymentSection.getShippingMethods}}" stepKey="selectShipping" after="clickShipping"/>
82+
83+
<!--Submit Order and verify information-->
84+
<click selector="{{AdminOrderFormActionSection.SubmitOrder}}" stepKey="clickSubmitOrder" after="selectShipping"/>
85+
<seeInCurrentUrl url="{{AdminOrderDetailsPage.url}}" stepKey="seeViewOrderPage" after="clickSubmitOrder"/>
86+
<see selector="{{AdminOrderDetailsMessagesSection.successMessage}}" userInput="You created the order." stepKey="seeSuccessMessage" after="seeViewOrderPage"/>
87+
</test>
88+
</tests>

0 commit comments

Comments
 (0)