woocommerce/packages/woocommerce-blocks/assets/js/blocks-registry/payment-methods/test/payment-method-config.tsx
2021-12-10 12:03:04 +00:00

62 lines
2.1 KiB
TypeScript

/**
* External dependencies
*/
import { registerPaymentMethodExtensionCallbacks } from '@woocommerce/blocks-registry';
import type { PaymentMethodConfigInstance } from '@woocommerce/type-defs/payments';
/**
* Internal dependencies
*/
import PaymentMethodConfig from '../payment-method-config';
import * as paymentMethodConfigHelpers from '../payment-method-config-helper';
describe( 'PaymentMethodConfig', () => {
let paymentMethod: PaymentMethodConfigInstance;
const extensionsCallbackSpy = jest.spyOn(
paymentMethodConfigHelpers,
'canMakePaymentWithExtensions'
);
beforeEach( () => {
paymentMethod = new PaymentMethodConfig( {
name: 'test-payment-method',
label: 'Test payment method',
ariaLabel: 'Test payment method',
content: <div>Test payment content</div>,
edit: <div>Test payment edit</div>,
canMakePayment: () => true,
supports: { features: [ 'products' ] },
} );
} );
it( 'Uses canMakePaymentWithExtensions as the canMakePayment function if an extension registers a callback', () => {
registerPaymentMethodExtensionCallbacks(
'woocommerce-marketplace-extension',
{
'unrelated-payment-method': () => true,
}
);
// At this point, since no extensions have registered a callback for
// test-payment-method we can expect the canMakePayment getter NOT
// to execute canMakePaymentWithExtensions.
// Disable no-unused-expressions because we just want to test the getter
// eslint-disable-next-line no-unused-expressions
paymentMethod.canMakePayment;
expect( extensionsCallbackSpy ).toHaveBeenCalledTimes( 0 );
registerPaymentMethodExtensionCallbacks(
'other-woocommerce-marketplace-extension',
{
'test-payment-method': () => true,
}
);
// Now, because an extension _has_ registered a callback for test-payment-method
// The getter will use canMakePaymentWithExtensions to create the
// canMakePayment function.
// Disable no-unused-expressions because we just want to test the getter
// eslint-disable-next-line no-unused-expressions
paymentMethod.canMakePayment;
expect( extensionsCallbackSpy ).toHaveBeenCalledTimes( 1 );
} );
} );