From 1ab9bfd8dc8ac86e9246a905e18cda443428fcec Mon Sep 17 00:00:00 2001 From: Navarr Barnier Date: Wed, 25 Jul 2018 09:55:41 -0400 Subject: [PATCH 1/5] Allow 3rd party modules to perform actions after totals calculation by returning the storage.post promise, third party modules can perform additional actions by adding .done/.fail or .always tasks to the request promise by creating a Javascript mixin for the totals processor. --- .../frontend/web/js/model/cart/totals-processor/default.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/code/Magento/Checkout/view/frontend/web/js/model/cart/totals-processor/default.js b/app/code/Magento/Checkout/view/frontend/web/js/model/cart/totals-processor/default.js index e269462047748..0e94232786c65 100644 --- a/app/code/Magento/Checkout/view/frontend/web/js/model/cart/totals-processor/default.js +++ b/app/code/Magento/Checkout/view/frontend/web/js/model/cart/totals-processor/default.js @@ -38,7 +38,7 @@ define([ payload.addressInformation['shipping_carrier_code'] = quote.shippingMethod()['carrier_code']; } - storage.post( + return storage.post( serviceUrl, JSON.stringify(payload), false ).done(function (result) { var data = { @@ -96,7 +96,7 @@ define([ ) { quote.setTotals(cartCache.get('totals')); } else { - loadFromServer(address); + return loadFromServer(address); } } }; From 7b7e731f92119160cfff53e09af046c81b30132f Mon Sep 17 00:00:00 2001 From: Navarr Barnier Date: Thu, 26 Jul 2018 08:15:07 -0400 Subject: [PATCH 2/5] Update test to expect a deferral instead of undefined --- .../js/model/cart/totals-processor/default.test.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Checkout/frontend/js/model/cart/totals-processor/default.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Checkout/frontend/js/model/cart/totals-processor/default.test.js index 44f06279dcbef..100d91566f9dc 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Checkout/frontend/js/model/cart/totals-processor/default.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Checkout/frontend/js/model/cart/totals-processor/default.test.js @@ -112,14 +112,15 @@ define([ 'data_id': 1 }) ); + var deferral = new $.Deferred(); spyOn(mocks['Magento_Checkout/js/model/cart/cache'], 'get'); spyOn(mocks['mage/storage'], 'post').and.callFake(function () { data.shippingMethodCode = mocks['Magento_Checkout/js/model/quote'].shippingMethod()['method_code']; data.shippingCarrierCode = mocks['Magento_Checkout/js/model/quote'].shippingMethod()['carrier_code']; - return new $.Deferred().resolve(result); + return deferral.resolve(result); }); - expect(defaultProcessor.estimateTotals(address)).toBeUndefined(); + expect(defaultProcessor.estimateTotals(address)).toBe(deferral); expect(mocks['Magento_Checkout/js/model/quote'].setTotals).toHaveBeenCalledWith(totals); expect(mocks['Magento_Checkout/js/model/totals'].isLoading.calls.argsFor(0)[0]).toBe(true); expect(mocks['Magento_Checkout/js/model/totals'].isLoading.calls.argsFor(1)[0]).toBe(false); @@ -136,10 +137,11 @@ define([ }) ); spyOn(mocks['Magento_Checkout/js/model/cart/cache'], 'get'); + var deferral = new $.Deferred(); spyOn(mocks['mage/storage'], 'post').and.callFake(function () { - return new $.Deferred().reject('Error Message'); + return deferral.reject('Error Message'); }); - expect(defaultProcessor.estimateTotals(address)).toBeUndefined(); + expect(defaultProcessor.estimateTotals(address)).toBe(deferral); expect(mocks['Magento_Checkout/js/model/totals'].isLoading.calls.argsFor(0)[0]).toBe(true); expect(mocks['Magento_Checkout/js/model/totals'].isLoading.calls.argsFor(1)[0]).toBe(false); expect(mocks['mage/storage'].post).toHaveBeenCalled(); From 0077903f7dd9a42765ec6cf494608173612de39d Mon Sep 17 00:00:00 2001 From: Navarr Barnier Date: Fri, 27 Jul 2018 08:04:08 -0400 Subject: [PATCH 3/5] Move new variables to top of scope to fall in line with convention --- .../frontend/js/model/cart/totals-processor/default.test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Checkout/frontend/js/model/cart/totals-processor/default.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Checkout/frontend/js/model/cart/totals-processor/default.test.js index 100d91566f9dc..039bf91217f35 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Checkout/frontend/js/model/cart/totals-processor/default.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Checkout/frontend/js/model/cart/totals-processor/default.test.js @@ -106,13 +106,13 @@ define([ }); it('estimateTotals if data wasn\'t cached and request was successfully sent', function () { + var deferral = new $.Deferred(); spyOn(mocks['Magento_Checkout/js/model/cart/cache'], 'isChanged').and.returnValue(true); spyOn(mocks['Magento_Customer/js/customer-data'], 'get').and.returnValue( ko.observable({ 'data_id': 1 }) ); - var deferral = new $.Deferred(); spyOn(mocks['Magento_Checkout/js/model/cart/cache'], 'get'); spyOn(mocks['mage/storage'], 'post').and.callFake(function () { data.shippingMethodCode = mocks['Magento_Checkout/js/model/quote'].shippingMethod()['method_code']; @@ -130,6 +130,7 @@ define([ }); it('estimateTotals if data wasn\'t cached and request returns error', function () { + var deferral = new $.Deferred(); spyOn(mocks['Magento_Checkout/js/model/cart/cache'], 'isChanged').and.returnValue(true); spyOn(mocks['Magento_Customer/js/customer-data'], 'get').and.returnValue( ko.observable({ @@ -137,7 +138,6 @@ define([ }) ); spyOn(mocks['Magento_Checkout/js/model/cart/cache'], 'get'); - var deferral = new $.Deferred(); spyOn(mocks['mage/storage'], 'post').and.callFake(function () { return deferral.reject('Error Message'); }); From f36d67a6c807872e463133d818fa2499ace30d62 Mon Sep 17 00:00:00 2001 From: Stanislav Idolov Date: Mon, 30 Jul 2018 11:42:56 +0300 Subject: [PATCH 4/5] Fixed code style issues --- .../frontend/js/model/cart/totals-processor/default.test.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Checkout/frontend/js/model/cart/totals-processor/default.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Checkout/frontend/js/model/cart/totals-processor/default.test.js index 039bf91217f35..f3d51cbb03790 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Checkout/frontend/js/model/cart/totals-processor/default.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Checkout/frontend/js/model/cart/totals-processor/default.test.js @@ -107,6 +107,7 @@ define([ it('estimateTotals if data wasn\'t cached and request was successfully sent', function () { var deferral = new $.Deferred(); + spyOn(mocks['Magento_Checkout/js/model/cart/cache'], 'isChanged').and.returnValue(true); spyOn(mocks['Magento_Customer/js/customer-data'], 'get').and.returnValue( ko.observable({ @@ -131,6 +132,7 @@ define([ it('estimateTotals if data wasn\'t cached and request returns error', function () { var deferral = new $.Deferred(); + spyOn(mocks['Magento_Checkout/js/model/cart/cache'], 'isChanged').and.returnValue(true); spyOn(mocks['Magento_Customer/js/customer-data'], 'get').and.returnValue( ko.observable({ From c727e90987578c1990dbb71ce2c383dd659234b6 Mon Sep 17 00:00:00 2001 From: Navarr Barnier Date: Mon, 30 Jul 2018 08:28:00 -0400 Subject: [PATCH 5/5] Fix styling issues --- .../frontend/js/model/cart/totals-processor/default.test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Checkout/frontend/js/model/cart/totals-processor/default.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Checkout/frontend/js/model/cart/totals-processor/default.test.js index f3d51cbb03790..91cb4480039d1 100644 --- a/dev/tests/js/jasmine/tests/app/code/Magento/Checkout/frontend/js/model/cart/totals-processor/default.test.js +++ b/dev/tests/js/jasmine/tests/app/code/Magento/Checkout/frontend/js/model/cart/totals-processor/default.test.js @@ -107,7 +107,7 @@ define([ it('estimateTotals if data wasn\'t cached and request was successfully sent', function () { var deferral = new $.Deferred(); - + spyOn(mocks['Magento_Checkout/js/model/cart/cache'], 'isChanged').and.returnValue(true); spyOn(mocks['Magento_Customer/js/customer-data'], 'get').and.returnValue( ko.observable({ @@ -132,7 +132,7 @@ define([ it('estimateTotals if data wasn\'t cached and request returns error', function () { var deferral = new $.Deferred(); - + spyOn(mocks['Magento_Checkout/js/model/cart/cache'], 'isChanged').and.returnValue(true); spyOn(mocks['Magento_Customer/js/customer-data'], 'get').and.returnValue( ko.observable({