describe('Component vnDialog', () => { let $element; let controller; beforeEach(angular.mock.module('vnCore', $translateProvider => { $translateProvider.translations('en', {}); })); beforeEach(angular.mock.inject($componentController => { $element = angular.element(''); controller = $componentController('vnDialog', {$element, $transclude: null}); controller.emit = jasmine.createSpy('emit'); })); describe('show()', () => { it(`should do nothing if controller.shown is defined`, () => { controller.element = {style: {display: 'none'}}; controller.shown = true; controller.show(); expect(controller.element.style.display).toEqual('none'); expect(controller.emit).not.toHaveBeenCalledWith('open'); }); it(`should set shown on the controller, set style.display on the element and emit onOpen() event`, () => { controller.show(); expect(controller.element.style.display).toEqual('flex'); expect(controller.shown).toBeTruthy(); expect(controller.emit).toHaveBeenCalledWith('open'); }); }); describe('hide()', () => { describe('fireResponse()', () => { it(`should call onResponse() if it's defined in the controller`, () => { controller.onResponse = () => {}; spyOn(controller, 'onResponse'); controller.hide(); expect(controller.onResponse).toHaveBeenCalledWith(jasmine.any(Object)); }); it(`should call onResponse() with a response`, () => { let responseRes; controller.onResponse = response => { responseRes = response; return false; }; let responseRet = controller.fireResponse('answer'); expect(responseRes).toEqual({response: 'answer'}); expect(responseRet).toEqual(false); }); }); describe('realHide()', () => { it(`should do nothing if controller.shown is not defined`, () => { controller.element = {style: {display: 'not none'}}; controller.hide(); expect(controller.element.style.display).toEqual('not none'); }); it(`should set lastEvent, shown and element.style.display to their expected values`, () => { controller.shown = true; controller.hide(); expect(controller.lastEvent).toBeFalsy(); expect(controller.shown).toBeFalsy(); expect(controller.element.style.display).toEqual('none'); }); }); }); });