import { AcquisitionService, AcquisitionParameters } from './AcquisitionService'; import { AcquisitionClient } from '../clients/AcquisitionClient'; import { UserDataState } from '../state/UserDataState'; import { AnalyticsService, AnalyticsEvent } from './AnalyticsService'; import { Mock, It, IMock, Times } from 'typemoq'; import { acquisitionRequest, acquisitionResponse } from '../entities/Acquisition.fixture'; import { address } from '../entities/Address.fixture'; import { quote } from '../entities/Quote.fixture'; import { expect } from 'chai'; import { LocalDate } from 'js-joda'; import { HostExtractor } from "../util/HostExtractor"; import { OnboardingService } from "./OnboardingService"; import { $q } from '../util/PromiseUtils'; import { OnboardingStatusResponse } from "../entities/Onboarding"; const userDataState = { bundleName: 'EV', criticalCode: 'Other', dateOfBirth: LocalDate.of(1986, 5, 24), economy7: false, emailAddress: 'bob.dylan@ovoenergy.com', firstName: 'Bob', foundation: true, fuel: 'Electricity', lastName: 'Dylan', marketingOptIn: false, paymentMethod: 'Paym', phone: '01215123456', quoteType: 'Quick', serviceOptIn: 'EmailAndSMS', serviceType: 'Online', supplyAddress: address, tariffId: 'Fixed', title: 'Mr', } as UserDataState; describe('Acquisition service', () => { let acquisitionClient: IMock; let acquisitionService: AcquisitionService; let analyticsService: IMock; let onboardingService: IMock; let host: IMock; beforeEach(() => { acquisitionClient = Mock.ofType(); analyticsService = Mock.ofType(); onboardingService = Mock.ofType(); host = Mock.ofType(); acquisitionService = new AcquisitionService(acquisitionClient.object, userDataState, analyticsService.object, host.object, onboardingService.object, $q); }); it('submits an acquisition', () => { acquisitionClient.setup(x => x.acquisition(It.isValue(acquisitionRequest))).returns(() => Promise.resolve({ data: acquisitionResponse })); const params: AcquisitionParameters = { accountName: 'R Zimmerman', accountNumber: '12345678', payInArrears: true, referredFrom: 'SocialMedia', sortCode: '202020' }; acquisitionService.acquisition(quote, params).then(() => expect(acquisitionService.successState).to.deep.equal({ isPaygPlus: false, customerId: 'SF-CUS-12345', onboarding: false })); analyticsService.verify(x => x.push(It.isObjectWith({ event: 'SubmitAcquisition' })), Times.once()); }); it('is able to determine the boltons and their discount percentages to include with the acquisition request', () => { let result = acquisitionService.getBundleFromQuote(quote); expect(result.boltons.length).to.equal(2); }); });