Skip to content

Commit 7d47591

Browse files
authored
🔃 [EngCom] Public Pull Requests - 2.2-develop
Accepted Public Pull Requests: - #12951: [Bug] Correctly construct Magento\Framework\Phrase (by @punkstar) - #12946: Respect "Learn More Link" in Recently Viewed Products widget options (by @JeroenVanLeusden) - #12931: Display scroll bar of admin store switcher in OSX computers. (by @jalogut) - #12857: Update progress.phtml (by @jonashrem) - #12887: Remove unused if statement in order invoice save (by @JeroenVanLeusden) - #12845: Add missing preference for ObjectManager\ConfigInterface in integrati… (by @schmengler) - #12768: magento/magento2: Missing ext-bcmath dependency added (by @Mobecls) - #12401: Correctly set payment information when using paypal (by @therool) Fixed GitHub Issues: - #12844: "Cannot instantiate interface Magento\Framework\Interception\ObjectManager\ConfigInterface" error in integration tests (reported by @schmengler) has been fixed in #12845 by @schmengler in 2.2-develop branch Related commits: 1. 50ffc6a - #11885: Magento 2.2 Paypal Can't Accept Checkout Agreements Before Routing to PayPal (reported by @Silarn) has been fixed in #12401 by @therool in 2.2-develop branch Related commits: 1. ba0472f 2. 48923e1 3. 774cb4c 4. 12145bc 5. 7bdb921 6. 70f5e38 7. 92f620f 8. 1c7123f 9. 9d5fa49 10. a35b468
2 parents a39e37f + e5efbd4 commit 7d47591

File tree

17 files changed

+183
-60
lines changed

17 files changed

+183
-60
lines changed

app/bootstrap.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@
1414
if (!defined('PHP_VERSION_ID') || !(PHP_VERSION_ID === 70002 || PHP_VERSION_ID === 70004 || PHP_VERSION_ID >= 70006)) {
1515
if (PHP_SAPI == 'cli') {
1616
echo 'Magento supports 7.0.2, 7.0.4, and 7.0.6 or later. ' .
17-
'Please read http://devdocs.magento.com/guides/v1.0/install-gde/system-requirements.html';
17+
'Please read http://devdocs.magento.com/guides/v2.2/install-gde/system-requirements.html';
1818
} else {
1919
echo <<<HTML
2020
<div style="font:12px/1.35em arial, helvetica, sans-serif;">
2121
<p>Magento supports PHP 7.0.2, 7.0.4, and 7.0.6 or later. Please read
22-
<a target="_blank" href="http://devdocs.magento.com/guides/v1.0/install-gde/system-requirements.html">
22+
<a target="_blank" href="http://devdocs.magento.com/guides/v2.2/install-gde/system-requirements.html">
2323
Magento System Requirements</a>.
2424
</div>
2525
HTML;

app/code/Magento/Catalog/view/base/web/template/product/link.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
* See COPYING.txt for license details.
55
*/
66
-->
7-
<a class="product-item-link"
7+
<a if="isAllowed()"
8+
class="product-item-link"
89
attr="href: $row().url"
910
text="label"/>

app/code/Magento/Paypal/Model/Express.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -669,14 +669,19 @@ public function getApi()
669669
public function assignData(\Magento\Framework\DataObject $data)
670670
{
671671
parent::assignData($data);
672-
672+
673673
$additionalData = $data->getData(PaymentInterface::KEY_ADDITIONAL_DATA);
674674

675675
if (!is_array($additionalData)) {
676676
return $this;
677677
}
678678

679679
foreach ($additionalData as $key => $value) {
680+
// Skip extension attributes
681+
if ($key === \Magento\Framework\Api\ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY) {
682+
continue;
683+
}
684+
680685
$this->getInfoInstance()->setAdditionalInformation($key, $value);
681686
}
682687
return $this;

app/code/Magento/Paypal/Test/Unit/Model/ExpressTest.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,12 +161,21 @@ public function testAssignData()
161161
{
162162
$transportValue = 'something';
163163

164+
$extensionAttribute = $this->getMockForAbstractClass(
165+
\Magento\Quote\Api\Data\PaymentExtensionInterface::class,
166+
[],
167+
'',
168+
false,
169+
false
170+
);
171+
164172
$data = new DataObject(
165173
[
166174
PaymentInterface::KEY_ADDITIONAL_DATA => [
167175
Express\Checkout::PAYMENT_INFO_TRANSPORT_BILLING_AGREEMENT => $transportValue,
168176
Express\Checkout::PAYMENT_INFO_TRANSPORT_PAYER_ID => $transportValue,
169-
Express\Checkout::PAYMENT_INFO_TRANSPORT_TOKEN => $transportValue
177+
Express\Checkout::PAYMENT_INFO_TRANSPORT_TOKEN => $transportValue,
178+
\Magento\Framework\Api\ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY => $extensionAttribute
170179
]
171180
]
172181
);

app/code/Magento/Paypal/view/frontend/web/js/action/set-payment-method.js

Lines changed: 3 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -4,48 +4,12 @@
44
*/
55

66
define([
7-
'jquery',
87
'Magento_Checkout/js/model/quote',
9-
'Magento_Checkout/js/model/url-builder',
10-
'mage/storage',
11-
'Magento_Checkout/js/model/error-processor',
12-
'Magento_Customer/js/model/customer',
13-
'Magento_Checkout/js/model/full-screen-loader'
14-
], function ($, quote, urlBuilder, storage, errorProcessor, customer, fullScreenLoader) {
8+
'Magento_Checkout/js/action/set-payment-information'
9+
], function (quote, setPaymentInformation) {
1510
'use strict';
1611

1712
return function (messageContainer) {
18-
var serviceUrl,
19-
payload,
20-
paymentData = quote.paymentMethod();
21-
22-
/**
23-
* Checkout for guest and registered customer.
24-
*/
25-
if (!customer.isLoggedIn()) {
26-
serviceUrl = urlBuilder.createUrl('/guest-carts/:cartId/set-payment-information', {
27-
cartId: quote.getQuoteId()
28-
});
29-
payload = {
30-
cartId: quote.getQuoteId(),
31-
email: quote.guestEmail,
32-
paymentMethod: paymentData
33-
};
34-
} else {
35-
serviceUrl = urlBuilder.createUrl('/carts/mine/set-payment-information', {});
36-
payload = {
37-
cartId: quote.getQuoteId(),
38-
paymentMethod: paymentData
39-
};
40-
}
41-
fullScreenLoader.startLoader();
42-
43-
return storage.post(
44-
serviceUrl, JSON.stringify(payload)
45-
).fail(function (response) {
46-
errorProcessor.process(response, messageContainer);
47-
}).always(function () {
48-
fullScreenLoader.stopLoader();
49-
});
13+
return setPaymentInformation(messageContainer, quote.paymentMethod());
5014
};
5115
});

app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Save.php

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -191,14 +191,7 @@ public function execute()
191191
}
192192
$transactionSave->save();
193193

194-
if (isset($shippingResponse) && $shippingResponse->hasErrors()) {
195-
$this->messageManager->addError(
196-
__(
197-
'The invoice and the shipment have been created. ' .
198-
'The shipping label cannot be created now.'
199-
)
200-
);
201-
} elseif (!empty($data['do_shipment'])) {
194+
if (!empty($data['do_shipment'])) {
202195
$this->messageManager->addSuccess(__('You created the invoice and shipment.'));
203196
} else {
204197
$this->messageManager->addSuccess(__('The invoice has been created.'));

app/code/Magento/Sales/i18n/en_US.csv

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,6 @@ Sales,Sales
233233
"You can't create an invoice without products.","You can't create an invoice without products."
234234
"New Invoice","New Invoice"
235235
"We can't save the invoice right now.","We can't save the invoice right now."
236-
"The invoice and the shipment have been created. The shipping label cannot be created now.","The invoice and the shipment have been created. The shipping label cannot be created now."
237236
"You created the invoice and shipment.","You created the invoice and shipment."
238237
"The invoice has been created.","The invoice has been created."
239238
"We can't send the invoice email right now.","We can't send the invoice email right now."

app/code/Magento/Ui/Controller/Adminhtml/Index/Render.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ public function execute()
8888
} catch (\Exception $e) {
8989
$this->logger->critical($e);
9090
$result = [
91-
'error' => _('UI component could not be rendered because of system exception'),
91+
'error' => __('UI component could not be rendered because of system exception'),
9292
'errorcode' => $this->escaper->escapeHtml($e->getCode())
9393
];
9494
/** @var \Magento\Framework\Controller\Result\Json $resultJson */

app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/main/actions-bar/_store-switcher.less

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,14 @@
4242
max-height: 250px;
4343
overflow-y: auto;
4444
padding-top: .25em;
45+
&::-webkit-scrollbar {
46+
-webkit-appearance: none;
47+
width: 7px;
48+
}
49+
&::-webkit-scrollbar-thumb {
50+
border-radius: 4px;
51+
background-color: rgba(0, 0, 0, .5);
52+
}
4553

4654
li {
4755
border: 0;

composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
"ext-dom": "*",
6060
"ext-simplexml": "*",
6161
"ext-mcrypt": "*",
62+
"ext-bcmath": "*",
6263
"ext-hash": "*",
6364
"ext-curl": "*",
6465
"ext-iconv": "*",

composer.lock

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dev/tests/integration/etc/di/preferences/ce.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
\Magento\Framework\App\Response\Http::class => \Magento\TestFramework\Response::class,
1717
\Magento\Framework\Interception\PluginListInterface::class =>
1818
\Magento\TestFramework\Interception\PluginList::class,
19+
\Magento\Framework\Interception\ObjectManager\ConfigInterface::class =>
20+
\Magento\TestFramework\ObjectManager\Config::class,
1921
\Magento\Framework\Interception\ObjectManager\Config\Developer::class =>
2022
\Magento\TestFramework\ObjectManager\Config::class,
2123
\Magento\Framework\View\LayoutInterface::class => \Magento\TestFramework\View\Layout::class,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/**
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
6+
define([
7+
'squire'
8+
], function (Squire) {
9+
'use strict';
10+
11+
var injector = new Squire(),
12+
mocks = {
13+
'Magento_Checkout/js/action/place-order': jasmine.createSpy('placeOrderAction'),
14+
'Magento_CheckoutAgreements/js/model/agreements-assigner': jasmine.createSpy('agreementsAssigner')
15+
},
16+
defaultContext = require.s.contexts._,
17+
mixin,
18+
placeOrderAction;
19+
20+
beforeEach(function (done) {
21+
window.checkoutConfig = {
22+
checkoutAgreements: {
23+
isEnabled: true
24+
}
25+
};
26+
injector.mock(mocks);
27+
injector.require([
28+
'Magento_CheckoutAgreements/js/model/place-order-mixin',
29+
'Magento_Checkout/js/action/place-order'
30+
], function (Mixin, placeOrder) {
31+
mixin = Mixin;
32+
placeOrderAction = placeOrder;
33+
done();
34+
});
35+
});
36+
37+
describe('Magento_CheckoutAgreements/js/model/place-order-mixin', function () {
38+
it('mixin is applied to Magento_Checkout/js/action/place-order', function () {
39+
var placeOrderMixins = defaultContext.config.config.mixins['Magento_Checkout/js/action/place-order'];
40+
41+
expect(placeOrderMixins['Magento_CheckoutAgreements/js/model/place-order-mixin']).toBe(true);
42+
});
43+
44+
it('Magento_CheckoutAgreements/js/model/agreements-assigner is called', function () {
45+
var messageContainer = jasmine.createSpy('messageContainer'),
46+
paymentData = {};
47+
48+
mixin(placeOrderAction)(paymentData, messageContainer);
49+
expect(mocks['Magento_CheckoutAgreements/js/model/agreements-assigner'])
50+
.toHaveBeenCalledWith(paymentData);
51+
expect(mocks['Magento_Checkout/js/action/place-order'])
52+
.toHaveBeenCalledWith(paymentData, messageContainer);
53+
});
54+
});
55+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/**
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
6+
define([
7+
'squire'
8+
], function (Squire) {
9+
'use strict';
10+
11+
var injector = new Squire(),
12+
mocks = {
13+
'Magento_Checkout/js/action/set-payment-information': jasmine.createSpy('placeOrderAction'),
14+
'Magento_CheckoutAgreements/js/model/agreements-assigner': jasmine.createSpy('agreementsAssigner')
15+
},
16+
defaultContext = require.s.contexts._,
17+
mixin,
18+
placeOrderAction;
19+
20+
beforeEach(function (done) {
21+
window.checkoutConfig = {
22+
checkoutAgreements: {
23+
isEnabled: true
24+
}
25+
};
26+
injector.mock(mocks);
27+
injector.require([
28+
'Magento_CheckoutAgreements/js/model/set-payment-information-mixin',
29+
'Magento_Checkout/js/action/set-payment-information'
30+
], function (Mixin, setPaymentInformation) {
31+
mixin = Mixin;
32+
placeOrderAction = setPaymentInformation;
33+
done();
34+
});
35+
});
36+
37+
describe('Magento_CheckoutAgreements/js/model/set-payment-information-mixin', function () {
38+
it('mixin is applied to Magento_Checkout/js/action/set-payment-information', function () {
39+
var placeOrderMixins = defaultContext
40+
.config.config.mixins['Magento_Checkout/js/action/set-payment-information'];
41+
42+
expect(placeOrderMixins['Magento_CheckoutAgreements/js/model/set-payment-information-mixin']).toBe(true);
43+
});
44+
45+
it('Magento_CheckoutAgreements/js/model/agreements-assigner is called', function () {
46+
var messageContainer = jasmine.createSpy('messageContainer'),
47+
paymentData = {};
48+
49+
mixin(placeOrderAction)(messageContainer, paymentData);
50+
expect(mocks['Magento_CheckoutAgreements/js/model/agreements-assigner'])
51+
.toHaveBeenCalledWith(paymentData);
52+
expect(mocks['Magento_Checkout/js/action/set-payment-information'])
53+
.toHaveBeenCalledWith(messageContainer, paymentData);
54+
});
55+
});
56+
});

dev/tests/js/jasmine/tests/app/code/Magento/Paypal/frontend/js/view/payment/method-renderer/paypal-express-abstract.test.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,24 @@ define([
1616

1717
describe('paypal/js/view/payment/method-renderer/paypal-express-abstract', function () {
1818
var injector = new Squire(),
19+
successPromise = jasmine.createSpyObj('successPromise', ['done']),
20+
setPaymentMock = jasmine.createSpy('set-payment-information', function () {
21+
return successPromise;
22+
}).and.callThrough(),
23+
validateMock = jasmine.createSpy('validate', function () {
24+
return true;
25+
}).and.callThrough(),
1926
mocks = {
2027
'Magento_Checkout/js/model/quote': {
2128
billingAddress: ko.observable(),
2229
shippingAddress: ko.observable(),
2330
paymentMethod: ko.observable(),
2431
totals: ko.observable({})
2532

33+
},
34+
'Magento_Checkout/js/action/set-payment-information': setPaymentMock,
35+
'Magento_Checkout/js/model/payment/additional-validators': {
36+
validate: validateMock
2637
}
2738
},
2839
paypalExpressAbstract,
@@ -85,6 +96,23 @@ define([
8596
}, 500);
8697
});
8798

99+
it('setPaymentMethodAction is called before redirect to paypal', function () {
100+
spyOn(paypalExpressAbstract, 'selectPaymentMethod');
101+
paypalExpressAbstract.continueToPayPal();
102+
expect(paypalExpressAbstract.selectPaymentMethod).toHaveBeenCalled();
103+
expect(validateMock).toHaveBeenCalled();
104+
expect(validateMock.calls.mostRecent()).toEqual(jasmine.objectContaining({
105+
object: mocks['Magento_Checkout/js/model/payment/additional-validators'],
106+
args: [],
107+
returnValue: true
108+
}));
109+
expect(setPaymentMock).toHaveBeenCalled();
110+
expect(setPaymentMock.calls.mostRecent()).toEqual(jasmine.objectContaining({
111+
returnValue: successPromise
112+
}));
113+
expect(successPromise.done).toHaveBeenCalledWith(jasmine.any(Function));
114+
});
115+
88116
afterAll(function (done) {
89117
tplElement.remove();
90118
done();

lib/internal/Magento/Framework/composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
"ext-openssl": "*",
2121
"lib-libxml": "*",
2222
"ext-xsl": "*",
23+
"ext-bcmath": "*",
2324
"symfony/process": "~2.1",
2425
"colinmollenhour/php-redis-session-abstract": "1.3.4",
2526
"composer/composer": "1.4.1",

0 commit comments

Comments
 (0)