import { QuoteController } from './Quote'; import { QuoteService } from '../common/services/QuoteService'; import { ModalService } from '../common/services/ModalService'; import { Mock, IMock, It, Times } from 'typemoq'; import {Quote, QuoteWithMeters} from '../common/entities/Quote'; import { UserDataState } from '../common/state/UserDataState'; import {quote, quoteWithMeters} from '../common/entities/Quote.fixture'; import { expect } from 'chai'; describe('Quote controller', () => { let quoteService: IMock, $state: IMock, $scope: IMock, modal: IMock; beforeEach(() => { quoteService = Mock.ofType(); $state = Mock.ofType(); $scope = Mock.ofType(); modal = Mock.ofType(); }); function newController() { return new QuoteController($state.object, quoteService.object, $scope.object, modal.object, {} as UserDataState); } it('should navigate to get quote page if quote doesn\'t exist', () => { const quoteResponse = Promise.reject("error"); quoteService.setup(x => x.getQuote()).returns(() => quoteResponse); const ctrl = newController(); return quoteResponse.catch(() => $state.verify(x => x.go(It.isValue("^.get-quote")), Times.once()) ); }); it('should set up tariffs and savings', () => { const quoteResponse = Promise.resolve(quoteWithMeters); quoteService.setup(x => x.getQuote()).returns(() => quoteResponse); const ctrl = newController(); return quoteResponse.then(() => { expect(ctrl.quote).to.equal(quoteWithMeters); expect(ctrl.showSavings).to.be.true; // because there are savings for each tariff }); }); it('should navigate to the plan page', () => { quoteService.setup(x => x.getQuote()).returns(() => Promise.resolve(quoteWithMeters)); const ctrl = newController(); ctrl.selectTariff('Variable'); $state.verify(x => x.go(It.isValue("^.plan")), Times.once()) }); it('should scroll to the given tariff', () => { quoteService.setup(x => x.getQuote()).returns(() => Promise.resolve(quoteWithMeters)); const ctrl = newController(); ctrl.scrollToTariff(2); expect(ctrl.selectedTariffMobile).to.equal(2); $scope.verify(x => x.$digest(), Times.once()); }); });