From 953500d95b72bba4eee52629b3186084111bb451 Mon Sep 17 00:00:00 2001 From: Shani <31096696+shanikantsingh@users.noreply.github.com> Date: Tue, 7 May 2024 15:04:42 +0200 Subject: [PATCH] Calculate correct tax for applePay express (#1079) * fix: calculate correct tax for applePay express * test: update unit tests --- .../client/default/js/applePayExpress.js | 1 + .../__tests__/shippingMethods.test.js | 27 +++++++++++++++++++ .../expressPayments/shippingMethods.js | 20 +++++++++++--- 3 files changed, 44 insertions(+), 4 deletions(-) diff --git a/src/cartridges/app_adyen_SFRA/cartridge/client/default/js/applePayExpress.js b/src/cartridges/app_adyen_SFRA/cartridge/client/default/js/applePayExpress.js index d5c7900cf..97aa4066e 100644 --- a/src/cartridges/app_adyen_SFRA/cartridge/client/default/js/applePayExpress.js +++ b/src/cartridges/app_adyen_SFRA/cartridge/client/default/js/applePayExpress.js @@ -233,6 +233,7 @@ initializeCheckout() country: shippingContact.country, countryCode: shippingContact.countryCode, stateCode: shippingContact.administrativeArea, + postalCode: shippingContact.postalCode, })}`, ); if (shippingMethods.ok) { diff --git a/src/cartridges/int_adyen_SFRA/cartridge/adyen/scripts/expressPayments/__tests__/shippingMethods.test.js b/src/cartridges/int_adyen_SFRA/cartridge/adyen/scripts/expressPayments/__tests__/shippingMethods.test.js index 3053a0210..44fbf2982 100644 --- a/src/cartridges/int_adyen_SFRA/cartridge/adyen/scripts/expressPayments/__tests__/shippingMethods.test.js +++ b/src/cartridges/int_adyen_SFRA/cartridge/adyen/scripts/expressPayments/__tests__/shippingMethods.test.js @@ -1,4 +1,5 @@ /* eslint-disable global-require */ +const BasketMgr = require('dw/order/BasketMgr'); const AdyenHelper = require('*/cartridge/adyen/utils/adyenHelper'); let res; @@ -6,6 +7,7 @@ let req; const next = jest.fn(); const callGetShippingMethods = require('../shippingMethods'); +const Logger = require("../../../../../../../../jest/__mocks__/dw/system/Logger"); beforeEach(() => { jest.clearAllMocks(); @@ -15,6 +17,7 @@ beforeEach(() => { city: 'Amsterdam', countryCode: 'NL', stateCode: 'AMS', + postalCode: '1001', shipmentUUID: 'mocked_uuid', }, locale: { id: 'nl_NL' }, @@ -52,4 +55,28 @@ describe('Shipping methods', () => { callGetShippingMethods(req, res, next); expect(res.json).not.toHaveBeenCalled(); }); + it('Should update shipping address for the basket', () => { + const Logger = require('../../../../../../../../jest/__mocks__/dw/system/Logger'); + const setCityMock = jest.fn() + const setPostalCodeMock = jest.fn() + const setStateCodeMock = jest.fn() + const setCountryCodeMock = jest.fn() + const currentBasketMock = { + getDefaultShipment: jest.fn(() =>({ + createShippingAddress: jest.fn(() => ({ + setCity: setCityMock, + setPostalCode: setPostalCodeMock, + setStateCode: setStateCodeMock, + setCountryCode: setCountryCodeMock + })) + })), + }; + BasketMgr.getCurrentBasket.mockReturnValueOnce(currentBasketMock); + callGetShippingMethods(req, res, next); + expect(setCityMock).toHaveBeenCalledWith('Amsterdam'); + expect(setPostalCodeMock).toHaveBeenCalledWith('1001'); + expect(setStateCodeMock).toHaveBeenCalledWith('AMS'); + expect(setCountryCodeMock).toHaveBeenCalledWith('NL'); + expect(Logger.error.mock.calls.length).toBe(0); + }); }); \ No newline at end of file diff --git a/src/cartridges/int_adyen_SFRA/cartridge/adyen/scripts/expressPayments/shippingMethods.js b/src/cartridges/int_adyen_SFRA/cartridge/adyen/scripts/expressPayments/shippingMethods.js index a745806ea..ad35bf6d9 100644 --- a/src/cartridges/int_adyen_SFRA/cartridge/adyen/scripts/expressPayments/shippingMethods.js +++ b/src/cartridges/int_adyen_SFRA/cartridge/adyen/scripts/expressPayments/shippingMethods.js @@ -1,4 +1,5 @@ const BasketMgr = require('dw/order/BasketMgr'); +const Transaction = require('dw/system/Transaction'); const AdyenLogs = require('*/cartridge/adyen/logs/adyenCustomLogs'); const AdyenHelper = require('*/cartridge/adyen/utils/adyenHelper'); @@ -13,14 +14,25 @@ function callGetShippingMethods(req, res, next) { city: req.querystring.city, countryCode: req.querystring.countryCode, stateCode: req.querystring.stateCode, + postalCode: req.querystring.postalCode, }; } const currentBasket = BasketMgr.getCurrentBasket(); + const shipment = currentBasket.getDefaultShipment(); + Transaction.wrap(() => { + let { shippingAddress } = shipment; + if (!shippingAddress) { + shippingAddress = currentBasket + .getDefaultShipment() + .createShippingAddress(); + } + shippingAddress.setCity(address.city); + shippingAddress.setPostalCode(address.postalCode); + shippingAddress.setStateCode(address.stateCode); + shippingAddress.setCountryCode(address.countryCode); + }); const currentShippingMethodsModels = - AdyenHelper.getApplicableShippingMethods( - currentBasket.getDefaultShipment(), - address, - ); + AdyenHelper.getApplicableShippingMethods(shipment, address); res.json({ shippingMethods: currentShippingMethodsModels, });