142 lines
5.1 KiB
JavaScript
142 lines
5.1 KiB
JavaScript
import './index.js';
|
|
import popover from 'core/mocks/popover';
|
|
import crudModel from 'core/mocks/crud-model';
|
|
|
|
describe('Zone Component vnZoneDeliveryDays', () => {
|
|
let $httpBackend;
|
|
let controller;
|
|
let $element;
|
|
|
|
beforeEach(ngModule('zone'));
|
|
|
|
beforeEach(inject(($componentController, _$httpBackend_) => {
|
|
$httpBackend = _$httpBackend_;
|
|
$element = angular.element('<vn-zone-delivery-days></vn-zone-delivery-days');
|
|
controller = $componentController('vnZoneDeliveryDays', {$element});
|
|
controller.$.zoneEvents = popover;
|
|
controller.$.params = {};
|
|
controller.$.zoneModel = crudModel;
|
|
}));
|
|
|
|
describe('deliveryMethodFk() setter', () => {
|
|
it('should set the deliveryMethodFk property as pickup and then perform a query that sets the filter', () => {
|
|
$httpBackend.expect('GET', 'DeliveryMethods').respond([{id: 999}]);
|
|
controller.deliveryMethodFk = 'pickUp';
|
|
$httpBackend.flush();
|
|
|
|
expect(controller.agencyFilter).toEqual({deliveryMethodFk: {inq: [999]}});
|
|
});
|
|
});
|
|
|
|
describe('setParams()', () => {
|
|
it('should do nothing when no params are received', () => {
|
|
controller.setParams();
|
|
|
|
expect(controller.deliveryMethodFk).toBeUndefined();
|
|
expect(controller.geoFk).toBeUndefined();
|
|
expect(controller.agencyModeFk).toBeUndefined();
|
|
});
|
|
|
|
it('should set the controller properties when the params are provided', () => {
|
|
controller.$params = {
|
|
deliveryMethodFk: 3,
|
|
geoFk: 2,
|
|
agencyModeFk: 1
|
|
};
|
|
controller.setParams();
|
|
|
|
expect(controller.deliveryMethodFk).toEqual(controller.$params.deliveryMethodFk);
|
|
expect(controller.geoFk).toEqual(controller.$params.geoFk);
|
|
expect(controller.agencyModeFk).toEqual(controller.$params.agencyModeFk);
|
|
});
|
|
});
|
|
|
|
describe('fetchData()', () => {
|
|
it('should make an HTTP GET query and then call the showMessage() method', () => {
|
|
jest.spyOn(controller.vnApp, 'showMessage');
|
|
jest.spyOn(controller.$state, 'go');
|
|
|
|
controller.agencyModeFk = 1;
|
|
controller.deliveryMethodFk = 2;
|
|
controller.geoFk = 3;
|
|
controller.$state.current.name = 'myState';
|
|
|
|
const expectedData = {events: []};
|
|
|
|
const url = 'Zones/getEvents?agencyModeFk=1&deliveryMethodFk=2&geoFk=3';
|
|
|
|
$httpBackend.when('GET', 'DeliveryMethods').respond([]);
|
|
$httpBackend.expect('GET', url).respond({events: []});
|
|
controller.fetchData();
|
|
$httpBackend.flush();
|
|
|
|
expect(controller.$.data).toEqual(expectedData);
|
|
expect(controller.vnApp.showMessage).toHaveBeenCalledWith('No service for the specified zone');
|
|
expect(controller.$state.go).toHaveBeenCalledWith(
|
|
controller.$state.current.name,
|
|
{
|
|
agencyModeFk: 1,
|
|
deliveryMethodFk: 2,
|
|
geoFk: 3
|
|
}
|
|
);
|
|
});
|
|
});
|
|
|
|
describe('onSelection()', () => {
|
|
it('should not call the show popover method if events array is empty', () => {
|
|
jest.spyOn(controller.$.zoneEvents, 'show');
|
|
|
|
const event = new Event('click');
|
|
const target = document.createElement('div');
|
|
target.dispatchEvent(event);
|
|
const events = [];
|
|
controller.onSelection(event, events);
|
|
|
|
expect(controller.$.zoneEvents.show).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it('should call the show() method and then call the applyFilter() method with the expected ids', () => {
|
|
const zoneModel = controller.$.zoneModel;
|
|
jest.spyOn(controller.$.zoneEvents, 'show');
|
|
jest.spyOn(zoneModel, 'applyFilter').mockReturnValue(new Promise(resolve => {
|
|
zoneModel.data = [
|
|
{id: 1, events: [{price: 25}]}
|
|
];
|
|
}));
|
|
|
|
const event = new Event('click');
|
|
const target = document.createElement('div');
|
|
target.dispatchEvent(event);
|
|
const events = [
|
|
{zoneFk: 1},
|
|
{zoneFk: 2},
|
|
{zoneFk: 8}
|
|
];
|
|
|
|
const day = new Date();
|
|
controller.onSelection(event, events, [day]);
|
|
const expectedFilter = {
|
|
include: [
|
|
{
|
|
relation: 'agencyMode',
|
|
scope: {fields: ['name']}
|
|
},
|
|
{
|
|
relation: 'events',
|
|
scope: {
|
|
where: {dated: day}
|
|
}
|
|
}
|
|
],
|
|
where: {
|
|
id: {inq: [1, 2, 8]}
|
|
}
|
|
};
|
|
|
|
expect(controller.$.zoneEvents.show).toHaveBeenCalledWith(target);
|
|
expect(zoneModel.applyFilter).toHaveBeenCalledWith(expectedFilter);
|
|
});
|
|
});
|
|
});
|