From 2cb4e8b7bc776ac669e4ec5f7e71bef94954340a Mon Sep 17 00:00:00 2001 From: Daniel Del Core Date: Mon, 13 Nov 2017 16:25:02 +1100 Subject: [PATCH] feat(client): PAYMENTS-1986 Expose store request methods --- src/client/client.js | 42 ++++++++++++++++++++++++++--- test/client/client.spec.js | 55 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 92 insertions(+), 5 deletions(-) diff --git a/src/client/client.js b/src/client/client.js index 7ea3ad04..914e5197 100644 --- a/src/client/client.js +++ b/src/client/client.js @@ -1,6 +1,7 @@ import objectAssign from 'object-assign'; import OffsitePaymentInitializer from '../payment/offsite-payment-initializer'; import PaymentSubmitter from '../payment/payment-submitter'; +import StoreRequestSender from '../store/store-request-sender'; import DEFAULT_CONFIG from './default-config'; export default class Client { @@ -10,10 +11,16 @@ export default class Client { */ static create(config) { const clientConfig = objectAssign({}, DEFAULT_CONFIG, config); - const paymentSubmitter = PaymentSubmitter.create(clientConfig); const offsitePaymentInitializer = OffsitePaymentInitializer.create(clientConfig); + const paymentSubmitter = PaymentSubmitter.create(clientConfig); + const storeRequestSender = StoreRequestSender.create(clientConfig); - return new Client(clientConfig, paymentSubmitter, offsitePaymentInitializer); + return new Client( + clientConfig, + paymentSubmitter, + offsitePaymentInitializer, + storeRequestSender + ); } /** @@ -21,8 +28,15 @@ export default class Client { * @param {PaymentSubmitter} paymentSubmitter * @param {OffsitePaymentInitializer} offsitePaymentInitializer * @param {ClientTokenGenerator} clientTokenGenerator + * @param {StoreRequestSender} storeRequestSender */ - constructor(config, paymentSubmitter, offsitePaymentInitializer, clientTokenGenerator) { + constructor( + config, + paymentSubmitter, + offsitePaymentInitializer, + clientTokenGenerator, + storeRequestSender + ) { /** * @private * @type {Object} @@ -46,6 +60,12 @@ export default class Client { * @type {ClientTokenGenerator} */ this.clientTokenGenerator = clientTokenGenerator; + + /** + * @private + * @type {StoreRequestSender} + */ + this.storeRequestSender = storeRequestSender; } /** @@ -74,4 +94,20 @@ export default class Client { generateClientToken(data, callback) { this.clientTokenGenerator.generateClientToken(data, callback); } + + getShopperToken(data, callback) { + this.storeRequestSender.getShopperToken(data, callback); + } + + getShopperInstruments(data, callback) { + this.storeRequestSender.getShopperInstruments(data, callback); + } + + postShopperInstrument(data, callback) { + this.storeRequestSender.postShopperInstrument(data, callback); + } + + deleteShopperInstrument(data, callback) { + this.storeRequestSender.deleteShopperInstrument(data, callback); + } } diff --git a/test/client/client.spec.js b/test/client/client.spec.js index 627f8a25..6678d519 100644 --- a/test/client/client.spec.js +++ b/test/client/client.spec.js @@ -2,13 +2,15 @@ import merge from 'lodash/merge'; import { HOSTED } from '../../src/payment/payment-types'; import Client from '../../src/client/client'; import paymentRequestDataMock from '../mocks/payment-request-data'; +import storeIntrumentDataMock from '../mocks/store-instrument-data'; describe('Client', () => { let client; let clientTokenGenerator; let config; - let paymentSubmitter; let offsitePaymentInitializer; + let paymentSubmitter; + let storeRequestSender; beforeEach(() => { config = { host: 'https://bigpay.dev' }; @@ -25,7 +27,20 @@ describe('Client', () => { generateClientToken: jasmine.createSpy('generateClientToken'), }; - client = new Client(config, paymentSubmitter, offsitePaymentInitializer, clientTokenGenerator); + storeRequestSender = { + getShopperToken: jasmine.createSpy('getShopperToken'), + getShopperInstruments: jasmine.createSpy('getShopperInstruments'), + postShopperInstrument: jasmine.createSpy('postShopperInstrument'), + deleteShopperInstrument: jasmine.createSpy('deleteShopperInstrument'), + }; + + client = new Client( + config, + paymentSubmitter, + offsitePaymentInitializer, + clientTokenGenerator, + storeRequestSender + ); }); it('returns an instance of Client', () => { @@ -64,4 +79,40 @@ describe('Client', () => { expect(clientTokenGenerator.generateClientToken).toHaveBeenCalledWith(data, callback); }); + + it('requests a shopper token', () => { + const callback = () => {}; + const data = storeIntrumentDataMock; + + client.getShopperToken(data, callback); + + expect(storeRequestSender.getShopperToken).toHaveBeenCalledWith(data, callback); + }); + + it('requests a shopper token', () => { + const callback = () => {}; + const data = storeIntrumentDataMock; + + client.getShopperInstruments(data, callback); + + expect(storeRequestSender.getShopperInstruments).toHaveBeenCalledWith(data, callback); + }); + + it('generates a client token', () => { + const callback = () => {}; + const data = storeIntrumentDataMock; + + client.postShopperInstrument(data, callback); + + expect(storeRequestSender.postShopperInstrument).toHaveBeenCalledWith(data, callback); + }); + + it('generates a client token', () => { + const callback = () => {}; + const data = storeIntrumentDataMock; + + client.deleteShopperInstrument(data, callback); + + expect(storeRequestSender.deleteShopperInstrument).toHaveBeenCalledWith(data, callback); + }); });