From 0c5cb6ada1c46b7e68ee4cbd282c5369d63cbab7 Mon Sep 17 00:00:00 2001
From: Ievgen Sentiabov <isentiabov@magento.com>
Date: Thu, 28 Dec 2017 10:15:35 +0200
Subject: [PATCH] G#12900: Braintree "Place Order" button is disabled after
 failed validation

 - Added handler to enable "Place Order" button on failed validation
 - Covered changes by js unit test
---
 .../view/payment/method-renderer/cc-form.js   |  1 +
 .../payment/method-renderer/cc-form.test.js   | 35 ++++++++++++++-----
 2 files changed, 28 insertions(+), 8 deletions(-)

diff --git a/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/cc-form.js b/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/cc-form.js
index 73a7b10d5d3..d078cacb96c 100644
--- a/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/cc-form.js
+++ b/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/cc-form.js
@@ -79,6 +79,7 @@ define(
                      */
                     onError: function (response) {
                         braintree.showError($t('Payment ' + this.getTitle() + ' can\'t be initialized'));
+                        this.isPlaceOrderActionAllowed(true);
                         throw response.message;
                     },
 
diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Braintree/frontend/js/view/payment/method-renderer/cc-form.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Braintree/frontend/js/view/payment/method-renderer/cc-form.test.js
index d71f517b5e7..52739eec278 100644
--- a/dev/tests/js/jasmine/tests/app/code/Magento/Braintree/frontend/js/view/payment/method-renderer/cc-form.test.js
+++ b/dev/tests/js/jasmine/tests/app/code/Magento/Braintree/frontend/js/view/payment/method-renderer/cc-form.test.js
@@ -27,7 +27,7 @@ define([
                 ),
                 'Magento_Braintree/js/view/payment/adapter':  jasmine.createSpyObj(
                     'adapter',
-                    ['setup', 'setConfig']
+                    ['setup', 'setConfig', 'showError']
                 )
             },
             braintreeCcForm;
@@ -43,14 +43,17 @@ define([
             };
             injector.mock(mocks);
             injector.require(['Magento_Braintree/js/view/payment/method-renderer/cc-form'], function (Constr) {
-                    braintreeCcForm = new Constr({
-                        provider: 'provName',
-                        name: 'test',
-                        index: 'test'
-                    });
-
-                    done();
+                braintreeCcForm = new Constr({
+                    provider: 'provName',
+                    name: 'test',
+                    index: 'test',
+                    item: {
+                        title: 'Braintree'
+                    }
                 });
+
+                done();
+            });
         });
 
         it('Check if payment code and message container are restored after onActiveChange call.', function () {
@@ -65,5 +68,21 @@ define([
             expect(braintreeCcForm.getCode()).toEqual(expectedCode);
             expect(braintreeCcForm.messageContainer).toEqual(expectedMessageContainer);
         });
+
+        it('Check if form validation fails when "Place Order" button should be active.', function () {
+            var errorMessage = 'Something went wrong.',
+
+                /**
+                 * Anonymous wrapper
+                 */
+                func = function () {
+                    braintreeCcForm.clientConfig.onError({
+                        'message': errorMessage
+                    });
+                };
+
+            expect(func).toThrow(errorMessage);
+            expect(braintreeCcForm.isPlaceOrderActionAllowed()).toBeTruthy();
+        });
     });
 });
-- 
GitLab