Skip to content

Commit e70273a

Browse files
committed
Merge remote-tracking branch 'origin/2.3-develop' into MC-18719
2 parents 06a2513 + 3ee05a4 commit e70273a

File tree

56 files changed

+1412
-176
lines changed

Some content is hidden

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

56 files changed

+1412
-176
lines changed
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Braintree\Gateway\Request;
7+
8+
use Magento\Payment\Gateway\Request\BuilderInterface;
9+
use Magento\Braintree\Gateway\SubjectReader;
10+
11+
/**
12+
* Class BillingAddressDataBuilder
13+
*/
14+
class BillingAddressDataBuilder implements BuilderInterface
15+
{
16+
/**
17+
* @var SubjectReader
18+
*/
19+
private $subjectReader;
20+
21+
/**
22+
* BillingAddress block name
23+
*/
24+
private const BILLING_ADDRESS = 'billing';
25+
26+
/**
27+
* The customer’s company. 255 character maximum.
28+
*/
29+
private const COMPANY = 'company';
30+
31+
/**
32+
* The first name value must be less than or equal to 255 characters.
33+
*/
34+
private const FIRST_NAME = 'firstName';
35+
36+
/**
37+
* The last name value must be less than or equal to 255 characters.
38+
*/
39+
private const LAST_NAME = 'lastName';
40+
41+
/**
42+
* The street address. Maximum 255 characters, and must contain at least 1 digit.
43+
* Required when AVS rules are configured to require street address.
44+
*/
45+
private const STREET_ADDRESS = 'streetAddress';
46+
47+
/**
48+
* The postal code. Postal code must be a string of 5 or 9 alphanumeric digits,
49+
* optionally separated by a dash or a space. Spaces, hyphens,
50+
* and all other special characters are ignored.
51+
*/
52+
private const POSTAL_CODE = 'postalCode';
53+
54+
/**
55+
* The ISO 3166-1 alpha-2 country code specified in an address.
56+
* The gateway only accepts specific alpha-2 values.
57+
*
58+
* @link https://developers.braintreepayments.com/reference/general/countries/php#list-of-countries
59+
*/
60+
private const COUNTRY_CODE = 'countryCodeAlpha2';
61+
62+
/**
63+
* The extended address information—such as apartment or suite number. 255 character maximum.
64+
*/
65+
private const EXTENDED_ADDRESS = 'extendedAddress';
66+
67+
/**
68+
* The locality/city. 255 character maximum.
69+
*/
70+
private const LOCALITY = 'locality';
71+
72+
/**
73+
* The state or province. For PayPal addresses, the region must be a 2-letter abbreviation;
74+
*/
75+
private const REGION = 'region';
76+
77+
/**
78+
* @param SubjectReader $subjectReader
79+
*/
80+
public function __construct(SubjectReader $subjectReader)
81+
{
82+
$this->subjectReader = $subjectReader;
83+
}
84+
85+
/**
86+
* @inheritdoc
87+
*/
88+
public function build(array $buildSubject)
89+
{
90+
$paymentDO = $this->subjectReader->readPayment($buildSubject);
91+
92+
$result = [];
93+
$order = $paymentDO->getOrder();
94+
95+
$billingAddress = $order->getBillingAddress();
96+
if ($billingAddress) {
97+
$result[self::BILLING_ADDRESS] = [
98+
self::REGION => $billingAddress->getRegionCode(),
99+
self::POSTAL_CODE => $billingAddress->getPostcode(),
100+
self::COUNTRY_CODE => $billingAddress->getCountryId(),
101+
self::FIRST_NAME => $billingAddress->getFirstname(),
102+
self::STREET_ADDRESS => $billingAddress->getStreetLine1(),
103+
self::LAST_NAME => $billingAddress->getLastname(),
104+
self::COMPANY => $billingAddress->getCompany(),
105+
self::EXTENDED_ADDRESS => $billingAddress->getStreetLine2(),
106+
self::LOCALITY => $billingAddress->getCity()
107+
];
108+
}
109+
110+
return $result;
111+
}
112+
}

app/code/Magento/Braintree/Test/Unit/Gateway/Validator/ErrorCodeProviderTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,9 @@ public function getErrorCodeDataProvider(): array
7474
'errors' => [],
7575
'transaction' => [
7676
'status' => 'processor_declined',
77-
'processorResponseCode' => '1000'
77+
'processorResponseCode' => '2059'
7878
],
79-
'expectedResult' => ['1000']
79+
'expectedResult' => ['2059']
8080
],
8181
[
8282
'errors' => [

app/code/Magento/Braintree/etc/braintree_error_mapping.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
<message code="81723" translate="true">Cardholder name is too long.</message>
2222
<message code="81736" translate="true">CVV verification failed.</message>
2323
<message code="cvv" translate="true">CVV verification failed.</message>
24+
<message code="2059" translate="true">Address Verification Failed.</message>
2425
<message code="81737" translate="true">Postal code verification failed.</message>
2526
<message code="81750" translate="true">Credit card number is prohibited.</message>
2627
<message code="81801" translate="true">Addresses must have at least one field filled in.</message>

app/code/Magento/Braintree/etc/di.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,7 @@
381381
<item name="customer" xsi:type="string">Magento\Braintree\Gateway\Request\CustomerDataBuilder</item>
382382
<item name="payment" xsi:type="string">Magento\Braintree\Gateway\Request\PaymentDataBuilder</item>
383383
<item name="channel" xsi:type="string">Magento\Braintree\Gateway\Request\ChannelDataBuilder</item>
384-
<item name="address" xsi:type="string">Magento\Braintree\Gateway\Request\AddressDataBuilder</item>
384+
<item name="address" xsi:type="string">Magento\Braintree\Gateway\Request\BillingAddressDataBuilder</item>
385385
<item name="dynamic_descriptor" xsi:type="string">Magento\Braintree\Gateway\Request\DescriptorDataBuilder</item>
386386
<item name="store" xsi:type="string">Magento\Braintree\Gateway\Request\StoreConfigBuilder</item>
387387
<item name="merchant_account" xsi:type="string">Magento\Braintree\Gateway\Request\MerchantAccountDataBuilder</item>

app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/paypal.js

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ define([
1717
'Magento_Vault/js/view/payment/vault-enabler',
1818
'Magento_Checkout/js/action/create-billing-address',
1919
'Magento_Braintree/js/view/payment/kount',
20-
'mage/translate'
20+
'mage/translate',
21+
'Magento_Ui/js/model/messageList'
2122
], function (
2223
$,
2324
_,
@@ -31,7 +32,8 @@ define([
3132
VaultEnabler,
3233
createBillingAddress,
3334
kount,
34-
$t
35+
$t,
36+
globalMessageList
3537
) {
3638
'use strict';
3739

@@ -415,6 +417,18 @@ define([
415417
*/
416418
onVaultPaymentTokenEnablerChange: function () {
417419
this.reInitPayPal();
420+
},
421+
422+
/**
423+
* Show error message
424+
*
425+
* @param {String} errorMessage
426+
* @private
427+
*/
428+
showError: function (errorMessage) {
429+
globalMessageList.addErrorMessage({
430+
message: errorMessage
431+
});
418432
}
419433
});
420434
});

app/code/Magento/Catalog/Plugin/Block/Topmenu.php

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
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\Plugin\Block;
79

810
use Magento\Catalog\Model\Category;
@@ -156,12 +158,13 @@ private function getCurrentCategory()
156158
*/
157159
private function getCategoryAsArray($category, $currentCategory, $isParentActive)
158160
{
161+
$categoryId = $category->getId();
159162
return [
160163
'name' => $category->getName(),
161-
'id' => 'category-node-' . $category->getId(),
164+
'id' => 'category-node-' . $categoryId,
162165
'url' => $this->catalogCategory->getCategoryUrl($category),
163-
'has_active' => in_array((string)$category->getId(), explode('/', $currentCategory->getPath()), true),
164-
'is_active' => $category->getId() == $currentCategory->getId(),
166+
'has_active' => in_array((string)$categoryId, explode('/', (string)$currentCategory->getPath()), true),
167+
'is_active' => $categoryId == $currentCategory->getId(),
165168
'is_category' => true,
166169
'is_parent_active' => $isParentActive
167170
];
@@ -193,4 +196,22 @@ protected function getCategoryTree($storeId, $rootId)
193196

194197
return $collection;
195198
}
199+
200+
/**
201+
* Add active
202+
*
203+
* @param \Magento\Theme\Block\Html\Topmenu $subject
204+
* @param string[] $result
205+
* @return string[]
206+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
207+
*/
208+
public function afterGetCacheKeyInfo(\Magento\Theme\Block\Html\Topmenu $subject, array $result)
209+
{
210+
$activeCategory = $this->getCurrentCategory();
211+
if ($activeCategory) {
212+
$result[] = Category::CACHE_TAG . '_' . $activeCategory->getId();
213+
}
214+
215+
return $result;
216+
}
196217
}

app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminCategoryActionGroup.xml

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,11 @@
9999
<attachFile selector="{{AdminCategoryContentSection.uploadImageFile}}" userInput="{{image.file}}" stepKey="uploadFile"/>
100100
<waitForAjaxLoad time="30" stepKey="waitForAjaxUpload"/>
101101
<waitForLoadingMaskToDisappear stepKey="waitForLoading"/>
102-
<see selector="{{AdminCategoryContentSection.imageFileName}}" userInput="{{image.file}}" stepKey="seeImage"/>
102+
<grabTextFrom selector="{{AdminCategoryContentSection.imageFileName}}" stepKey="grabCategoryFileName"/>
103+
<assertRegExp stepKey="assertEquals" message="pass">
104+
<expectedResult type="string">/magento-logo(_[0-9]+)*?\.png$/</expectedResult>
105+
<actualResult type="variable">grabCategoryFileName</actualResult>
106+
</assertRegExp>
103107
</actionGroup>
104108

105109
<!-- Remove image from category -->
@@ -128,7 +132,11 @@
128132
<conditionalClick selector="{{AdminCategoryContentSection.sectionHeader}}" dependentSelector="{{AdminCategoryContentSection.uploadButton}}" visible="false" stepKey="openContentSection"/>
129133
<waitForPageLoad stepKey="waitForPageLoad"/>
130134
<waitForElementVisible selector="{{AdminCategoryContentSection.uploadButton}}" stepKey="seeImageSectionIsReady"/>
131-
<see selector="{{AdminCategoryContentSection.imageFileName}}" userInput="{{image.file}}" stepKey="seeImage"/>
135+
<grabTextFrom selector="{{AdminCategoryContentSection.imageFileName}}" stepKey="grabCategoryFileName"/>
136+
<assertRegExp stepKey="assertEquals" message="pass">
137+
<expectedResult type="string">/magento-logo(_[0-9]+)*?\.png$/</expectedResult>
138+
<actualResult type="variable">grabCategoryFileName</actualResult>
139+
</assertRegExp>
132140
</actionGroup>
133141

134142
<!-- Action to navigate to Media Gallery. Used in tests to cleanup uploaded images -->

app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminProductActionGroup.xml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,8 @@
134134
<scrollToTopOfPage stepKey="scrollTopPageProduct"/>
135135
<waitForElementVisible selector="{{AdminProductFormActionSection.saveButton}}" stepKey="waitForSaveProductButton"/>
136136
<click selector="{{AdminProductFormActionSection.saveButton}}" stepKey="clickSaveProduct"/>
137-
<waitForPageLoad stepKey="waitForProductToSave"/>
138-
<see selector="{{AdminProductMessagesSection.successMessage}}" userInput="You saved the product." stepKey="seeSaveConfirmation"/>
137+
<waitForElementVisible selector="{{AdminMessagesSection.success}}" stepKey="waitProductSaveSuccessMessage"/>
138+
<see selector="{{AdminMessagesSection.success}}" userInput="You saved the product." stepKey="seeSaveConfirmation"/>
139139
</actionGroup>
140140

141141
<actionGroup name="toggleProductEnabled">
@@ -149,9 +149,10 @@
149149
<!-- Save product but do not expect a success message -->
150150
<actionGroup name="SaveProductFormNoSuccessCheck" extends="saveProductForm">
151151
<annotations>
152-
<description>EXTENDS: saveProductForm. Removes 'seeSaveConfirmation'.</description>
152+
<description>EXTENDS: saveProductForm. Removes 'waitProductSaveSuccessMessage' and 'seeSaveConfirmation'.</description>
153153
</annotations>
154154

155+
<remove keyForRemoval="waitProductSaveSuccessMessage"/>
155156
<remove keyForRemoval="seeSaveConfirmation"/>
156157
</actionGroup>
157158

app/code/Magento/Catalog/Test/Mftf/ActionGroup/AdminProductGridActionGroup.xml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,4 +423,23 @@
423423
<click selector="{{AdminProductGridConfirmActionSection.ok}}" stepKey="confirmProductDelete"/>
424424
<waitForPageLoad stepKey="waitForGridLoad"/>
425425
</actionGroup>
426+
427+
<actionGroup name="deleteAllProductsUsingProductGrid">
428+
<annotations>
429+
<description>Deletes all products in Admin Products grid page.</description>
430+
</annotations>
431+
432+
<amOnPage url="{{AdminProductIndexPage.url}}" stepKey="openAdminGridProductsPage"/>
433+
<waitForPageLoad time="60" stepKey="waitForPageFullyLoad"/>
434+
<conditionalClick selector="{{AdminProductGridFilterSection.clearFilters}}" dependentSelector="{{AdminProductGridFilterSection.clearFilters}}" visible="true" stepKey="clearGridFilters"/>
435+
436+
<conditionalClick selector="{{AdminProductGridSection.multicheckDropdown}}" dependentSelector="{{AdminDataGridTableSection.dataGridEmpty}}" visible="false" stepKey="openMulticheckDropdown"/>
437+
<conditionalClick selector="{{AdminProductGridSection.multicheckOption('Select All')}}" dependentSelector="{{AdminDataGridTableSection.dataGridEmpty}}" visible="false" stepKey="selectAllProductsInGrid"/>
438+
<click selector="{{AdminProductGridSection.bulkActionDropdown}}" stepKey="clickActionDropdown"/>
439+
<click selector="{{AdminProductGridSection.bulkActionOption('Delete')}}" stepKey="clickDeleteAction"/>
440+
441+
<waitForElementVisible selector="{{AdminConfirmationModalSection.message}}" stepKey="waitForConfirmModal"/>
442+
<click selector="{{AdminConfirmationModalSection.ok}}" stepKey="confirmDelete"/>
443+
<waitForElementVisible selector="{{AdminDataGridTableSection.dataGridEmpty}}" stepKey="waitGridIsEmpty"/>
444+
</actionGroup>
426445
</actionGroups>

app/code/Magento/Catalog/Test/Mftf/Page/AdminProductCreatePage.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
<section name="AdminProductAttributesSection"/>
1919
<section name="AdminProductFormRelatedUpSellCrossSellSection"/>
2020
<section name="AdminProductFormAdvancedPricingSection"/>
21-
<section name="AdminProductFormAdvancedInventorySection"/>
2221
<section name="AdminAddAttributeModalSection"/>
2322
</page>
2423
</pages>

0 commit comments

Comments
 (0)