Skip to content

Commit 3b62462

Browse files
committed
Merge remote-tracking branch 'mpi/MC-35692' into MPI-2020-09-14
2 parents f54feef + b0f065c commit 3b62462

File tree

4 files changed

+366
-9
lines changed

4 files changed

+366
-9
lines changed

app/code/Magento/Payment/view/adminhtml/web/js/transparent.js

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,28 +52,29 @@ define([
5252
* @param {String} method
5353
*/
5454
_setPlaceOrderHandler: function (event, method) {
55+
var $editForm = $(this.options.editFormSelector);
56+
57+
$editForm.off('beforeSubmitOrder.' + this.options.gateway);
58+
5559
if (method === this.options.gateway) {
56-
$(this.options.editFormSelector)
57-
.off('submitOrder')
58-
.on('submitOrder.' + this.options.gateway, this._placeOrderHandler.bind(this));
59-
} else {
60-
$(this.options.editFormSelector)
61-
.off('submitOrder.' + this.options.gateway);
60+
$editForm.on('beforeSubmitOrder.' + this.options.gateway, this._placeOrderHandler.bind(this));
6261
}
6362
},
6463

6564
/**
6665
* Handler for form submit to call gateway for credit card validation.
6766
*
67+
* @param {Event} event
6868
* @return {Boolean}
6969
* @private
7070
*/
71-
_placeOrderHandler: function () {
71+
_placeOrderHandler: function (event) {
7272
if ($(this.options.editFormSelector).valid()) {
7373
this._orderSave();
7474
} else {
7575
$('body').trigger('processStop');
7676
}
77+
event.stopImmediatePropagation();
7778

7879
return false;
7980
},

app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,13 @@ define([
481481
},
482482

483483
switchPaymentMethod: function(method){
484+
if (this.paymentMethod !== method) {
485+
jQuery('#edit_form')
486+
.off('submitOrder')
487+
.on('submitOrder', function(){
488+
jQuery(this).trigger('realOrder');
489+
});
490+
}
484491
jQuery('#edit_form').trigger('changePaymentMethod', [method]);
485492
this.setPaymentMethod(method);
486493
var data = {};
@@ -1308,11 +1315,16 @@ define([
13081315
},
13091316

13101317
submit: function () {
1311-
var $editForm = jQuery('#edit_form');
1318+
var $editForm = jQuery('#edit_form'),
1319+
beforeSubmitOrderEvent;
13121320

13131321
if ($editForm.valid()) {
13141322
$editForm.trigger('processStart');
1315-
$editForm.trigger('submitOrder');
1323+
beforeSubmitOrderEvent = jQuery.Event('beforeSubmitOrder');
1324+
$editForm.trigger(beforeSubmitOrderEvent);
1325+
if (beforeSubmitOrderEvent.result !== false) {
1326+
$editForm.trigger('submitOrder');
1327+
}
13161328
}
13171329
},
13181330

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
/*
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
/*eslint-disable max-nested-callbacks*/
6+
/*jscs:disable jsDoc*/
7+
define([
8+
'jquery',
9+
'jquery/validate',
10+
'Magento_Payment/js/transparent'
11+
], function ($) {
12+
'use strict';
13+
14+
var containerEl,
15+
formEl,
16+
jQueryAjax;
17+
18+
function init(config) {
19+
var defaultConfig = {
20+
orderSaveUrl: '/',
21+
gateway: 'payflowpro',
22+
editFormSelector: '#' + formEl.id
23+
};
24+
25+
$(formEl).find(':radio[value="payflowpro"]').prop('checked', 'checked');
26+
$(formEl).transparent($.extend({}, defaultConfig, config || {}));
27+
}
28+
29+
beforeEach(function () {
30+
if (!window.FORM_KEY) {
31+
window.FORM_KEY = '61d0c9da0aa473d214f61913967cc0ea';
32+
}
33+
$('<div id="admin_edit_order_form_container">' +
34+
'<form id="admin_edit_order_form" action="/">' +
35+
'<input type="radio" name="payment[method]" value="payflowpro"/>' +
36+
'<input type="radio" name="payment[method]" value="money_order"/>' +
37+
'</form>' +
38+
'</div>'
39+
).appendTo(document.body);
40+
containerEl = document.getElementById('admin_edit_order_form_container');
41+
formEl = document.getElementById('admin_edit_order_form');
42+
jQueryAjax = $.ajax;
43+
});
44+
45+
afterEach(function () {
46+
$(containerEl).remove();
47+
formEl = undefined;
48+
containerEl = undefined;
49+
$.ajax = jQueryAjax;
50+
jQueryAjax = undefined;
51+
});
52+
53+
describe('Magento_Payment/js/transparent', function () {
54+
describe('beforeSubmitOrder handler', function () {
55+
it('is registered when selected payment method requires transparent', function () {
56+
init();
57+
expect(($._data(formEl, 'events') || {}).beforeSubmitOrder[0].type).toBe('beforeSubmitOrder');
58+
expect(($._data(formEl, 'events') || {}).beforeSubmitOrder[0].namespace).toBe('payflowpro');
59+
});
60+
it('is not registered when selected payment method does not require transparent', function () {
61+
init();
62+
$(formEl).find(':radio[value="money_order"]').prop('checked', 'checked');
63+
$(formEl).trigger('changePaymentMethod', ['money_order']);
64+
expect(($._data(formEl, 'events') || {}).beforeSubmitOrder).toBeUndefined();
65+
});
66+
it('returns false to prevent normal order creation', function () {
67+
var beforeSubmitOrderEvent;
68+
69+
$.ajax = jasmine.createSpy();
70+
init({
71+
orderSaveUrl: '/admin/paypal/transparent/requestSecureToken'
72+
});
73+
beforeSubmitOrderEvent = $.Event('beforeSubmitOrder');
74+
$(formEl).trigger(beforeSubmitOrderEvent);
75+
expect($.ajax).toHaveBeenCalledWith(jasmine.objectContaining({
76+
url: '/admin/paypal/transparent/requestSecureToken',
77+
type: 'post'
78+
}));
79+
expect(beforeSubmitOrderEvent.result).toBe(false);
80+
expect(beforeSubmitOrderEvent.isImmediatePropagationStopped()).toBe(true);
81+
});
82+
});
83+
});
84+
});

0 commit comments

Comments
 (0)