import './autocomplete.js'; describe('Component vnAutocomplete', () => { let $componentController; let $scope; let $httpBackend; let $timeout; let $element; beforeEach(() => { angular.mock.module('client'); }); beforeEach(angular.mock.inject((_$componentController_, $rootScope, _$httpBackend_, _$timeout_) => { $componentController = _$componentController_; $scope = $rootScope.$new(); $httpBackend = _$httpBackend_; $timeout = _$timeout_; $element = angular.element('
'); })); describe('showDropDown() setter', () => { it(`should set _showDropDown value`, () => { let controller = $componentController('vnAutocomplete', {$scope, $element, $httpBackend, $timeout}); controller._showDropDown = ''; controller.showDropDown = 'some value'; expect(controller._showDropDown).toEqual('some value'); }); it(`should set _showDropDown value`, () => { let controller = $componentController('vnAutocomplete', {$scope, $element, $httpBackend, $timeout}); controller._showDropDown = ''; controller.showDropDown = 'some value'; expect(controller._showDropDown).toEqual('some value'); }); }); describe('displayValue() setter', () => { it(`should display value in a formated way`, () => { let controller = $componentController('vnAutocomplete', {$scope, $element, $httpBackend, $timeout}); let value = 'some value'; controller.displayValue = value; expect(controller._value).toEqual(value); }); describe('when the autocomeplete is multiple', () => { it(`should display values separated with commas`, () => { let controller = $componentController('vnAutocomplete', {$scope, $element, $httpBackend, $timeout}); controller.multiple = true; controller.displayValue = 'some value'; controller.displayValue = 'another value'; expect(controller._value).toEqual('some value, another value'); }); }); }); describe('field() setter', () => { describe('when value is an object with valueField property', () => { it(`should set _field and _multifield values and remove it from _multifield if called again`, () => { let controller = $componentController('vnAutocomplete', {$scope, $element, $httpBackend, $timeout}); controller.valueField = 'name'; controller.field = {name: 'Bruce Wayne'}; expect(controller._field).toEqual('Bruce Wayne'); expect(controller._multiField[0]).toEqual('Bruce Wayne'); controller.field = {name: 'Bruce Wayne'}; expect(controller._multiField).toEqual([]); expect(controller._field).toEqual('Bruce Wayne'); }); }); describe('when value is a number', () => { it(`should set field find an existing item in the controller.items property`, () => { let controller = $componentController('vnAutocomplete', {$scope, $element, $httpBackend, $timeout}); controller.items = [{id: 1, name: 'test1'}, {id: 2, name: 'Bruce Wayne'}]; controller.field = 2; expect(controller._field).toEqual(2); expect(controller._multiField).toEqual([]); controller.field = {id: 3, name: 'The Joker'}; expect(controller._field).toEqual(3); }); it(`should set field performing a query as the item id isn't present in the controller.items property`, () => { let controller = $componentController('vnAutocomplete', {$scope, $element, $httpBackend, $timeout}, {url: 'test.com'}); $httpBackend.whenGET('test.com?filter={"fields":{"id":true,"name":true},"where":{"id":3}}').respond(); $httpBackend.expectGET('test.com?filter={"fields":{"id":true,"name":true},"where":{"id":3}}'); controller.items = [{id: 1, name: 'test1'}, {id: 2, name: 'Bruce Wayne'}]; controller.field = 3; $httpBackend.flush(); }); }); }); });