diff --git a/gulpfile.js b/gulpfile.js index b946b48de..096c44584 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -83,8 +83,6 @@ async function backTestOnce(done) { port: container.dbConf.port }); - log('[Debug] dataSources', dataSources.vn); - let bootOptions = {dataSources}; let app = require(`./loopback/server/server`); @@ -92,8 +90,6 @@ async function backTestOnce(done) { try { app.boot(bootOptions); - log('[Debug] back started'); - await new Promise((resolve, reject) => { const jasmine = require('gulp-jasmine'); diff --git a/modules/ticket/front/sale/index.html b/modules/ticket/front/sale/index.html index c50e39ea5..a907cfbf7 100644 --- a/modules/ticket/front/sale/index.html +++ b/modules/ticket/front/sale/index.html @@ -141,7 +141,7 @@ + on-change="$ctrl.updateConcept(sale)"> diff --git a/modules/ticket/front/sale/index.js b/modules/ticket/front/sale/index.js index 30414f144..21456a74e 100644 --- a/modules/ticket/front/sale/index.js +++ b/modules/ticket/front/sale/index.js @@ -426,7 +426,7 @@ class Controller extends Section { /* * Changes a sale concept */ - changeConcept(sale) { + updateConcept(sale) { const data = {newConcept: sale.concept}; this.$http.post(`Sales/${sale.id}/updateConcept`, data).then(() => { this.vnApp.showSuccess(this.$t('Data saved!')); @@ -463,12 +463,12 @@ class Controller extends Section { } isTicketEditable() { - this.$http.get(`Tickets/${this.$state.params.id}/isEditable`) + this.$http.get(`Tickets/${this.$params.id}/isEditable`) .then(res => this.isEditable = res.data); } isTicketLocked() { - this.$http.get(`Tickets/${this.$state.params.id}/isLocked`) + this.$http.get(`Tickets/${this.$params.id}/isLocked`) .then(res => this.isLocked = res.data); } diff --git a/modules/ticket/front/sale/specs/index.spec.js b/modules/ticket/front/sale/index.spec.js similarity index 67% rename from modules/ticket/front/sale/specs/index.spec.js rename to modules/ticket/front/sale/index.spec.js index 7848a36b9..8fbda6e70 100644 --- a/modules/ticket/front/sale/specs/index.spec.js +++ b/modules/ticket/front/sale/index.spec.js @@ -1,4 +1,4 @@ -import '../index.js'; +import './index.js'; import watcher from 'core/mocks/watcher'; import crudModel from 'core/mocks/crud-model'; @@ -476,5 +476,247 @@ describe('Ticket', () => { expect(controller.resetChanges).toHaveBeenCalledWith(); }); }); + + describe('getNewPrice()', () => { + it('should return the total price simulation from a price change', () => { + const selectedSale = controller.sales[0]; + selectedSale.checked = true; + controller.edit = { + price: 2, + sale: selectedSale + }; + + const expectedAmount = 10; + const result = controller.getNewPrice(); + + expect(result).toEqual(expectedAmount); + }); + + it('should return the total price simulation from a discount change', () => { + const selectedSale = controller.sales[0]; + selectedSale.checked = true; + controller.edit = { + discount: 10, + sale: selectedSale + }; + + const expectedAmount = 105.75; + const result = controller.getNewPrice(); + + expect(result).toEqual(expectedAmount); + }); + }); + + describe('hasReserves()', () => { + it('should return true for any sale marked as reserved', () => { + const selectedSale = controller.sales[0]; + selectedSale.reserved = true; + + const result = controller.hasReserves(); + + expect(result).toBeTruthy(); + }); + }); + + describe('unmarkAsReserved()', () => { + it('should call setReserved with false', () => { + jest.spyOn(controller, 'setReserved'); + + controller.unmarkAsReserved(false); + + expect(controller.setReserved).toHaveBeenCalledWith(false); + }); + }); + + describe('markAsReserved()', () => { + it('should call setReserved with true', () => { + jest.spyOn(controller, 'setReserved'); + + controller.markAsReserved(true); + + expect(controller.setReserved).toHaveBeenCalledWith(true); + }); + }); + + describe('setReserved()', () => { + it('should call getCheckedLines, $.index.accept and make a query ', () => { + const selectedSale = controller.sales[0]; + selectedSale.checked = true; + const expectedParams = { + sales: [selectedSale], + ticketFk: 1, + reserved: false + }; + + $httpBackend.expectPOST(`Sales/reserve`, expectedParams).respond(); + controller.unmarkAsReserved(false); + $httpBackend.flush(); + }); + }); + + describe('newOrderFromTicket()', () => { + it('should make an HTTP post query and then open the new order on a new tab', () => { + const expectedParams = {ticketFk: 1}; + const expectedResponse = {id: 123}; + + window.open = jasmine.createSpy('open'); + controller.$state.href = jasmine.createSpy('href') + .and.returnValue('/somePath'); + + $httpBackend.expect('POST', `Orders/newFromTicket`, expectedParams).respond(expectedResponse); + controller.newOrderFromTicket(); + $httpBackend.flush(); + + expect(window.open).toHaveBeenCalledWith('/somePath', '_blank'); + }); + }); + + describe('showSMSDialog()', () => { + it('should open an SMS dialog with specified data', () => { + jest.spyOn(controller.$.sms, 'open'); + + const selectedSale = controller.sales[0]; + selectedSale.checked = true; + controller.showSMSDialog(); + + expect(controller.$.sms.open).toHaveBeenCalledWith(); + expect(controller.newSMS.destination).toEqual(111111111); + expect(controller.newSMS.message).not.toEqual(''); + }); + }); + + describe('changeQuantity()', () => { + it('should not call addSale() or updateQuantity() methods', () => { + jest.spyOn(controller, 'addSale'); + jest.spyOn(controller, 'updateQuantity'); + + const sale = {itemFk: 4}; + controller.changeQuantity(sale); + + expect(controller.addSale).not.toHaveBeenCalled(); + expect(controller.updateQuantity).not.toHaveBeenCalled(); + }); + + it('should call addSale() method', () => { + jest.spyOn(controller, 'addSale'); + + const sale = {itemFk: 4, quantity: 5}; + controller.changeQuantity(sale); + + expect(controller.addSale).toHaveBeenCalledWith(sale); + }); + + it('should call updateQuantity() method', () => { + jest.spyOn(controller, 'addSale'); + jest.spyOn(controller, 'updateQuantity'); + + const sale = {id: 1, itemFk: 4, quantity: 5}; + controller.changeQuantity(sale); + + expect(controller.addSale).not.toHaveBeenCalled(); + expect(controller.updateQuantity).toHaveBeenCalledWith(sale); + }); + }); + + describe('updateQuantity()', () => { + it('should make a POST query saving sale quantity', () => { + jest.spyOn(controller, 'resetChanges').mockReturnThis(); + + const selectedSale = controller.sales[0]; + selectedSale.checked = true; + selectedSale.quantity = 10; + + const expectedParams = {quantity: 10}; + $httpBackend.expect('POST', `Sales/1/updateQuantity`, expectedParams).respond(); + controller.updateQuantity(selectedSale); + $httpBackend.flush(); + + expect(controller.resetChanges).toHaveBeenCalledWith(); + }); + }); + + describe('updateConcept()', () => { + it('should make a POST query saving sale concept', () => { + jest.spyOn(controller, 'resetChanges').mockReturnThis(); + + const selectedSale = controller.sales[0]; + selectedSale.checked = true; + selectedSale.concept = 'My new weapon'; + + const expectedParams = {newConcept: 'My new weapon'}; + $httpBackend.expect('POST', `Sales/1/updateConcept`, expectedParams).respond(); + controller.updateConcept(selectedSale); + $httpBackend.flush(); + + expect(controller.resetChanges).toHaveBeenCalledWith(); + }); + }); + + describe('addSale()', () => { + it('should make a POST query adding a new sale', () => { + jest.spyOn(controller.vnApp, 'showSuccess').mockReturnThis(); + jest.spyOn(controller, 'resetChanges').mockReturnThis(); + + const newSale = {itemFk: 4, quantity: 10}; + const expectedParams = {itemId: 4, quantity: 10}; + const expectedResult = { + id: 30, + quantity: 10, + discount: 0, + price: 0, + itemFk: 4, + item: { + subName: 'Item subName', + image: '30.png' + } + }; + + $httpBackend.expect('POST', `tickets/1/addSale`, expectedParams).respond(expectedResult); + controller.addSale(newSale); + $httpBackend.flush(); + + expect(controller.vnApp.showSuccess).toHaveBeenCalledWith('Data saved!'); + expect(controller.resetChanges).toHaveBeenCalledWith(); + }); + }); + + describe('isTicketEditable()', () => { + it('should make a HTTP GET query and set the isEditable property on the controller', () => { + $httpBackend.expect('GET', `Tickets/1/isEditable`).respond(200, true); + controller.isTicketEditable(); + $httpBackend.flush(); + + expect(controller.isEditable).toBeDefined(); + expect(controller.isEditable).toBeTruthy(); + }); + }); + + describe('isTicketLocked()', () => { + it('should make a HTTP GET query and set the isLocked property on the controller', () => { + $httpBackend.expect('GET', `Tickets/1/isLocked`).respond(200, false); + controller.isTicketLocked(); + $httpBackend.flush(); + + expect(controller.isLocked).toBeDefined(); + expect(controller.isLocked).toBeFalsy(); + }); + }); + + describe('calculateSalePrice()', () => { + it('should make an HTTP post query ', () => { + jest.spyOn(controller.vnApp, 'showSuccess').mockReturnThis(); + jest.spyOn(controller.$.model, 'refresh').mockReturnThis(); + + const selectedSale = controller.sales[0]; + selectedSale.checked = true; + + $httpBackend.expect('POST', `Sales/1/recalculatePrice`).respond(200); + controller.calculateSalePrice(); + $httpBackend.flush(); + + expect(controller.vnApp.showSuccess).toHaveBeenCalledWith('Data saved!'); + expect(controller.$.model.refresh).toHaveBeenCalledWith(); + }); + }); }); }); diff --git a/modules/ticket/front/sale/specs/editDiscount.spec.js b/modules/ticket/front/sale/specs/editDiscount.spec.js deleted file mode 100644 index 8eccfe74f..000000000 --- a/modules/ticket/front/sale/specs/editDiscount.spec.js +++ /dev/null @@ -1,87 +0,0 @@ -import '../editDiscount.js'; - -describe('Ticket', () => { - describe('Component vnTicketSaleEditDiscount', () => { - let controller; - let $httpBackend; - let $state; - let $scope; - - beforeEach(ngModule('ticket')); - - beforeEach(angular.mock.inject(($componentController, _$state_, _$httpBackend_, $rootScope) => { - $httpBackend = _$httpBackend_; - $scope = $rootScope.$new(); - $scope.index = {model: {instances: [{id: 1}, {id: 2}]}, accept: () => { - return { - then: () => {} - }; - }}; - $state = _$state_; - $state.params.id = 11; - const $element = angular.element(''); - controller = $componentController('vnTicketSaleEditDiscount', {$element, $scope}); - controller._edit = [{id: 3}]; - controller.onHide = () => {}; - })); - - describe('edit() setter', () => { - it('should set _edit value and call setNewDiscount', () => { - jest.spyOn(controller, 'setNewDiscount'); - controller.edit = {id: 1}; - - expect(controller.edit).toEqual({id: 1}); - expect(controller.setNewDiscount).toHaveBeenCalledWith(); - }); - }); - - describe('bulk() setter', () => { - it('should set _bulk value and call setNewDiscount', () => { - jest.spyOn(controller, 'setNewDiscount'); - controller.bulk = true; - - expect(controller.bulk).toEqual(true); - expect(controller.setNewDiscount).toHaveBeenCalledWith(); - }); - }); - - describe('setNewDiscount()', () => { - it('should set NewDiscount to edit[0].discount value if it doesnt exists', () => { - controller.edit = [{discount: 1}]; - controller.setNewDiscount(); - - expect(controller.newDiscount).toEqual(1); - }); - }); - - describe('updateDiscount()', () => { - it('should make a query if the discount value has been modified or the bulk value is true', () => { - controller.bulk = true; - controller.newDiscount = 15; - - $httpBackend.expectPOST(`Tickets/11/updateDiscount`).respond(); - controller.updateDiscount(); - - $httpBackend.flush(); - }); - - it(`should throw if there's no changes on discount and it isn't bulk`, () => { - controller.bulk = false; - controller.newDiscount = 15; - controller.edit = [{discount: 15}]; - jest.spyOn(controller.vnApp, 'showError'); - controller.updateDiscount(); - - expect(controller.vnApp.showError).toHaveBeenCalledWith('There are no changes to save'); - }); - }); - - describe('clearDiscount()', () => { - it('should set newDiscount to null', () => { - controller.clearDiscount(); - - expect(controller.newDiscount).toEqual(null); - }); - }); - }); -});