salix/modules/travel/front/extra-community/index.spec.js

140 lines
4.9 KiB
JavaScript

import './index.js';
describe('Travel Component vnTravelExtraCommunity', () => {
let controller;
let $httpBackend;
beforeEach(ngModule('travel'));
beforeEach(inject(($componentController, _$httpBackend_) => {
$httpBackend = _$httpBackend_;
const $element = angular.element('<vn-travel-extra-community><div class="travel-list"></div></vn-travel-extra-community>');
controller = $componentController('vnTravelExtraCommunity', {$element});
controller.$.model = {};
controller.$.model.refresh = jest.fn();
}));
describe('hasDateRange()', () => {
it('should return truthy when shippedFrom or landedTo are set as userParams', () => {
const now = new Date();
controller.$.model.userParams = {shippedFrom: now, landedTo: now};
const result = controller.hasDateRange;
expect(result).toBeTruthy();
});
});
describe('findDraggable()', () => {
it('should find the draggable element', () => {
const draggable = document.createElement('a');
draggable.setAttribute('draggable', true);
const $event = new Event('dragstart');
const target = document.createElement('div');
draggable.appendChild(target);
target.dispatchEvent($event);
const result = controller.findDraggable($event);
expect(result).toEqual(draggable);
});
});
describe('findDroppable()', () => {
it('should find the droppable element', () => {
const droppable = document.createElement('vn-tbody');
droppable.setAttribute('vn-droppable', true);
const $event = new Event('drop');
const target = document.createElement('div');
droppable.appendChild(target);
target.dispatchEvent($event);
const result = controller.findDroppable($event);
expect(result).toEqual(droppable);
});
});
describe('dragStart()', () => {
it(`should add the class "dragging" to the draggable element
and then set the entryId controller property`, () => {
const draggable = document.createElement('a');
draggable.setAttribute('draggable', true);
draggable.setAttribute('id', 3);
jest.spyOn(controller, 'findDraggable').mockReturnValue(draggable);
const $event = new Event('dragStart');
controller.dragStart($event);
const firstClass = draggable.classList[0];
expect(firstClass).toEqual('dragging');
expect(controller.entryId).toEqual(3);
expect(controller.entry).toEqual(draggable);
});
});
describe('dragEnd()', () => {
it(`should remove the class "dragging" from the draggable element
and then set the entryId controller property to null`, () => {
const draggable = document.createElement('a');
draggable.setAttribute('draggable', true);
draggable.setAttribute('id', 3);
draggable.classList.add('dragging');
jest.spyOn(controller, 'findDraggable').mockReturnValue(draggable);
const $event = new Event('dragStart');
controller.dragEnd($event);
const classList = draggable.classList;
expect(classList.length).toEqual(0);
expect(controller.entryId).toBeNull();
expect(controller.entry).toBeNull();
});
});
describe('onDrop()', () => {
it('should make an HTTP patch query', () => {
const droppable = document.createElement('vn-tbody');
droppable.setAttribute('vn-droppable', true);
droppable.setAttribute('id', 1);
jest.spyOn(controller, 'findDroppable').mockReturnValue(droppable);
const oldDroppable = document.createElement('vn-tbody');
oldDroppable.setAttribute('vn-droppable', true);
const entry = document.createElement('div');
oldDroppable.appendChild(entry);
controller.entryId = 3;
controller.entry = entry;
const $event = new Event('drop');
const expectedData = {travelFk: 1};
$httpBackend.expect('PATCH', `Entries/3`, expectedData).respond(200);
controller.onDrop($event);
$httpBackend.flush();
});
});
describe('save()', () => {
it('should make an HTTP query', () => {
jest.spyOn(controller.vnApp, 'showSuccess');
const travelId = 1;
const data = {ref: 'New reference'};
const expectedData = {ref: 'New reference'};
$httpBackend.expect('PATCH', `Travels/${travelId}`, expectedData).respond(200);
controller.save(travelId, data);
$httpBackend.flush();
expect(controller.vnApp.showSuccess).toHaveBeenCalledWith('Data saved!');
});
});
});