import './index.js'; import crudModel from 'core/mocks/crud-model'; describe('claim', () => { describe('Component vnClaimDetail', () => { let $scope; let controller; let $httpBackend; let $state; let aclService; beforeEach(ngModule('claim')); beforeEach(angular.mock.inject(($componentController, _$state_, _$httpBackend_, $rootScope) => { $scope = $rootScope.$new(); $scope.descriptor = { show: () => {} }; $httpBackend = _$httpBackend_; $httpBackend.whenGET('Claims/ClaimBeginnings').respond({}); $httpBackend.whenGET(`Tickets/1/isEditable`).respond(true); $state = _$state_; aclService = {hasAny: () => true}; controller = $componentController('vnClaimDetail', {$state, aclService, $scope}); controller.claim = {ticketFk: 1}; controller.salesToClaim = [{saleFk: 1}, {saleFk: 2}]; controller.salesClaimed = [{id: 1, sale: {}}]; controller.$.model = crudModel; controller.$.addSales = { hide: () => {}, show: () => {} }; controller.$.editPopover = { hide: () => {} }; })); describe('openAddSalesDialog()', () => { it('should call getClaimableFromTicket and $.addSales.show', () => { jest.spyOn(controller, 'getClaimableFromTicket'); jest.spyOn(controller.$.addSales, 'show'); controller.openAddSalesDialog(); expect(controller.getClaimableFromTicket).toHaveBeenCalledWith(); expect(controller.$.addSales.show).toHaveBeenCalledWith(); }); }); describe('getClaimableFromTicket()', () => { it('should make a query and set salesToClaim', () => { $httpBackend.expectGET(`Sales/getClaimableFromTicket?ticketFk=1`).respond(200, 1); controller.getClaimableFromTicket(); $httpBackend.flush(); expect(controller.salesToClaim).toEqual(1); }); }); describe('addClaimedSale(index)', () => { it('should make a post and call refresh, hide and showSuccess', () => { jest.spyOn(controller.$.addSales, 'hide'); jest.spyOn(controller.$state, 'go'); $httpBackend.expectPOST(`ClaimBeginnings/`).respond({}); controller.addClaimedSale(1); $httpBackend.flush(); expect(controller.$.addSales.hide).toHaveBeenCalledWith(); expect(controller.$state.go).toHaveBeenCalledWith('claim.card.development'); }); }); describe('deleteClaimedSale(index)', () => { it('should make a delete and call refresh and showSuccess', () => { jest.spyOn(controller.$.model, 'remove'); $httpBackend.expectDELETE(`ClaimBeginnings/1`).respond({}); controller.deleteClaimedSale(0); $httpBackend.flush(); expect(controller.$.model.remove).toHaveBeenCalledWith(0); }); }); describe('setClaimedQuantity(id, claimedQuantity)', () => { it('should make a patch and call refresh and showSuccess', () => { jest.spyOn(controller.vnApp, 'showSuccess'); $httpBackend.expectPATCH(`ClaimBeginnings/`).respond({}); controller.setClaimedQuantity(1, 1); $httpBackend.flush(); expect(controller.vnApp.showSuccess).toHaveBeenCalledWith('Data saved!'); }); }); describe('calculateTotals()', () => { it('should set paidTotal and claimedTotal to 0 if salesClaimed has no data', () => { controller.salesClaimed = []; controller.calculateTotals(); expect(controller.paidTotal).toEqual(0); expect(controller.claimedTotal).toEqual(0); }); }); describe('updateDiscount()', () => { it('should perform a query if the new discount differs from the claim discount', () => { controller.saleClaimed = {sale: { discount: 5, id: 7, ticketFk: 1, price: 2, quantity: 10}}; controller.newDiscount = 10; jest.spyOn(controller.vnApp, 'showSuccess'); jest.spyOn(controller, 'calculateTotals'); jest.spyOn(controller, 'clearDiscount'); jest.spyOn(controller.$.editPopover, 'hide'); $httpBackend.when('POST', 'Tickets/1/updateDiscount').respond({}); controller.updateDiscount(); $httpBackend.flush(); expect(controller.calculateTotals).toHaveBeenCalledWith(); expect(controller.clearDiscount).toHaveBeenCalledWith(); expect(controller.vnApp.showSuccess).toHaveBeenCalledWith('Data saved!'); expect(controller.$.editPopover.hide).toHaveBeenCalledWith(); }); }); describe('showItemDescriptor()', () => { it('should configure the descriptor then show it', () => { const itemId = 500; const event = { stopImmediatePropagation: () => {}, target: 'the target element' }; jest.spyOn(event, 'stopImmediatePropagation'); jest.spyOn(controller.$.descriptor, 'show'); controller.showItemDescriptor(event, itemId); expect(event.stopImmediatePropagation).toHaveBeenCalledWith(); expect(controller.$.descriptor.itemFk).toEqual(itemId); expect(controller.$.descriptor.parent).toEqual(event.target); expect(controller.$.descriptor.show).toHaveBeenCalledWith(); }); }); describe('isClaimEditable()', () => { it('should check if the claim is editable', () => { controller.isClaimEditable(); $httpBackend.flush(); expect(controller.isEditable).toBeTruthy(); }); }); }); });