144 lines
3.6 KiB
TypeScript
144 lines
3.6 KiB
TypeScript
|
/* eslint-disable no-unused-expressions */
|
||
|
/**
|
||
|
* External dependencies
|
||
|
*/
|
||
|
import * as wpDataFunctions from '@wordpress/data';
|
||
|
|
||
|
/**
|
||
|
* Internal dependencies
|
||
|
*/
|
||
|
import { setDefaultPaymentMethod } from '../set-default-payment-method';
|
||
|
import { PaymentMethods } from '../../../types';
|
||
|
import { PAYMENT_METHOD_DATA_STORE_KEY } from '..';
|
||
|
|
||
|
const originalSelect = jest.requireActual( '@wordpress/data' ).select;
|
||
|
|
||
|
describe( 'setDefaultPaymentMethod', () => {
|
||
|
afterEach( () => {
|
||
|
jest.resetAllMocks();
|
||
|
jest.resetModules();
|
||
|
} );
|
||
|
|
||
|
const paymentMethods: PaymentMethods = {
|
||
|
'wc-payment-gateway-1': {
|
||
|
name: 'wc-payment-gateway-1',
|
||
|
},
|
||
|
'wc-payment-gateway-2': {
|
||
|
name: 'wc-payment-gateway-2',
|
||
|
},
|
||
|
};
|
||
|
|
||
|
it( ' correctly sets the first payment method in the list of available payment methods', async () => {
|
||
|
jest.spyOn( wpDataFunctions, 'select' ).mockImplementation(
|
||
|
( storeName ) => {
|
||
|
const originalStore = originalSelect( storeName );
|
||
|
if ( storeName === PAYMENT_METHOD_DATA_STORE_KEY ) {
|
||
|
return {
|
||
|
...originalStore,
|
||
|
getAvailableExpressPaymentMethods: () => {
|
||
|
return {
|
||
|
express_payment_1: {
|
||
|
name: 'express_payment_1',
|
||
|
},
|
||
|
};
|
||
|
},
|
||
|
getSavedPaymentMethods: () => {
|
||
|
return {};
|
||
|
},
|
||
|
};
|
||
|
}
|
||
|
return originalStore;
|
||
|
}
|
||
|
);
|
||
|
|
||
|
const originalDispatch =
|
||
|
jest.requireActual( '@wordpress/data' ).dispatch;
|
||
|
const setActivePaymentMethodMock = jest.fn();
|
||
|
jest.spyOn( wpDataFunctions, 'dispatch' ).mockImplementation(
|
||
|
( storeName ) => {
|
||
|
const originalStore = originalDispatch( storeName );
|
||
|
if ( storeName === PAYMENT_METHOD_DATA_STORE_KEY ) {
|
||
|
return {
|
||
|
...originalStore,
|
||
|
setActivePaymentMethod: setActivePaymentMethodMock,
|
||
|
};
|
||
|
}
|
||
|
return originalStore;
|
||
|
}
|
||
|
);
|
||
|
await setDefaultPaymentMethod( paymentMethods );
|
||
|
expect( setActivePaymentMethodMock ).toHaveBeenCalledWith(
|
||
|
'wc-payment-gateway-1'
|
||
|
);
|
||
|
} );
|
||
|
it( ' correctly sets the saved payment method if one is available', async () => {
|
||
|
jest.spyOn( wpDataFunctions, 'select' ).mockImplementation(
|
||
|
( storeName ) => {
|
||
|
const originalStore = originalSelect( storeName );
|
||
|
if ( storeName === PAYMENT_METHOD_DATA_STORE_KEY ) {
|
||
|
return {
|
||
|
...originalStore,
|
||
|
getAvailableExpressPaymentMethods: () => {
|
||
|
return {
|
||
|
express_payment_1: {
|
||
|
name: 'express_payment_1',
|
||
|
},
|
||
|
};
|
||
|
},
|
||
|
getSavedPaymentMethods: () => {
|
||
|
return {
|
||
|
cc: [
|
||
|
{
|
||
|
method: {
|
||
|
gateway: 'saved-method',
|
||
|
last4: '4242',
|
||
|
brand: 'Visa',
|
||
|
},
|
||
|
expires: '04/44',
|
||
|
is_default: true,
|
||
|
actions: {
|
||
|
delete: {
|
||
|
url: 'https://example.com/delete',
|
||
|
name: 'Delete',
|
||
|
},
|
||
|
},
|
||
|
tokenId: 2,
|
||
|
},
|
||
|
],
|
||
|
};
|
||
|
},
|
||
|
};
|
||
|
}
|
||
|
return originalStore;
|
||
|
}
|
||
|
);
|
||
|
|
||
|
const originalDispatch =
|
||
|
jest.requireActual( '@wordpress/data' ).dispatch;
|
||
|
const setActivePaymentMethodMock = jest.fn();
|
||
|
jest.spyOn( wpDataFunctions, 'dispatch' ).mockImplementation(
|
||
|
( storeName ) => {
|
||
|
const originalStore = originalDispatch( storeName );
|
||
|
if ( storeName === PAYMENT_METHOD_DATA_STORE_KEY ) {
|
||
|
return {
|
||
|
...originalStore,
|
||
|
setActivePaymentMethod: setActivePaymentMethodMock,
|
||
|
setPaymentStatus: () => void 0,
|
||
|
};
|
||
|
}
|
||
|
return originalStore;
|
||
|
}
|
||
|
);
|
||
|
await setDefaultPaymentMethod( paymentMethods );
|
||
|
expect( setActivePaymentMethodMock ).toHaveBeenCalledWith(
|
||
|
'saved-method',
|
||
|
{
|
||
|
isSavedToken: true,
|
||
|
payment_method: 'saved-method',
|
||
|
token: '2',
|
||
|
'wc-saved-method-payment-token': '2',
|
||
|
}
|
||
|
);
|
||
|
} );
|
||
|
} );
|