From 27fdc6b3aef0bcb407232ea1e87fb95b190d8345 Mon Sep 17 00:00:00 2001
From: Olexii Korshenko <okorshenko@ebay.com>
Date: Thu, 2 Jul 2015 16:20:40 +0300
Subject: [PATCH] MAGETWO-39501: Resolve checkout behavior for expired session

---
 .../view/frontend/web/js/action/get-totals.js |  7 +++---
 .../frontend/web/js/action/place-order.js     |  7 +++---
 .../web/js/action/set-payment-information.js  |  7 +++---
 .../frontend/web/js/model/error-processor.js  | 24 +++++++++++++++++++
 .../customer-address.js                       |  9 ++++---
 .../shipping-rate-processor/new-address.js    |  7 +++---
 .../model/shipping-save-processor/default.js  |  7 +++---
 .../view/frontend/web/js/model/customer.js    |  3 +--
 .../frontend/web/js/action/gift-options.js    |  6 ++---
 .../frontend/web/js/action/cancel-coupon.js   |  9 ++++---
 .../frontend/web/js/action/set-coupon-code.js |  9 ++++---
 11 files changed, 55 insertions(+), 40 deletions(-)
 create mode 100644 app/code/Magento/Checkout/view/frontend/web/js/model/error-processor.js

diff --git a/app/code/Magento/Checkout/view/frontend/web/js/action/get-totals.js b/app/code/Magento/Checkout/view/frontend/web/js/action/get-totals.js
index 57524a7cb40..89bfd1342e9 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/action/get-totals.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/action/get-totals.js
@@ -9,11 +9,11 @@ define(
         'jquery',
         '../model/quote',
         'Magento_Checkout/js/model/resource-url-manager',
-        'Magento_Ui/js/model/messageList',
+        'Magento_Checkout/js/model/error-processor',
         'mage/storage',
         'Magento_Checkout/js/model/totals'
     ],
-    function ($, quote, resourceUrlManager, messageList, storage, totals) {
+    function ($, quote, resourceUrlManager, errorProcessor, storage, totals) {
         "use strict";
         return function (callbacks, deferred) {
             deferred = deferred || $.Deferred();
@@ -36,9 +36,8 @@ define(
             ).error(
                 function (response) {
                     totals.isLoading(false);
-                    var error = JSON.parse(response.responseText);
-                    messageList.addErrorMessage(error);
                     deferred.reject();
+                    errorProcessor.process(response);
                 }
             );
 
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/action/place-order.js b/app/code/Magento/Checkout/view/frontend/web/js/action/place-order.js
index eabe01078de..e68d89eebda 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/action/place-order.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/action/place-order.js
@@ -8,11 +8,11 @@ define(
         'Magento_Checkout/js/model/url-builder',
         'mage/storage',
         'mage/url',
-        'Magento_Ui/js/model/messageList',
+        'Magento_Checkout/js/model/error-processor',
         'Magento_Customer/js/model/customer',
         'underscore'
     ],
-    function (quote, urlBuilder, storage, url, messageList, customer, _) {
+    function (quote, urlBuilder, storage, url, errorProcessor, customer, _) {
         'use strict';
 
         return function (paymentData, redirectOnSuccess) {
@@ -50,8 +50,7 @@ define(
                 }
             ).fail(
                 function (response) {
-                    var error = JSON.parse(response.responseText);
-                    messageList.addErrorMessage(error);
+                    errorProcessor.process(response);
                 }
             );
         };
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/action/set-payment-information.js b/app/code/Magento/Checkout/view/frontend/web/js/action/set-payment-information.js
index 4f1167970a4..a2ba6ecb34c 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/action/set-payment-information.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/action/set-payment-information.js
@@ -7,10 +7,10 @@ define(
         'Magento_Checkout/js/model/quote',
         'Magento_Checkout/js/model/url-builder',
         'mage/storage',
-        'Magento_Ui/js/model/messageList',
+        'Magento_Checkout/js/model/error-processor',
         'Magento_Customer/js/model/customer'
     ],
-    function (quote, urlBuilder, storage, messageList, customer) {
+    function (quote, urlBuilder, storage, errorProcessor, customer) {
         'use strict';
 
         return function () {
@@ -47,8 +47,7 @@ define(
                 }
             ).fail(
                 function (response) {
-                    var error = JSON.parse(response.responseText);
-                    messageList.addErrorMessage(error);
+                    errorProcessor.process(response);
                 }
             );
         };
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/model/error-processor.js b/app/code/Magento/Checkout/view/frontend/web/js/model/error-processor.js
new file mode 100644
index 00000000000..85af889cf2b
--- /dev/null
+++ b/app/code/Magento/Checkout/view/frontend/web/js/model/error-processor.js
@@ -0,0 +1,24 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+define(
+    [
+        'mage/url',
+        'Magento_Ui/js/model/messageList'
+    ],
+    function (url, messageList) {
+        'use strict';
+
+        return {
+            process: function (response) {
+                if (response.status == 401) {
+                    window.location.replace(url.build('customer/account/login/'));
+                } else {
+                    var error = JSON.parse(response.responseText);
+                    messageList.addErrorMessage(error);
+                }
+            }
+        };
+    }
+);
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-rate-processor/customer-address.js b/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-rate-processor/customer-address.js
index 068891a5286..19d7575249f 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-rate-processor/customer-address.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-rate-processor/customer-address.js
@@ -10,9 +10,9 @@ define(
         'mage/storage',
         'Magento_Checkout/js/model/shipping-service',
         'Magento_Checkout/js/model/shipping-rate-registry',
-        'Magento_Ui/js/model/messageList'
+        'Magento_Checkout/js/model/error-processor'
     ],
-    function (resourceUrlManager, quote, storage, shippingService, rateRegistry, messageList) {
+    function (resourceUrlManager, quote, storage, shippingService, rateRegistry, errorProcessor) {
         "use strict";
         return {
             getRates: function(address) {
@@ -35,9 +35,8 @@ define(
 
                     ).fail(
                         function(response) {
-                            var error = JSON.parse(response.responseText);
-                            messageList.addErrorMessage(error);
-                            shippingService.setShippingRates([])
+                            shippingService.setShippingRates([]);
+                            errorProcessor.process(response);
                         }
                     ).always(
                         function () {
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-rate-processor/new-address.js b/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-rate-processor/new-address.js
index db5052ca0c3..7c0f201cd0a 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-rate-processor/new-address.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-rate-processor/new-address.js
@@ -9,9 +9,9 @@ define(
         'mage/storage',
         'Magento_Checkout/js/model/shipping-service',
         'Magento_Checkout/js/model/shipping-rate-registry',
-        'Magento_Ui/js/model/messageList'
+        'Magento_Checkout/js/model/error-processor'
     ],
-    function (resourceUrlManager, quote, storage, shippingService, rateRegistry, messageList) {
+    function (resourceUrlManager, quote, storage, shippingService, rateRegistry, errorProcessor) {
         'use strict';
 
         return {
@@ -45,9 +45,8 @@ define(
                         }
                     ).fail(
                         function (response) {
-                            var error = JSON.parse(response.responseText);
-                            messageList.addErrorMessage(error);
                             shippingService.setShippingRates([]);
+                            errorProcessor.process(response);
                         }
                     ).always(
                         function () {
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-save-processor/default.js b/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-save-processor/default.js
index 7233d429dc0..e9e63e28077 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-save-processor/default.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-save-processor/default.js
@@ -11,9 +11,9 @@ define(
         'mage/storage',
         'Magento_Checkout/js/model/payment-service',
         'Magento_Checkout/js/model/payment/method-converter',
-        'Magento_Ui/js/model/messageList'
+        'Magento_Checkout/js/model/error-processor'
     ],
-    function (ko, quote, resourceUrlManager, storage, paymentService, methodConverter, messageList) {
+    function (ko, quote, resourceUrlManager, storage, paymentService, methodConverter, errorProcessor) {
         'use strict';
 
         return {
@@ -36,8 +36,7 @@ define(
                     }
                 ).fail(
                     function (response) {
-                        var error = JSON.parse(response.responseText);
-                        messageList.addErrorMessage(error);
+                        errorProcessor.process(response);
                     }
                 );
             }
diff --git a/app/code/Magento/Customer/view/frontend/web/js/model/customer.js b/app/code/Magento/Customer/view/frontend/web/js/model/customer.js
index 25654444d6c..c6a87925dea 100644
--- a/app/code/Magento/Customer/view/frontend/web/js/model/customer.js
+++ b/app/code/Magento/Customer/view/frontend/web/js/model/customer.js
@@ -8,10 +8,9 @@ define(
         'jquery',
         'ko',
         'underscore',
-        'mage/storage',
         './address-list'
     ],
-    function($, ko, _, storage, addressList) {
+    function($, ko, _, addressList) {
         "use strict";
         var isLoggedIn = ko.observable(window.isCustomerLoggedIn),
             customerData = {};
diff --git a/app/code/Magento/GiftMessage/view/frontend/web/js/action/gift-options.js b/app/code/Magento/GiftMessage/view/frontend/web/js/action/gift-options.js
index 51e72540458..29f9240dec2 100644
--- a/app/code/Magento/GiftMessage/view/frontend/web/js/action/gift-options.js
+++ b/app/code/Magento/GiftMessage/view/frontend/web/js/action/gift-options.js
@@ -8,9 +8,10 @@ define(
         '../model/url-builder',
         'mage/storage',
         'Magento_Ui/js/model/messageList',
+        'Magento_Checkout/js/model/error-processor',
         'mage/url'
     ],
-    function(urlBuilder, storage, messageList, url) {
+    function(urlBuilder, storage, messageList, errorProcessor, url) {
         "use strict";
         return function(giftMessage, remove) {
             url.setBaseUrl(giftMessage.getConfigValue('baseUrl'));
@@ -48,8 +49,7 @@ define(
                 }
             ).fail(
                 function(response) {
-                    var error = JSON.parse(response.responseText);
-                    messageList.addErrorMessage(error);
+                    errorProcessor.process(response);
                 }
             );
         };
diff --git a/app/code/Magento/SalesRule/view/frontend/web/js/action/cancel-coupon.js b/app/code/Magento/SalesRule/view/frontend/web/js/action/cancel-coupon.js
index 80a6488fb28..8e52ec04063 100644
--- a/app/code/Magento/SalesRule/view/frontend/web/js/action/cancel-coupon.js
+++ b/app/code/Magento/SalesRule/view/frontend/web/js/action/cancel-coupon.js
@@ -14,11 +14,11 @@ define(
         'Magento_Checkout/js/model/quote',
         'Magento_Checkout/js/model/resource-url-manager',
         'Magento_Checkout/js/model/payment-service',
-        'Magento_Ui/js/model/messageList',
+        'Magento_Checkout/js/model/error-processor',
         'mage/storage',
         'Magento_Checkout/js/action/get-totals'
     ],
-    function (ko, $, quote, urlManager, paymentService, messageList, storage, getTotalsAction) {
+    function (ko, $, quote, urlManager, paymentService, errorProcessor, storage, getTotalsAction) {
         'use strict';
         return function (isApplied, isLoading) {
             var quoteId = quote.getQuoteId();
@@ -39,11 +39,10 @@ define(
                         );
                     });
                 }
-            ).error(
+            ).fail(
                 function (response) {
                     isLoading(false);
-                    var error = JSON.parse(response.responseText);
-                    messageList.addErrorMessage(error);
+                    errorProcessor.process(response);
                 }
             );
         };
diff --git a/app/code/Magento/SalesRule/view/frontend/web/js/action/set-coupon-code.js b/app/code/Magento/SalesRule/view/frontend/web/js/action/set-coupon-code.js
index a76500e4517..f723e038136 100644
--- a/app/code/Magento/SalesRule/view/frontend/web/js/action/set-coupon-code.js
+++ b/app/code/Magento/SalesRule/view/frontend/web/js/action/set-coupon-code.js
@@ -14,11 +14,11 @@ define(
         'Magento_Checkout/js/model/quote',
         'Magento_Checkout/js/model/resource-url-manager',
         'Magento_Checkout/js/model/payment-service',
-        'Magento_Ui/js/model/messageList',
+        'Magento_Checkout/js/model/error-processor',
         'mage/storage',
         'Magento_Checkout/js/action/get-totals'
     ],
-    function (ko, $, quote, urlManager, paymentService, messageList, storage, getTotalsAction) {
+    function (ko, $, quote, urlManager, paymentService, errorProcessor, storage, getTotalsAction) {
         'use strict';
         return function (couponCode, isApplied, isLoading) {
             var quoteId = quote.getQuoteId();
@@ -42,11 +42,10 @@ define(
                         });
                     }
                 }
-            ).error(
+            ).fail(
                 function (response) {
                     isLoading(false);
-                    var error = JSON.parse(response.responseText);
-                    messageList.addErrorMessage(error);
+                    errorProcessor.process(response);
                 }
             );
         };
-- 
GitLab