import './index.js'; describe('Ticket', () => { describe('Component vnTicketBasicDataStepOne', () => { let $state; let controller; let $httpBackend; let $httpParamSerializer; beforeEach(ngModule('ticket')); beforeEach(angular.mock.inject(($componentController, _$state_, _$httpBackend_, _$httpParamSerializer_) => { $state = _$state_; $httpBackend = _$httpBackend_; $httpParamSerializer = _$httpParamSerializer_; controller = $componentController('vnTicketBasicDataStepOne', {$state}); })); describe('ticket() setter', () => { it('should set ticket property and call onChangeClient() method', () => { spyOn(controller, 'onChangeClient'); controller.ticket = {id: 1, clientFk: 101}; expect(controller.onChangeClient).toHaveBeenCalledWith(101); }); it(`should not call onChangeClient() method as the ticket doesn't have an ID`, () => { spyOn(controller, 'onChangeClient'); controller.ticket = {}; expect(controller.onChangeClient).not.toHaveBeenCalledWith(); }); }); describe('clientId() setter', () => { it('should set clientId property and call onChangeClient() method ', () => { spyOn(controller, 'onChangeClient'); controller.ticket = {id: 1, clientId: 101}; controller.clientId = 102; expect(controller.onChangeClient).toHaveBeenCalledWith(102); }); }); describe('shipped() setter', () => { it('should set shipped property and call onChangeShipped() method ', () => { let shipped = new Date(); spyOn(controller, 'onChangeShipped'); controller.ticket = {id: 1}; controller.shipped = shipped; expect(controller.onChangeShipped).toHaveBeenCalledWith(shipped); }); }); describe('landed() setter', () => { it('should set landed property and call onChangeLanded() method ', () => { let landed = new Date(); spyOn(controller, 'onChangeLanded'); controller.ticket = {id: 1}; controller.landed = landed; expect(controller.onChangeLanded).toHaveBeenCalledWith(landed); }); }); describe('agencyModeId() setter', () => { it('should set agencyModeId property and call onChangeAgencyMode() method', () => { const agencyModeId = 8; spyOn(controller, 'onChangeAgencyMode'); controller.ticket = {id: 1}; controller.agencyModeId = 8; expect(controller.onChangeAgencyMode).toHaveBeenCalledWith(agencyModeId); }); it('should do nothing if attempting to set the same agencyMode id', () => { spyOn(controller, 'onChangeAgencyMode'); const agencyModeId = 8; controller.ticket = {agencyModeFk: agencyModeId}; controller.agencyModeId = agencyModeId; expect(controller.onChangeAgencyMode).not.toHaveBeenCalledWith(); }); }); describe('zoneId() setter', () => { it('should set zoneId property and call onChangeZone() method ', () => { const zoneId = 5; spyOn(controller, 'onChangeZone'); controller.ticket = {id: 1}; controller.zoneId = 5; expect(controller.onChangeZone).toHaveBeenCalledWith(zoneId); }); it('should do nothing if attempting to set the same zone id', () => { const zoneId = 5; spyOn(controller, 'onChangeZone'); controller.ticket = {id: 1, zoneFk: zoneId}; controller.zoneId = zoneId; expect(controller.onChangeZone).not.toHaveBeenCalledWith(zoneId); }); }); describe('onChangeClient()', () => { it('should return a list of addresses from choosed client', async() => { const clientId = 102; let filter = { include: [ { relation: 'province', scope: { fields: ['name'] } }, { relation: 'agencyMode', scope: { fields: ['name'] } } ] }; filter = encodeURIComponent(JSON.stringify(filter)); $httpBackend.when('GET', `/api/Clients/${clientId}/addresses?filter=${filter}`).respond(200); $httpBackend.expect('GET', `/api/Clients/${clientId}/addresses?filter=${filter}`); controller.onChangeClient(clientId); $httpBackend.flush(); }); }); describe('onChangeShipped()', () => { it('should return an available landing date', async() => { let shipped = new Date(); controller._ticket = { id: 1, shipped: shipped, addressFk: 121, agencyModeFk: 2, warehouseFk: 1 }; let params = { shipped: shipped, addressFk: 121, agencyModeFk: 2, warehouseFk: 1 }; let serializedParams = $httpParamSerializer(params); $httpBackend.when('GET', `/api/Agencies/getLanded?${serializedParams}`).respond(200); $httpBackend.expect('GET', `/api/Agencies/getLanded?${serializedParams}`); controller.onChangeShipped(shipped); $httpBackend.flush(); }); }); describe('onChangeLanded()', () => { it('should return an available shipment date', async() => { let landed = new Date(); controller._ticket = { id: 1, landed: landed, addressFk: 121, agencyModeFk: 2, warehouseFk: 1 }; let params = { landed: landed, addressFk: 121, agencyModeFk: 2, warehouseFk: 1 }; let serializedParams = $httpParamSerializer(params); $httpBackend.when('GET', `/api/Agencies/getShipped?${serializedParams}`).respond(200); $httpBackend.expect('GET', `/api/Agencies/getShipped?${serializedParams}`); controller.onChangeLanded(landed); $httpBackend.flush(); }); }); describe('onChangeZone()', () => { it('should return an available zone', async() => { const zoneId = 5; const landed = new Date(); controller._ticket = { id: 1, landed: landed, addressFk: 121, warehouseFk: 1 }; $httpBackend.when('GET', `/api/Zones/${zoneId}`).respond(200); $httpBackend.expect('GET', `/api/Zones/${zoneId}`); controller.onChangeZone(zoneId); $httpBackend.flush(); }); }); describe('onChangeAgencyMode()', () => { it('should return an available agency', async() => { const landed = new Date(); const agencyModeId = 7; controller._ticket = { id: 1, landed: landed, addressFk: 121, agencyModeFk: agencyModeId, warehouseFk: 1 }; let params = { landed: landed, addressFk: 121, agencyModeFk: agencyModeId, warehouseFk: 1 }; let serializedParams = $httpParamSerializer(params); $httpBackend.when('GET', `/api/Agencies/getShipped?${serializedParams}`).respond(200); $httpBackend.expect('GET', `/api/Agencies/getShipped?${serializedParams}`); controller.onChangeAgencyMode(agencyModeId); $httpBackend.flush(); }); it('should throw a user error', async() => { spyOn(controller.vnApp, 'showMessage'); const landed = new Date(); const agencyModeId = 7; controller._ticket = { id: 1, landed: landed, addressFk: 121, agencyModeFk: agencyModeId, warehouseFk: 1 }; let params = { landed: landed, addressFk: 121, agencyModeFk: agencyModeId, warehouseFk: 1 }; let serializedParams = $httpParamSerializer(params); $httpBackend.when('GET', `/api/Agencies/getShipped?${serializedParams}`).respond(null); $httpBackend.expect('GET', `/api/Agencies/getShipped?${serializedParams}`); controller.onChangeAgencyMode(agencyModeId); $httpBackend.flush(); expect(controller.vnApp.showMessage).toHaveBeenCalledWith('No delivery zone available for this parameters'); }); }); describe('isFormInvalid()', () => { it('should check if all form fields are valid', () => { controller.ticket = { clientFk: 1, addressFk: 121, zoneFk: 3, agencyModeFk: 1, companyFk: 442, warehouseFk: 1, shipped: new Date(), landed: new Date() }; expect(controller.isFormInvalid()).toBeFalsy(); }); }); describe('onStepChange()', () => { it('should call onStepChange method and return a NO_AGENCY_AVAILABLE signal error', async() => { let landed = new Date(); landed.setHours(0, 0, 0, 0); controller._ticket = { id: 1, clientFk: 1, addressFk: 121, zoneFk: 3, agencyModeFk: 1, companyFk: 442, warehouseFk: 1, shipped: new Date(), landed: landed }; let response = {error: new Error('NO_AGENCY_AVAILABLE')}; $httpBackend.whenPOST(`/api/tickets/1/priceDifference`).respond(400, response); $httpBackend.expectPOST(`/api/tickets/1/priceDifference`); controller.onStepChange(); $httpBackend.flush(); }); }); }); });