describe('Component vnCalendar', () => { let controller; let $element; beforeEach(ngModule('vnCore')); beforeEach(inject(($compile, $rootScope) => { $element = $compile(` { $element.remove(); }); describe('data() setter', () => { it(`should set an array of events and convert string dates to string object, then call repaint() method`, () => { spyOn(controller, 'repaint'); let currentDate = new Date().toString(); controller.data = [ {dated: currentDate, title: 'Event 1'}, {dated: currentDate, title: 'Event 2'}, ]; expect(controller.events[0].dated instanceof Object).toBeTruthy(); expect(controller.repaint).toHaveBeenCalledWith(); }); }); describe('addEvent()', () => { it(`should add an event to an array of events`, () => { controller.events = []; controller.addEvent({ dated: new Date(), title: 'My event', className: 'color' }); const firstEvent = controller.events[0]; expect(firstEvent.title).toEqual('My event'); expect(firstEvent.isRemovable).toBeDefined(); expect(firstEvent.isRemovable).toBeTruthy(); }); it(`should not repeat an event for the same date`, () => { const curDate = new Date(); curDate.setHours(0, 0, 0, 0); controller.events = [{ dated: curDate, title: 'My event 1', className: 'color' }]; controller.addEvent({ dated: curDate, title: 'My event 2', className: 'color' }); const firstEvent = controller.events[0]; expect(controller.events.length).toEqual(1); expect(firstEvent.title).toEqual('My event 1'); }); }); describe('removeEvent()', () => { it(`should remove an event from an array of events`, () => { const curDate = new Date(); controller._events = [{ dated: curDate, title: 'My event 1', className: 'color' }]; controller.removeEvent(curDate); expect(controller.events.length).toEqual(0); }); }); describe('moveNext()', () => { it(`should shift to the next n months, then emit a 'moveNext' event`, () => { spyOn(controller, 'emit'); const currentMonth = controller.defaultDate.getMonth(); let nextMonth = currentMonth + 1; controller.moveNext(1); expect(controller.defaultDate.getMonth()).toEqual(nextMonth); expect(controller.emit).toHaveBeenCalledWith('moveNext'); }); }); describe('movePrevious()', () => { it(`should shift to the previous n months, then emit a 'movePrevious' event`, () => { spyOn(controller, 'emit'); const currentMonth = controller.defaultDate.getMonth(); let previousMonth = currentMonth - 1; controller.movePrevious(1); expect(controller.defaultDate.getMonth()).toEqual(previousMonth); expect(controller.emit).toHaveBeenCalledWith('movePrevious'); }); }); describe('select()', () => { it(`should return the selected element, then emit a 'selection' event`, () => { spyOn(controller, 'emit'); const days = [{dated: new Date()}]; controller.days = days; controller.select(0); expect(controller.emit).toHaveBeenCalledWith('selection', {values: days}); }); }); });