Skip to content

Commit cbb5db5

Browse files
authored
Merge branch 'develop' into cia-develop-bugfixes-08012022
2 parents 25edf56 + 9dc4fbe commit cbb5db5

File tree

3 files changed

+112
-1
lines changed

3 files changed

+112
-1
lines changed

ReCaptchaCheckout/view/frontend/web/js/model/place-order-mixin.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ define([
3030
});
3131
//Trigger ReCaptcha validation
3232
recaptchaRegistry.triggers['recaptcha-checkout-place-order']();
33-
33+
//remove listener so that place order action is only triggered by the 'Place Order' button
34+
recaptchaRegistry.removeListener('recaptcha-checkout-place-order');
3435
return recaptchaDeferred;
3536
}
3637

ReCaptchaWebapiUi/view/frontend/web/js/webapiReCaptchaRegistry.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,15 @@ define([], function () {
3737
} else {
3838
this._listeners[id] = func;
3939
}
40+
},
41+
42+
/**
43+
* Remove a listener
44+
*
45+
* @param id
46+
*/
47+
removeListener: function (id) {
48+
this._listeners[id] = undefined;
4049
}
4150
};
4251
});
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
/**
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
6+
define(['squire'
7+
], function (Squire) {
8+
'use strict';
9+
10+
var injector = new Squire(),
11+
12+
defaultContext = require.s.contexts._,
13+
mixin,
14+
registry;
15+
16+
beforeEach(function (done) {
17+
window.checkoutConfig = {
18+
defaultSuccessPageUrl: ''
19+
};
20+
21+
injector.require([
22+
'Magento_ReCaptchaCheckout/js/model/place-order-mixin',
23+
'Magento_ReCaptchaWebapiUi/js/webapiReCaptchaRegistry'
24+
], function (Mixin, Registry) {
25+
mixin = Mixin;
26+
registry = Registry;
27+
done();
28+
});
29+
});
30+
31+
afterEach(function () {
32+
try {
33+
injector.clean();
34+
injector.remove();
35+
} catch (e) {}
36+
});
37+
38+
describe('Magento_ReCaptchaCheckout/js/model/place-order-mixin', function () {
39+
it('mixin is applied to Magento_Checkout/js/model/place-order', function () {
40+
var placeOrderMixins = defaultContext.config.config.mixins['Magento_Checkout/js/model/place-order'];
41+
42+
expect(placeOrderMixins['Magento_ReCaptchaCheckout/js/model/place-order-mixin']).toBe(true);
43+
});
44+
45+
it('Magento_Checkout/js/action/redirect-on-success is called', function () {
46+
let recaptchaId = 'recaptcha-checkout-place-order',
47+
messageContainer = jasmine.createSpy('messageContainer'),
48+
payload = {},
49+
serviceUrl = 'test',
50+
51+
/**
52+
* Order place action mock
53+
*
54+
* @returns {{fail: fail, done: (function(Function): *)}}
55+
*/
56+
action = function () {
57+
return {
58+
/**
59+
* Success result for request
60+
*
61+
* @param {Function} handler
62+
* @returns {*}
63+
*/
64+
done: function (handler) {
65+
handler();
66+
return this;
67+
},
68+
69+
/**
70+
* Fail result for request
71+
*/
72+
fail: function () {}
73+
};
74+
};
75+
76+
/**
77+
* Triggers declared listener
78+
*
79+
* @returns {*}
80+
*/
81+
registry.triggers[recaptchaId] = function () {
82+
if (registry._listeners[recaptchaId] !== undefined) {
83+
return registry._listeners[recaptchaId]('token');
84+
}
85+
};
86+
87+
/**
88+
* Registers a listener
89+
*
90+
* @param id
91+
* @param func
92+
*/
93+
registry.addListener = function (id, func) {
94+
registry._listeners[id] = func;
95+
};
96+
registry.removeListener = jasmine.createSpy();
97+
mixin()(action, serviceUrl, payload, messageContainer);
98+
expect(registry.removeListener).toHaveBeenCalledWith(recaptchaId);
99+
});
100+
});
101+
});

0 commit comments

Comments
 (0)