import { AddressPickerController, EnterButtonKeyCode } from './AddressPicker'; import { AddressClient } from '../../clients/AddressClient'; import { appConfig } from '../../entities/AppConfig.fixture'; import { address } from '../../entities/Address.fixture'; import * as TypeMoq from 'typemoq'; import { expect } from 'chai'; let addressClient: TypeMoq.IMock; let addressResponse = Promise.resolve({ data: [address] }) describe('Address picker directive', () => { beforeEach(() => { addressClient = TypeMoq.Mock.ofType(); addressClient.setup(x => x.getAddresses(TypeMoq.It.isAnyString())).returns((postcode: string) => addressResponse); delete AddressPickerController.prototype.providedPostcode; }); it('should load the addresses when postcode is provided', () => { AddressPickerController.prototype.providedPostcode = 'postcode'; let controller = new AddressPickerController(addressClient.object); return addressResponse.then(_ => expect(controller.addresses).to.deep.equal([{ ...address, manualAddress: false }]) && expect(controller.manualAddressVisible).to.be.false ); }); it('should load the addresses when postcode is entered in the form', () => { let controller = new AddressPickerController(addressClient.object); controller.postcode = 'postcode'; controller.postcodeKeypress({ keyCode: EnterButtonKeyCode, preventDefault: () => { } } as KeyboardEvent); return addressResponse.then(_ => expect(controller.addresses).to.deep.equal([{ ...address, manualAddress: false }]) && expect(controller.clickedFind).to.be.true && expect(controller.manualAddressVisible).to.be.false ); }); it('should show the manual address form when called', () => { let controller = new AddressPickerController(addressClient.object); controller.postcode = 'postcode'; controller.showManualAddress(); expect(controller.manualAddressVisible).to.be.true; expect(controller.address).to.deep.equal({ addressLine1: '', addressLine2: '', town: '', postcode: 'postcode', manualAddress: true }); }); });