Skip to content

Commit 72fef34

Browse files
authored
Merge pull request #6731 from magento-l3/L3-PR-20210324
L3-PR-20210324
2 parents 9756182 + 6ff3414 commit 72fef34

File tree

30 files changed

+1509
-283
lines changed

30 files changed

+1509
-283
lines changed

app/code/Magento/Captcha/Test/Mftf/Data/CaptchaConfigData.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,12 @@
4646
<data key="label">Change password</data>
4747
<data key="value">user_edit</data>
4848
</entity>
49+
<entity name="StorefrontCaptchaOnOnepageCheckoutConfigData">
50+
<data key="path">customer/captcha/forms</data>
51+
<data key="scope_id">0</data>
52+
<data key="label">Checkout/Placing Order</data>
53+
<data key="value">payment_processing_request</data>
54+
</entity>
4955
<entity name="StorefrontCaptchaOnCustomerForgotPasswordConfigData">
5056
<!-- Magento default value -->
5157
<data key="path">customer/captcha/forms</data>
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
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+
<sections xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Page/etc/SectionObject.xsd">
11+
<section name="StorefrontCaptchaOnOnepageCheckoutPyamentSection">
12+
<element name="captchaField" type="input" selector="#captcha_payment_processing_request"/>
13+
<element name="captchaImg" type="block" selector=".captcha-img"/>
14+
<element name="captchaReload" type="block" selector=".captcha-reload"/>
15+
</section>
16+
</sections>
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 © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
9+
<sections xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Page/etc/SectionObject.xsd">
11+
<section name="StorefrontCheckoutPaymentMethodsSection">
12+
<element name="purchaseOrder" type="radio" selector="#purchaseorder" timeout="30"/>
13+
<element name="purchaseOrderNumber" type="input" selector="#po_number" timeout="30"/>
14+
<element name="bankTransfer" type="radio" selector="#banktransfer" timeout="30"/>
15+
<element name="cashOnDelivery" type="radio" selector="#cashondelivery" timeout="30"/>
16+
</section>
17+
</sections>
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
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="urn:magento:mftf:Test/etc/testSchema.xsd">
11+
<test name="StorefrontCaptchaOnOnepageCheckoutPyamentTest">
12+
<annotations>
13+
<features value="Captcha"/>
14+
<stories value="Place order on checkout page + Captcha"/>
15+
<title value="Captcha on checkout page test"/>
16+
<description value="Test creation of order on storefront checkout page with captcha."/>
17+
<severity value="AVERAGE"/>
18+
<testCaseId value="MC-41461"/>
19+
<useCaseId value="MC-41281"/>
20+
<group value="captcha"/>
21+
</annotations>
22+
<before>
23+
<!-- Create Simple Product -->
24+
<createData entity="SimpleProduct2" stepKey="createSimpleProduct">
25+
<field key="price">20</field>
26+
</createData>
27+
28+
<!-- Create customer -->
29+
<createData entity="Simple_Customer_Without_Address" stepKey="createCustomer"/>
30+
31+
<!-- Enable payment method -->
32+
<magentoCLI command="config:set {{BankTransferEnableConfigData.path}} {{BankTransferEnableConfigData.value}}" stepKey="enableBankTransfer"/>
33+
34+
<!-- Enable captcha for Checkout/Placing Order -->
35+
<magentoCLI command="config:set {{StorefrontCaptchaOnOnepageCheckoutConfigData.path}} {{StorefrontCaptchaOnOnepageCheckoutConfigData.value}}" stepKey="enableOnOpageCheckoutCaptcha" />
36+
<magentoCLI command="config:set {{StorefrontCustomerCaptchaModeAlwaysConfigData.path}} {{StorefrontCustomerCaptchaModeAlwaysConfigData.value}}" stepKey="alwaysEnableCaptcha" />
37+
<magentoCLI command="config:set {{StorefrontCustomerCaptchaLength3ConfigData.path}} {{StorefrontCustomerCaptchaLength3ConfigData.value}}" stepKey="setCaptchaLength" />
38+
<magentoCLI command="config:set {{StorefrontCustomerCaptchaSymbols1ConfigData.path}} {{StorefrontCustomerCaptchaSymbols1ConfigData.value}}" stepKey="setCaptchaSymbols" />
39+
<actionGroup ref="CliCacheCleanActionGroup" stepKey="cleanInvalidatedCaches">
40+
<argument name="tags" value="config full_page"/>
41+
</actionGroup>
42+
</before>
43+
<after>
44+
<!-- Disabled payment method -->
45+
<magentoCLI command="config:set {{BankTransferDisabledConfigData.path}} {{BankTransferDisabledConfigData.value}}" stepKey="disabledBankTransfer"/>
46+
47+
<!-- Set default configuration for captcha -->
48+
<magentoCLI command="config:set {{StorefrontCaptchaOnOnepageCheckoutConfigData.path}} {{StorefrontCaptchaOnOnepageCheckoutConfigData.value}},{{StorefrontCaptchaOnCustomerForgotPasswordConfigData.value}}" stepKey="enableCaptchaOnDefaultForms" />
49+
<magentoCLI command="config:set {{StorefrontCustomerCaptchaModeAfterFailConfigData.path}} {{StorefrontCustomerCaptchaModeAfterFailConfigData.value}}" stepKey="defaultCaptchaMode" />
50+
<magentoCLI command="config:set {{StorefrontCustomerCaptchaDefaultLengthConfigData.path}} {{StorefrontCustomerCaptchaDefaultLengthConfigData.value}}" stepKey="setDefaultCaptchaLength" />
51+
<magentoCLI command="config:set {{StorefrontCustomerCaptchaDefaultSymbolsConfigData.path}} {{StorefrontCustomerCaptchaDefaultSymbolsConfigData.value}}" stepKey="setDefaultCaptchaSymbols" />
52+
<actionGroup ref="CliCacheCleanActionGroup" stepKey="cleanInvalidatedCaches">
53+
<argument name="tags" value="config full_page"/>
54+
</actionGroup>
55+
56+
<!-- Customer logout -->
57+
<actionGroup ref="StorefrontCustomerLogoutActionGroup" stepKey="customerLogout"/>
58+
59+
<!-- Delete created products -->
60+
<deleteData createDataKey="createSimpleProduct" stepKey="deleteSimpleProduct"/>
61+
62+
<!-- Delete customer -->
63+
<deleteData createDataKey="createCustomer" stepKey="deleteCustomer"/>
64+
</after>
65+
66+
<!-- Reindex and flush cache -->
67+
<actionGroup ref="CliIndexerReindexActionGroup" stepKey="reindex">
68+
<argument name="indices" value=""/>
69+
</actionGroup>
70+
<actionGroup ref="CliCacheFlushActionGroup" stepKey="flushCache">
71+
<argument name="tags" value=""/>
72+
</actionGroup>
73+
74+
<!-- Add Simple Product to cart -->
75+
<amOnPage url="{{StorefrontProductPage.url($$createSimpleProduct.custom_attributes[url_key]$$)}}" stepKey="navigateToSimpleProductPage"/>
76+
<waitForPageLoad stepKey="waitForSimpleProductPageLoad"/>
77+
<actionGroup ref="AddToCartFromStorefrontProductPageActionGroup" stepKey="addToCartSimpleProductFromStorefrontProductPage">
78+
<argument name="productName" value="$$createSimpleProduct.name$$"/>
79+
</actionGroup>
80+
81+
<!-- Go to shopping cart -->
82+
<actionGroup ref="ClickViewAndEditCartFromMiniCartActionGroup" stepKey="goToShoppingCartFromMinicart"/>
83+
<actionGroup ref="FillShippingZipForm" stepKey="fillShippingZipForm">
84+
<argument name="address" value="US_Address_CA"/>
85+
</actionGroup>
86+
<actionGroup ref="StorefrontClickProceedToCheckoutActionGroup" stepKey="goToCheckout"/>
87+
88+
<!-- Login as customer on checkout page -->
89+
<actionGroup ref="LoginAsCustomerOnCheckoutPageActionGroup" stepKey="customerLogin">
90+
<argument name="customer" value="$$createCustomer$$"/>
91+
</actionGroup>
92+
93+
<!-- Fill customer new shipping address -->
94+
<actionGroup ref="CustomerCheckoutFillNewShippingAddressActionGroup" stepKey="fillShippingAddress">
95+
<argument name="address" value="US_Address_TX"/>
96+
</actionGroup>
97+
98+
<!-- Click next button to open payment section -->
99+
<actionGroup ref="StorefrontGuestCheckoutProceedToPaymentStepActionGroup" stepKey="clickNext"/>
100+
101+
<!-- Select payment method -->
102+
<waitForElement selector="{{CheckoutPaymentSection.paymentSectionTitle}}" stepKey="waitForPaymentSectionLoaded"/>
103+
<click selector="{{StorefrontCheckoutPaymentMethodsSection.bankTransfer}}" stepKey="selectBankTransferMethod"/>
104+
105+
<!-- Enter captcha value -->
106+
<fillField userInput="{{PreconfiguredCaptcha.value}}" selector="{{StorefrontCaptchaOnOnepageCheckoutPyamentSection.captchaField}}" stepKey="fillCaptchaField" />
107+
108+
<!-- Place Order -->
109+
<actionGroup ref="CheckoutPlaceOrderActionGroup" stepKey="customerPlaceOrder">
110+
<argument name="orderNumberMessage" value="CONST.successCheckoutOrderNumberMessage"/>
111+
<argument name="emailYouMessage" value="CONST.successCheckoutEmailYouMessage"/>
112+
</actionGroup>
113+
114+
<!-- Assert order grand total -->
115+
<amOnPage url="{{StorefrontCustomerDashboardPage.url}}" stepKey="navigateToCustomerDashboardPage"/>
116+
<waitForPageLoad stepKey="waitForCustomerDashboardPageLoad"/>
117+
<see selector="{{StorefrontCustomerRecentOrdersSection.orderTotal}}" userInput="$25.00" stepKey="checkOrderTotalInStorefront"/>
118+
</test>
119+
</tests>

app/code/Magento/Captcha/view/frontend/web/js/action/refresh.js

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,21 @@
44
*/
55

66
define([
7-
'mage/storage'
8-
], function (storage) {
7+
'jquery', 'mage/url'
8+
], function ($, urlBuilder) {
99
'use strict';
1010

1111
return function (refreshUrl, formId, imageSource) {
12-
return storage.post(
13-
refreshUrl,
14-
JSON.stringify({
12+
return $.ajax({
13+
url: urlBuilder.build(refreshUrl),
14+
type: 'POST',
15+
async: false,
16+
data: JSON.stringify({
1517
'formId': formId
1618
}),
17-
false
18-
).done(
19+
global: false,
20+
contentType: 'application/json'
21+
}).done(
1922
function (response) {
2023
if (response.imgSrc) {
2124
imageSource(response.imgSrc);
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
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="urn:magento:mftf:Test/etc/testSchema.xsd">
11+
<test name="OnePageCheckoutCancelEditingBillingAddress">
12+
<annotations>
13+
<features value="OnePageCheckout"/>
14+
<stories value="MC-39581: Billing Address empty after going back and forth between shipping and payment step"/>
15+
<title value="Billing Address empty after going back and forth between shipping and payment step"/>
16+
<description value="Check billing address editing cancelation during checkout on the payment step"/>
17+
<severity value="AVERAGE"/>
18+
<group value="checkout"/>
19+
</annotations>
20+
<before>
21+
<!-- Create Simple Product -->
22+
<createData entity="SimpleProduct2" stepKey="createSimpleProduct">
23+
<field key="price">160</field>
24+
</createData>
25+
</before>
26+
<after>
27+
<!-- Delete created product -->
28+
<deleteData createDataKey="createSimpleProduct" stepKey="deleteSimpleProduct"/>
29+
</after>
30+
31+
<!-- Add Simple Product to cart -->
32+
<amOnPage url="{{StorefrontProductPage.url($$createSimpleProduct.custom_attributes[url_key]$$)}}" stepKey="navigateToSimpleProductPage"/>
33+
<waitForPageLoad stepKey="waitForSimpleProductPageLoad"/>
34+
<actionGroup ref="AddToCartFromStorefrontProductPageActionGroup" stepKey="addToCartFromStorefrontProductPage">
35+
<argument name="productName" value="$$createSimpleProduct.name$$"/>
36+
</actionGroup>
37+
38+
<!-- Navigate to checkout -->
39+
<actionGroup ref="GoToCheckoutFromMinicartActionGroup" stepKey="goToCheckoutFromMinicart"/>
40+
<!-- Fill shipping address -->
41+
<actionGroup ref="GuestCheckoutFillingShippingSectionActionGroup" stepKey="guestCheckoutFillingShipping">
42+
<argument name="shippingMethod" value="Flat Rate"/>
43+
</actionGroup>
44+
45+
<!-- Change the address -->
46+
47+
<waitForElementVisible selector="{{CheckoutPaymentSection.billingAddressNotSameCheckbox}}" stepKey="waitForElementToBeVisible"/>
48+
<uncheckOption selector="{{CheckoutPaymentSection.billingAddressNotSameCheckbox}}" stepKey="uncheckSameBillingAndShippingAddress"/>
49+
<conditionalClick selector="{{CheckoutShippingSection.editActiveAddressButton}}" dependentSelector="{{CheckoutShippingSection.editActiveAddressButton}}" visible="true" stepKey="clickEditButton"/>
50+
<waitForLoadingMaskToDisappear stepKey="waitForLoadingMask"/>
51+
52+
<!-- Fill in New Billing Address -->
53+
<actionGroup ref="StorefrontFillBillingAddressActionGroup" stepKey="fillBillingAddress">
54+
<argument name="address" value="US_Address_CA"/>
55+
</actionGroup>
56+
<selectOption selector="{{CheckoutPaymentSection.guestRegion}}" userInput="{{US_Address_CA.state}}" stepKey="selectRegion"/>
57+
<click selector="{{CheckoutPaymentSection.update}}" stepKey="clickOnUpdateButton"/>
58+
59+
60+
<!-- Edit Billing Address -->
61+
<click selector="{{CheckoutShippingSection.editAddressButton}}" stepKey="clickOnEditButton"/>
62+
<fillField selector="{{CheckoutPaymentSection.guestFirstName}}" userInput="" stepKey="enterEmptyFirstName"/>
63+
<fillField selector="{{CheckoutPaymentSection.guestLastName}}" userInput="" stepKey="enterEmptyLastName"/>
64+
65+
<!-- Cancel Editing Billing Address -->
66+
<click selector="{{CheckoutHeaderSection.shippingMethodStep}}" stepKey="goToShipping"/>
67+
<actionGroup ref="StorefrontCheckoutClickNextButtonActionGroup" stepKey="clickOnNextButton"/>
68+
69+
<!-- Place order -->
70+
<waitForElement selector="{{CheckoutPaymentSection.paymentSectionTitle}}" stepKey="waitForPaymentSectionLoaded"/>
71+
<click selector="{{CheckoutPaymentSection.placeOrder}}" stepKey="clickPlaceOrderButton"/>
72+
<seeElement selector="{{CheckoutSuccessMainSection.success}}" stepKey="orderIsSuccessfullyPlaced"/>
73+
</test>
74+
</tests>

app/code/Magento/Checkout/view/frontend/web/js/view/billing-address.js

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ define([
1818
'Magento_Checkout/js/action/set-billing-address',
1919
'Magento_Ui/js/model/messageList',
2020
'mage/translate',
21-
'Magento_Checkout/js/model/billing-address-postcode-validator'
21+
'Magento_Checkout/js/model/billing-address-postcode-validator',
22+
'Magento_Checkout/js/model/address-converter'
2223
],
2324
function (
2425
ko,
@@ -35,11 +36,14 @@ function (
3536
setBillingAddressAction,
3637
globalMessageList,
3738
$t,
38-
billingAddressPostcodeValidator
39+
billingAddressPostcodeValidator,
40+
addressConverter
3941
) {
4042
'use strict';
4143

4244
var lastSelectedBillingAddress = null,
45+
addressUpadated = false,
46+
addressEdited = false,
4347
countryData = customerData.get('directory-data'),
4448
addressOptions = addressList().filter(function (address) {
4549
return address.getType() === 'customer-address';
@@ -140,6 +144,8 @@ function (
140144
updateAddress: function () {
141145
var addressData, newBillingAddress;
142146

147+
addressUpadated = true;
148+
143149
if (this.selectedAddress() && !this.isAddressFormVisible()) {
144150
selectBillingAddress(this.selectedAddress());
145151
checkoutData.setSelectedBillingAddress(this.selectedAddress().getKey());
@@ -172,6 +178,8 @@ function (
172178
* Edit address action
173179
*/
174180
editAddress: function () {
181+
addressUpadated = false;
182+
addressEdited = true;
175183
lastSelectedBillingAddress = quote.billingAddress();
176184
quote.billingAddress(null);
177185
this.isAddressDetailsVisible(false);
@@ -181,6 +189,7 @@ function (
181189
* Cancel address edit action
182190
*/
183191
cancelAddressEdit: function () {
192+
addressUpadated = true;
184193
this.restoreBillingAddress();
185194

186195
if (quote.billingAddress()) {
@@ -201,12 +210,26 @@ function (
201210
return quote.billingAddress() || lastSelectedBillingAddress;
202211
}),
203212

213+
/**
214+
* Check if Billing Address Changes should be canceled
215+
*/
216+
needCancelBillingAddressChanges: function () {
217+
if (addressEdited && !addressUpadated) {
218+
this.cancelAddressEdit();
219+
}
220+
},
221+
204222
/**
205223
* Restore billing address
206224
*/
207225
restoreBillingAddress: function () {
226+
var lastBillingAddress;
227+
208228
if (lastSelectedBillingAddress != null) {
209229
selectBillingAddress(lastSelectedBillingAddress);
230+
lastBillingAddress = addressConverter.quoteAddressToFormAddressData(lastSelectedBillingAddress);
231+
232+
checkoutData.setNewCustomerBillingAddress(lastBillingAddress);
210233
}
211234
},
212235

app/code/Magento/Checkout/view/frontend/web/js/view/progress-bar.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@ define([
88
'underscore',
99
'ko',
1010
'uiComponent',
11-
'Magento_Checkout/js/model/step-navigator'
12-
], function ($, _, ko, Component, stepNavigator) {
11+
'Magento_Checkout/js/model/step-navigator',
12+
'Magento_Checkout/js/view/billing-address'
13+
], function ($, _, ko, Component, stepNavigator, billingAddress) {
1314
'use strict';
1415

1516
var steps = stepNavigator.steps;
@@ -52,6 +53,9 @@ define([
5253
* @param {Object} step
5354
*/
5455
navigateTo: function (step) {
56+
if (step.code === 'shipping') {
57+
billingAddress().needCancelBillingAddressChanges();
58+
}
5559
stepNavigator.navigateTo(step.code);
5660
},
5761

0 commit comments

Comments
 (0)