import { SearchListController } from './SearchListDirective'; import { Mock, It, IMock, Times } from 'typemoq'; import { expect } from 'chai'; describe('SearchList Directive', () => { let controller: SearchListController; let items = [{ description: 'item 1', imageURL: 'foo.com/1.jpg' }, { description: 'item 2', imageURL: 'foo.com/2.jpg' }, { description: 'item 3' }]; let onSelect = Mock.ofType<(x: any) => any>(); beforeEach(inject(($rootScope: angular.IRootScopeService) => { let scope: ng.IScope = $rootScope.$new(); controller = new SearchListController(scope); controller.items = items; controller.onSelect = onSelect.object; controller.imageLinkProperty = 'imageURL'; controller.descriptionProperty = 'description'; })); it('should have an empty initial search text', () => { expect(controller.searchText).to.equal(''); }); it('should have the menu set to not visible in the initial state', () => { expect(controller.menuVisible).to.be.false; }); it('selects an item and makes a callback', () => { const item = { description: 'item 4' }; controller.selectItem(item); expect(controller.ngModel).to.equal(item); expect(controller.searchText).to.equal(item[controller.descriptionProperty]); onSelect.verify(x => x({ item: controller.ngModel }), Times.once()); }); it('can set the visibility of the menu', () => { expect(controller.menuVisible).to.be.false; controller.setMenuVisibility(true); expect(controller.menuVisible).to.be.true; controller.setMenuVisibility(true); expect(controller.menuVisible).to.be.true; controller.setMenuVisibility(false); expect(controller.menuVisible).to.be.false; }); it('can determine if an item in the list has an image', () => { const items = [{ description: 'item 1', imageURL: 'foo.com/1.jpg' }, { description: 'item 2', imageURL: 'foo.com/2.jpg' }, { description: 'item 3' }]; expect(controller.itemHasImage(items[0])).to.be.true; expect(controller.itemHasImage(items[1])).to.be.true; expect(controller.itemHasImage(items[2])).to.be.true; }); it('sets the search text correctly', () => { expect(controller.searchText).to.equal(''); controller.selectItem(controller.items[0]); expect(controller.searchText).to.equal(controller.ngModel[controller.descriptionProperty]); controller.searchText = 'item 1'; controller.updateSearchText(); expect(controller.searchText).to.equal(controller.ngModel[controller.descriptionProperty]); }); });