import { QuoteClient } from './QuoteClient'; import { Mock, It, IMock, Times } from 'typemoq'; import { Quote, SaveQuoteResponse } from '../entities/Quote'; import { Suppliers, SupplierTariff } from '../entities/Suppliers'; import { quote, quickQuoteRequestParams, estimatedQuoteRequestParams, usageBasedQuoteRequestParams, moveInQuoteRequestParams, saveQuoteRequest } from '../entities/Quote.fixture'; import { suppliers, supplierTariffs, supplierTariffRequestParams } from '../entities/Suppliers.fixture'; import { config } from '../entities/ApplicationConfig.fixture'; import { expect } from 'chai'; import * as _ from "lodash"; describe('Quote client', () => { let $http: IMock; let quoteClient: QuoteClient; beforeEach(() => { $http = Mock.ofType(); quoteClient = new QuoteClient(config, $http.object); }); it('should get a quick quote', () => { $http.setup(x => x.get('apiUrl/quote/quick-quote', It.is(config => config.headers["X-OVO-API-Version"] === 2 && _.isEqual(config.params, quickQuoteRequestParams)))). returns(() => Promise.resolve({ data: quote })); return expect(quoteClient.quickQuote(quickQuoteRequestParams)).to.eventually.deep.equal({ data: quote }); }); it('should get an estimated quote', () => { $http.setup(x => x.get('apiUrl/quote/estimated-quote', It.is(config => config.headers["X-OVO-API-Version"] === 2 && _.isEqual(config.params, estimatedQuoteRequestParams)))). returns(() => Promise.resolve({ data: quote })); return expect(quoteClient.estimatedQuote(estimatedQuoteRequestParams)).to.eventually.deep.equal({ data: quote }); }); it('should get a usage based quote', () => { $http.setup(x => x.get('apiUrl/quote/usage-based-quote', It.is(config => config.headers["X-OVO-API-Version"] === 2 && _.isEqual(config.params, usageBasedQuoteRequestParams)))). returns(() => Promise.resolve({ data: quote })); return expect(quoteClient.usageBasedQuote(usageBasedQuoteRequestParams)).to.eventually.deep.equal({ data: quote }); }); it('should get a move in quote', () => { $http.setup(x => x.get('apiUrl/quote/movein-quote', It.is(config => config.headers["X-OVO-API-Version"] === 2 && _.isEqual(config.params, moveInQuoteRequestParams)))). returns(() => Promise.resolve({ data: quote })); return expect(quoteClient.moveInQuote(moveInQuoteRequestParams)).to.eventually.deep.equal({ data: quote }); }); it('should get the list of suppliers', () => { $http.setup(x => x.get('apiUrl/quote/suppliers', It.is(config => config.headers["X-OVO-API-Version"] === 2 && config.params.region === 'London'))). returns(() => Promise.resolve({ data: suppliers })); expect(quoteClient.suppliers('London')).to.eventually.deep.equal({ data: suppliers }); }); it('should get the supplier tariffs', () => { $http.setup(x => x.get('apiUrl/quote/supplier-tariffs', It.is(config => config.headers["X-OVO-API-Version"] === 2 && _.isEqual(config.params, supplierTariffRequestParams)))) .returns(() => Promise.resolve({ data: supplierTariffs })); expect(quoteClient.supplierTariffs(supplierTariffRequestParams)).to.eventually.deep.equal({ data: supplierTariffs }); }); it('should save a quote', () => { $http.setup(x => x.post('apiUrl/quote/save-quote', It.isValue(saveQuoteRequest), It.is(config => config.headers["X-OVO-API-Version"] === 2))). returns(() => Promise.resolve({ data: { id: "234" } })); expect(quoteClient.saveQuote(saveQuoteRequest)).to.eventually.deep.equal({ data: { id: '234' } }); }); it('should retrieve a saved quote', () => { $http.setup(x => x.get('apiUrl/quote/retrieve-saved-quote', It.is(config => config.headers["X-OVO-API-Version"] === 2 && config.params.id === '123'))). returns(() => Promise.resolve({ data: quote })); expect(quoteClient.retrieveSavedQuote('123')).to.eventually.deep.equal({ data: quote }); }); });