salix/front/core/components/calendar/index.spec.js

119 lines
3.8 KiB
JavaScript

describe('Component vnCalendar', () => {
let controller;
let $element;
beforeEach(ngModule('vnCore'));
beforeEach(inject(($compile, $rootScope) => {
$element = $compile(`<vn-calendar></vn-calendar`)($rootScope);
controller = $element.controller('vnCalendar');
controller.defaultDate = new Date();
}));
afterEach(() => {
$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, name: 'Event 1'},
{dated: currentDate, name: '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(),
name: 'My event'
});
const firstEvent = controller.events[0];
expect(firstEvent.name).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,
name: 'My event 1'
}];
controller.addEvent({
dated: curDate,
name: 'My event 2'
});
const firstEvent = controller.events[0];
expect(controller.events.length).toEqual(2);
expect(firstEvent.name).toEqual('My event 1');
});
});
describe('removeEvent()', () => {
it(`should remove an event from an array of events`, () => {
const curDate = new Date();
controller._events = [{
dated: curDate,
name: '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});
});
});
});