diff --git a/modules/ticket/front/index.js b/modules/ticket/front/index.js
index c3f15b214f..195f172e0d 100644
--- a/modules/ticket/front/index.js
+++ b/modules/ticket/front/index.js
@@ -18,7 +18,6 @@ import './expedition';
import './volume';
import './package/index';
import './sale';
-import './sale/editDiscount';
import './tracking/index';
import './tracking/edit';
import './sale-checked';
diff --git a/modules/ticket/front/sale/editDiscount.html b/modules/ticket/front/sale/editDiscount.html
deleted file mode 100644
index c23645784b..0000000000
--- a/modules/ticket/front/sale/editDiscount.html
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
New price
-
{{$ctrl.newPrice | currency: 'EUR':2}}
-
-
\ No newline at end of file
diff --git a/modules/ticket/front/sale/editDiscount.js b/modules/ticket/front/sale/editDiscount.js
deleted file mode 100644
index 08385a24e1..0000000000
--- a/modules/ticket/front/sale/editDiscount.js
+++ /dev/null
@@ -1,88 +0,0 @@
-import ngModule from '../module';
-import Component from 'core/lib/component';
-
-class Controller extends Component {
- set edit(value) {
- this._edit = value;
- this.clearDiscount();
- this.setNewDiscount();
- }
-
- get edit() {
- return this._edit;
- }
-
- set bulk(value) {
- this._bulk = value;
- this.setNewDiscount();
- }
-
- get bulk() {
- return this._bulk;
- }
-
- get newDiscount() {
- return this._newDiscount;
- }
-
- set newDiscount(value) {
- this._newDiscount = value;
- this.updateNewPrice();
- }
-
- updateNewPrice() {
- if (this.newDiscount && this.edit[0])
- this.newPrice = (this.edit[0].quantity * this.edit[0].price) - ((this.newDiscount * (this.edit[0].quantity * this.edit[0].price)) / 100);
- }
-
- setNewDiscount() {
- if (!this.newDiscount && this.edit[0])
- this.newDiscount = this.edit[0].discount;
- }
-
- updateDiscount() {
- let salesIds = [];
- let modified = false;
-
- if (this.newDiscount == null) return;
-
- for (let i = 0; i < this.edit.length; i++) {
- if (this.newDiscount != this.edit[0].discount || this.bulk || !this.newDiscount) {
- salesIds.push(this.edit[i].id);
- modified = true;
- }
- }
-
- if (modified) {
- const params = {salesIds: salesIds, newDiscount: this.newDiscount};
- const query = `Tickets/${this.$params.id}/updateDiscount`;
- this.$http.post(query, params).then(() => {
- this.vnApp.showSuccess(this.$translate.instant('Data saved!'));
- console.log(this.edit[0].sale);
- this.edit[0].sale.price = 277;
- this.clearDiscount();
- modified = false;
- }).catch(e => {
- this.vnApp.showError(e.message);
- });
-
- this.onHide();
- } else
- this.vnApp.showError(this.$translate.instant('There are no changes to save'));
- }
-
- clearDiscount() {
- this.newDiscount = null;
- }
-}
-
-ngModule.component('vnTicketSaleEditDiscount', {
- template: require('./editDiscount.html'),
- controller: Controller,
- bindings: {
- edit: '',
- mana: '',
- bulk: '',
- onHide: '&'
- }
-});
diff --git a/modules/ticket/front/sale/index.js b/modules/ticket/front/sale/index.js
index f5c8e20aa7..30414f1441 100644
--- a/modules/ticket/front/sale/index.js
+++ b/modules/ticket/front/sale/index.js
@@ -130,23 +130,6 @@ class Controller extends Section {
});
}
- /**
- * Returns an array of index
- * from checked instances
- *
- * @return {Array} Index list of checked instances
- */
- selectedSalesIndex() {
- if (!this.sales) return;
-
- const indexList = [];
- this.sales.forEach((sale, index) => {
- if (sale.checked) indexList.push(index);
- });
-
- return indexList;
- }
-
resetChanges() {
if (this.newInstances().length === 0)
this.$.watcher.updateOriginalData();
@@ -197,8 +180,7 @@ class Controller extends Section {
showTransferPopover(event) {
this.setTransferParams();
- this.$.transfer.parent = event.target;
- this.$.transfer.show();
+ this.$.transfer.show(event);
}
setTransferParams() {
diff --git a/modules/ticket/front/sale/specs/index.spec.js b/modules/ticket/front/sale/specs/index.spec.js
index 1c8fbda534..7848a36b9d 100644
--- a/modules/ticket/front/sale/specs/index.spec.js
+++ b/modules/ticket/front/sale/specs/index.spec.js
@@ -9,33 +9,33 @@ describe('Ticket', () => {
let $state;
let $httpBackend;
- const ticket = {
- id: 1,
- clientFk: 101,
- shipped: 1,
- created: new Date(),
- client: {salesPersonFk: 1},
- address: {mobile: 111111111}
- };
- const sales = [
- {
- id: 1,
- concept: 'Item 1',
- quantity: 5,
- price: 23.5,
- discount: 0,
- }, {
- id: 4,
- concept: 'Item 2',
- quantity: 20,
- price: 5.5,
- discount: 0,
- }
- ];
-
beforeEach(ngModule('ticket'));
beforeEach(angular.mock.inject(($componentController, $rootScope, _$state_, _$httpBackend_) => {
+ const ticket = {
+ id: 1,
+ clientFk: 101,
+ shipped: 1,
+ created: new Date(),
+ client: {salesPersonFk: 1},
+ address: {mobile: 111111111}
+ };
+ const sales = [
+ {
+ id: 1,
+ concept: 'Item 1',
+ quantity: 5,
+ price: 23.5,
+ discount: 0,
+ }, {
+ id: 4,
+ concept: 'Item 2',
+ quantity: 20,
+ price: 5.5,
+ discount: 0,
+ }
+ ];
+
$state = _$state_;
$scope = $rootScope.$new();
$scope.watcher = watcher;
@@ -56,300 +56,271 @@ describe('Ticket', () => {
const $element = angular.element('');
controller = $componentController('vnTicketSale', {$element, $scope});
controller.card = {reload: () => {}};
- controller.ticket = ticket;
- controller.sales = sales;
+ controller._ticket = ticket;
+ controller._sales = sales;
}));
+ describe('ticket() setter', () => {
+ it('should set the ticket data an then call the isTicketEditable() and isTicketLocked() methods', () => {
+ jest.spyOn(controller, 'isTicketEditable').mockReturnThis();
+ jest.spyOn(controller, 'isTicketLocked').mockReturnThis();
+
+ controller.ticket = {id: 1};
+
+ expect(controller.isTicketEditable).toHaveBeenCalledWith();
+ expect(controller.isTicketLocked).toHaveBeenCalledWith();
+ });
+ });
+
+ describe('sales() setter', () => {
+ it('should set the sales data an then call the refreshTotal() method', () => {
+ jest.spyOn(controller, 'refreshTotal').mockReturnThis();
+
+ controller.sales = [{id: 1}];
+
+ expect(controller.refreshTotal).toHaveBeenCalledWith();
+ });
+ });
+
+ describe('getSubTotal()', () => {
+ it('should make an HTTP GET query and then set the subtotal property', () => {
+ const expectedAmount = 128;
+
+ $httpBackend.expect('GET', 'Tickets/1/subtotal').respond(200, expectedAmount);
+ controller.getSubTotal();
+ $httpBackend.flush();
+
+ expect(controller.subtotal).toEqual(expectedAmount);
+ });
+ });
+
+ describe('getSaleTotal()', () => {
+ it('should return the sale total amount', () => {
+ const sale = {
+ quantity: 10,
+ price: 2,
+ discount: 10
+ };
+
+ const expectedAmount = 18;
+ const result = controller.getSaleTotal(sale);
+
+ expect(result).toEqual(expectedAmount);
+ });
+ });
+
+ describe('getMana()', () => {
+ it('should make an HTTP GET query and return the worker mana', () => {
+ controller.edit = {};
+ const expectedAmount = 250;
+
+ $httpBackend.expect('GET', 'Tickets/1/getSalesPersonMana').respond(200, expectedAmount);
+ controller.getMana();
+ $httpBackend.flush();
+
+ expect(controller.edit.mana).toEqual(expectedAmount);
+ });
+ });
+
+ describe('getVat()', () => {
+ it('should make an HTTP GET query and return the ticket VAT', () => {
+ controller.edit = {};
+ const expectedAmount = 67;
+
+ $httpBackend.expect('GET', 'Tickets/1/getVAT').respond(200, expectedAmount);
+ controller.getVat();
+ $httpBackend.flush();
+
+ expect(controller.VAT).toEqual(expectedAmount);
+ });
+ });
+
+ describe('selectedSales()', () => {
+ it('should return a list of selected sales', () => {
+ controller.sales[1].checked = true;
+
+ const expectedSaleId = 4;
+ const result = controller.selectedSales();
+ const firstSelectedSale = result[0];
+
+ expect(result.length).toEqual(1);
+ expect(firstSelectedSale.id).toEqual(expectedSaleId);
+ });
+ });
+
+ describe('selectedValidSales()', () => {
+ it('should return a list of selected sales having a sale id', () => {
+ const newEmptySale = {quantity: 10, checked: true};
+ controller.sales.push(newEmptySale);
+ controller.sales[0].checked = true;
+
+ const expectedSaleId = 1;
+ const result = controller.selectedValidSales();
+ const firstSelectedSale = result[0];
+
+ expect(result.length).toEqual(1);
+ expect(firstSelectedSale.id).toEqual(expectedSaleId);
+ });
+ });
+
+ describe('selectedSalesCount()', () => {
+ it('should return the number of selected sales', () => {
+ controller.sales[0].checked = true;
+
+ const result = controller.selectedSalesCount();
+
+ expect(result).toEqual(1);
+ });
+ });
+
+ describe('hasSelectedSales()', () => {
+ it('should return truthy if atleast one sale is selected', () => {
+ controller.sales[0].checked = true;
+
+ const result = controller.hasSelectedSales();
+
+ expect(result).toBeTruthy();
+ });
+ });
+
+ describe('hasOneSaleSelected()', () => {
+ it('should return truthy if just one sale is selected', () => {
+ controller.sales[0].checked = true;
+
+ const result = controller.hasOneSaleSelected();
+
+ expect(result).toBeTruthy();
+ });
+
+ it('should return falsy if more than one sale is selected', () => {
+ controller.sales[0].checked = true;
+ controller.sales[1].checked = true;
+
+ const result = controller.hasOneSaleSelected();
+
+ expect(result).toBeFalsy();
+ });
+ });
+
+ describe('newInstances()', () => {
+ it(`should return a list of sales that doesn't have an id`, () => {
+ const newEmptySale = {quantity: 10, checked: true};
+ controller.sales.push(newEmptySale);
+
+ const result = controller.newInstances();
+ const firstNewSale = result[0];
+
+ expect(result.length).toEqual(1);
+ expect(firstNewSale.id).toBeUndefined();
+ expect(firstNewSale.quantity).toEqual(10);
+ });
+ });
+
+ describe('resetChanges()', () => {
+ it(`should not call the watcher updateOriginalData() method`, () => {
+ jest.spyOn(controller.$.watcher, 'updateOriginalData').mockReturnThis();
+
+ const newEmptySale = {quantity: 10};
+ controller.sales.push(newEmptySale);
+ controller.resetChanges();
+
+ expect(controller.$.watcher.updateOriginalData).not.toHaveBeenCalledWith();
+ });
+
+ it(`should call the watcher updateOriginalData() method`, () => {
+ jest.spyOn(controller.$.watcher, 'updateOriginalData').mockReturnThis();
+
+ controller.resetChanges();
+
+ expect(controller.$.watcher.updateOriginalData).toHaveBeenCalledWith();
+ });
+ });
+
+ describe('changeState()', () => {
+ it('should make an HTTP post query, then call the showSuccess(), reload() and resetChanges() methods', () => {
+ jest.spyOn(controller.card, 'reload').mockReturnThis();
+ jest.spyOn(controller.vnApp, 'showSuccess').mockReturnThis();
+ jest.spyOn(controller, 'resetChanges').mockReturnThis();
+
+ const expectedParams = {ticketFk: 1, code: 'OK'};
+ $httpBackend.expect('POST', `TicketTrackings/changeState`, expectedParams).respond(200);
+ controller.changeState('OK');
+ $httpBackend.flush();
+
+ expect(controller.card.reload).toHaveBeenCalledWith();
+ expect(controller.vnApp.showSuccess).toHaveBeenCalledWith('Data saved!');
+ expect(controller.resetChanges).toHaveBeenCalledWith();
+ });
+ });
+
+ describe('removeSales()', () => {
+ it('should make an HTTP post query, then call the showSuccess(), removeSelectedSales() and resetChanges() methods', () => {
+ jest.spyOn(controller.vnApp, 'showSuccess').mockReturnThis();
+ jest.spyOn(controller, 'removeSelectedSales').mockReturnThis();
+ jest.spyOn(controller, 'resetChanges').mockReturnThis();
+
+ const firstSale = controller.sales[0];
+ firstSale.checked = true;
+ const expectedParams = {sales: [firstSale], actualTicketFk: 1};
+ $httpBackend.expect('POST', `Sales/removes`, expectedParams).respond(200);
+ controller.removeSales();
+ $httpBackend.flush();
+
+ expect(controller.removeSelectedSales).toHaveBeenCalledWith();
+ expect(controller.vnApp.showSuccess).toHaveBeenCalledWith('Data saved!');
+ expect(controller.resetChanges).toHaveBeenCalledWith();
+ });
+ });
+
+ describe('removeSelectedSales()', () => {
+ it('should remove the selected sales from the controller sale property', () => {
+ jest.spyOn(controller, 'refreshTotal').mockReturnThis();
+ jest.spyOn(controller, 'resetChanges').mockReturnThis();
+
+ const firstSale = controller.sales[0];
+ firstSale.checked = true;
+
+ controller.removeSelectedSales();
+
+ const lastSale = controller.sales[0];
+
+ expect(controller.sales.length).toEqual(1);
+ expect(lastSale.id).toEqual(4);
+ expect(controller.refreshTotal).toHaveBeenCalledWith();
+ });
+ });
+
describe('createClaim()', () => {
it('should perform a query and call windows open', () => {
- jest.spyOn(controller.$state, 'go');
+ jest.spyOn(controller, 'resetChanges').mockReturnThis();
+ jest.spyOn(controller.$state, 'go').mockReturnThis();
- const claim = {id: 1};
- const sales = [{id: 1}, {id: 2}];
+ const newEmptySale = {quantity: 10};
+ controller.sales.push(newEmptySale);
+ const firstSale = controller.sales[0];
+ firstSale.checked = true;
- $httpBackend.whenGET(`Tickets/1/getVAT`).respond(200, 10.5);
- $httpBackend.whenGET(`Tickets/1/subtotal`).respond(200, 227.5);
- $httpBackend.whenGET(`Tickets/1/isEditable`).respond();
- $httpBackend.whenGET(`Tickets/1/isLocked`).respond();
- $httpBackend.when('POST', `Claims/createFromSales`, {claim: claim, sales: sales}).respond(claim);
- $httpBackend.expect('POST', `Claims/createFromSales`).respond(claim);
+ const expectedParams = {
+ claim: {ticketFk: 1, clientFk: 101, ticketCreated: 1},
+ sales: [firstSale]
+ };
+
+ $httpBackend.expect('POST', `Claims/createFromSales`, expectedParams).respond(200, {id: 1});
controller.createClaim();
$httpBackend.flush();
- expect(controller.subtotal).toEqual(227.5);
- expect(controller.VAT).toEqual(10.5);
- expect(controller.total).toEqual(238);
+ expect(controller.resetChanges).toHaveBeenCalledWith();
expect(controller.$state.go).toHaveBeenCalledWith('claim.card.basicData', {id: 1});
});
});
- describe('isChecked() getter', () => {
- it('should set isChecked value to true when one of the instances has the value checked to true', () => {
- controller.sales[0].checked = true;
-
- expect(controller.isChecked).toBeTruthy();
- });
- });
-
- describe('checkedLines()', () => {
- it('should make an array of the instances with the property checked true()', () => {
- let sale = controller.sales[0];
- sale.checked = true;
- let expectedResult = [sale];
-
- $httpBackend.whenGET(`Tickets/1/subtotal`).respond(200, 227.5);
- $httpBackend.whenGET(`Tickets/1/getVAT`).respond(200, 10.5);
- $httpBackend.whenGET(`Tickets/1/isEditable`).respond();
- $httpBackend.whenGET(`Tickets/1/isLocked`).respond();
- let result = controller.checkedLines();
- $httpBackend.flush();
-
- expect(result).toEqual(expectedResult);
- });
- });
-
- describe('onStateOkClick()', () => {
- it('should perform a get and then call a function', () => {
- let filter = {where: {code: 'OK'}, fields: ['id']};
- filter = encodeURIComponent(JSON.stringify(filter));
- let res = [{id: 3}];
- jest.spyOn(controller, 'onStateChange').mockReturnThis();
-
- $httpBackend.whenGET(`States?filter=${filter}`).respond(res);
- $httpBackend.expectGET(`Tickets/1/subtotal`).respond(200, 227.5);
- $httpBackend.expectGET(`Tickets/1/getVAT`).respond(200, 10.5);
- $httpBackend.whenGET(`Tickets/1/isEditable`).respond();
- $httpBackend.whenGET(`Tickets/1/isLocked`).respond();
- controller.onStateOkClick();
- $httpBackend.flush();
-
- expect(controller.onStateChange).toHaveBeenCalledWith(3);
- });
- });
-
- describe('onStateChange()', () => {
- it('should perform a post and then call a function', () => {
- $httpBackend.expectPOST(`TicketTrackings/changeState`).respond();
- $httpBackend.whenGET(`Tickets/1/subtotal`).respond(200, 227.5);
- $httpBackend.whenGET(`Tickets/1/getVAT`).respond(200, 10.5);
- $httpBackend.whenGET(`Tickets/1/isEditable`).respond();
- $httpBackend.whenGET(`Tickets/1/isLocked`).respond();
- controller.onStateChange(3);
- $httpBackend.flush();
- });
- });
-
- describe('onRemoveLinesClick()', () => {
- it('should call getCheckedLines, call removeInstances, and make a query', () => {
- controller.sales[0].checked = true;
-
- $httpBackend.whenPOST(`Sales/removes`).respond();
- $httpBackend.whenGET(`Tickets/1/subtotal`).respond(200, 227.5);
- $httpBackend.whenGET(`Tickets/1/getVAT`).respond(200, 10.5);
- $httpBackend.whenGET(`Tickets/1/isEditable`).respond();
- $httpBackend.whenGET(`Tickets/1/isLocked`).respond();
- controller.onRemoveLinesClick('accept');
- $httpBackend.flush();
-
- expect(controller.sales.length).toEqual(1);
- });
- });
-
- 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 sale = controller.sales[0];
- sale.checked = true;
- let expectedRequest = {
- sales: [sale],
- ticketFk: ticket.id,
- reserved: false
- };
-
- $httpBackend.expectPOST(`Sales/reserve`, expectedRequest).respond();
- $httpBackend.whenGET(`Tickets/1/subtotal`).respond(200, 227.5);
- $httpBackend.whenGET(`Tickets/1/getVAT`).respond(200, 10.5);
- $httpBackend.whenGET(`Tickets/1/isEditable`).respond();
- $httpBackend.whenGET(`Tickets/1/isLocked`).respond();
- controller.unmarkAsReserved(false);
- $httpBackend.flush();
- });
- });
-
- describe('showSMSDialog()', () => {
- it('should open an SMS dialog with specified data', () => {
- jest.spyOn(controller.$.sms, 'open');
-
- controller.sales[0].checked = true;
- controller.showSMSDialog();
-
- expect(controller.$.sms.open).toHaveBeenCalledWith();
- expect(controller.newSMS.destination).toEqual(111111111);
- expect(controller.newSMS.message).not.toEqual('');
- });
- });
-
- describe('onChangeQuantity()', () => {
- it('should not call addSale() or updateQuantity() methods', () => {
- jest.spyOn(controller, 'addSale');
- jest.spyOn(controller, 'updateQuantity');
-
- const sale = {itemFk: 4};
- controller.onChangeQuantity(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.onChangeQuantity(sale);
-
- expect(controller.addSale).toHaveBeenCalledWith(sale);
- });
-
- it('should call updateQuantity() method', () => {
- jest.spyOn(controller, 'updateQuantity');
- jest.spyOn(controller, 'addSale');
-
- const sale = {id: 1, itemFk: 4, quantity: 5};
- controller.onChangeQuantity(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.$.watcher, 'updateOriginalData');
- const data = {quantity: 10};
- const sale = sales[0];
- sale.quantity = 10;
-
- $httpBackend.when('POST', `Sales/4/updateQuantity`, data).respond();
- $httpBackend.expect('POST', `Sales/4/updateQuantity`, data).respond();
- $httpBackend.whenGET(`Tickets/1/subtotal`).respond(200, 227.5);
- $httpBackend.whenGET(`Tickets/1/getVAT`).respond(200, 10.5);
- $httpBackend.whenGET(`Tickets/1/isEditable`).respond();
- $httpBackend.whenGET(`Tickets/1/isLocked`).respond();
- controller.updateQuantity(sale);
- $httpBackend.flush();
-
- expect(controller.$.watcher.updateOriginalData).toHaveBeenCalledWith();
- });
- });
-
- describe('updateConcept()', () => {
- it('should make a POST query saving sale concept', () => {
- jest.spyOn(controller.$.watcher, 'updateOriginalData');
- const data = {newConcept: 'My new weapon'};
- const sale = sales[0];
- sale.concept = 'My new weapon';
-
- $httpBackend.when('POST', `Sales/4/updateConcept`, data).respond();
- $httpBackend.expect('POST', `Sales/4/updateConcept`, data).respond();
- $httpBackend.whenGET(`Tickets/1/subtotal`).respond(200, 227.5);
- $httpBackend.whenGET(`Tickets/1/getVAT`).respond(200, 10.5);
- $httpBackend.whenGET(`Tickets/1/isEditable`).respond();
- $httpBackend.whenGET(`Tickets/1/isLocked`).respond();
- controller.updateConcept(sale);
- $httpBackend.flush();
-
- expect(controller.$.watcher.updateOriginalData).toHaveBeenCalledWith();
- });
- });
-
- describe('addSale()', () => {
- it('should make a POST query adding a new sale', () => {
- jest.spyOn(controller.$.watcher, 'updateOriginalData');
- const newSale = {itemFk: 4, quantity: 10};
- const params = {itemId: 4, quantity: 10};
-
- const expectedResult = {
- id: 30,
- quantity: 10,
- discount: 0,
- price: 0,
- itemFk: 4,
- item: {
- subName: 'Item subName',
- image: '30.png'
- }
- };
-
- $httpBackend.when('POST', `tickets/1/addSale`, params).respond(expectedResult);
- $httpBackend.expect('POST', `tickets/1/addSale`, params).respond(expectedResult);
- $httpBackend.whenGET(`Tickets/1/subtotal`).respond(200, 227.5);
- $httpBackend.whenGET(`Tickets/1/getVAT`).respond(200, 10.5);
- $httpBackend.whenGET(`Tickets/1/isEditable`).respond();
- $httpBackend.whenGET(`Tickets/1/isLocked`).respond();
- controller.addSale(newSale);
- $httpBackend.flush();
-
- expect(controller.$.watcher.updateOriginalData).toHaveBeenCalledWith();
- });
- });
-
- describe('transferSales()', () => {
- it('should transfer sales to a ticket', () => {
- jest.spyOn(controller, 'goToTicket');
- controller.transfer = {
- sales: [{id: 1, itemFk: 1}, {id: 2, itemFk: 4}]
- };
-
- const expectedResponse = {id: 13};
- const params = {
- ticketId: 13,
- sales: controller.transfer.sales
- };
-
- $httpBackend.when('POST', `tickets/1/transferSales`, params).respond(expectedResponse);
- $httpBackend.expect('POST', `tickets/1/transferSales`, params).respond(expectedResponse);
- $httpBackend.whenGET(`Tickets/1/subtotal`).respond(200, 227.5);
- $httpBackend.whenGET(`Tickets/1/getVAT`).respond(200, 10.5);
- $httpBackend.whenGET(`Tickets/1/isEditable`).respond();
- $httpBackend.whenGET(`Tickets/1/isLocked`).respond();
- controller.transferSales(13);
- $httpBackend.flush();
-
- expect(controller.goToTicket).toHaveBeenCalledWith(13);
- });
- });
-
describe('setTransferParams()', () => {
it('should define the transfer object on the controller and its default properties', () => {
- let sale = controller.sales[0];
- sale.checked = true;
- const expectedResponse = [sale];
+ const firstSale = controller.sales[0];
+ firstSale.checked = true;
+ const expectedResponse = [firstSale];
- $httpBackend.when('GET', `clients/101/lastActiveTickets?ticketId=1`).respond(expectedResponse);
$httpBackend.expect('GET', `clients/101/lastActiveTickets?ticketId=1`).respond(expectedResponse);
- $httpBackend.whenGET(`Tickets/1/subtotal`).respond(200, 227.5);
- $httpBackend.whenGET(`Tickets/1/getVAT`).respond(200, 10.5);
- $httpBackend.whenGET(`Tickets/1/isEditable`).respond();
- $httpBackend.whenGET(`Tickets/1/isLocked`).respond();
controller.setTransferParams();
$httpBackend.flush();
@@ -357,52 +328,152 @@ describe('Ticket', () => {
expect(controller.transfer).toBeDefined();
expect(lastActiveTickets).toBeDefined();
- expect(lastActiveTickets[0].id).toEqual(4);
+ expect(lastActiveTickets[0].id).toEqual(1);
});
});
- describe('newOrderFromTicket()', () => {
- it('should make an HTTP post query and then open the new order on a new tab', () => {
- const params = {ticketFk: 1};
- const expectedResponse = {id: 123};
+ describe('transferSales()', () => {
+ it('should transfer sales to a ticket and then call to the $state go() method', () => {
+ jest.spyOn(controller.$state, 'go').mockReturnThis();
- window.open = jasmine.createSpy('open');
- controller.$state.href = jasmine.createSpy('href')
- .and.returnValue('/somePath');
+ controller.transfer = {
+ sales: [{id: 1, itemFk: 1}, {id: 2, itemFk: 4}]
+ };
- $httpBackend.when('POST', `Orders/newFromTicket`, params).respond(expectedResponse);
- $httpBackend.expect('POST', `Orders/newFromTicket`, params).respond(expectedResponse);
- $httpBackend.whenGET(`Tickets/1/subtotal`).respond(200, 227.5);
- $httpBackend.whenGET(`Tickets/1/getVAT`).respond(200, 10.5);
- $httpBackend.whenGET(`Tickets/1/isEditable`).respond();
- $httpBackend.whenGET(`Tickets/1/isLocked`).respond();
- controller.newOrderFromTicket();
+ const ticketIdToTransfer = 13;
+ const expectedResponse = {id: ticketIdToTransfer};
+ const params = {
+ ticketId: 13,
+ sales: controller.transfer.sales
+ };
+
+ $httpBackend.expect('POST', `tickets/1/transferSales`, params).respond(expectedResponse);
+ controller.transferSales(ticketIdToTransfer);
$httpBackend.flush();
- expect(window.open).toHaveBeenCalledWith('/somePath', '_blank');
+ expect(controller.$state.go).toHaveBeenCalledWith('ticket.card.sale', {id: ticketIdToTransfer});
});
});
- describe('hasOneSaleSelected()', () => {
- it('should return true if just one sale is selected', () => {
- controller.sales[0].checked = true;
+ describe('updatePrice()', () => {
+ it('should make an HTTP POST query, update the sale price and then call to the resetChanges() method', () => {
+ jest.spyOn(controller.vnApp, 'showSuccess').mockReturnThis();
+ jest.spyOn(controller, 'resetChanges').mockReturnThis();
- expect(controller.hasOneSaleSelected()).toBeTruthy();
- });
- });
-
- describe('calculateSalePrice()', () => {
- it('should make an HTTP post query ', () => {
- controller.sales[0].checked = true;
-
- $httpBackend.when('POST', `Sales/4/recalculatePrice`).respond(200);
- $httpBackend.whenGET(`Tickets/1/subtotal`).respond(200, 227.5);
- $httpBackend.whenGET(`Tickets/1/getVAT`).respond(200, 10.5);
- $httpBackend.whenGET(`Tickets/1/isEditable`).respond();
- $httpBackend.whenGET(`Tickets/1/isLocked`).respond();
-
- controller.calculateSalePrice();
+ const selectedSale = controller.sales[0];
+ selectedSale.checked = true;
+ controller.$.editPricePopover = {hide: jest.fn()};
+ controller.edit = {
+ price: 2,
+ sale: selectedSale
+ };
+ const expectedParams = {newPrice: 2};
+ $httpBackend.expect('POST', `Sales/1/updatePrice`, expectedParams).respond(200, {price: 2});
+ controller.updatePrice();
$httpBackend.flush();
+
+ expect(selectedSale.price).toEqual(2);
+ expect(controller.vnApp.showSuccess).toHaveBeenCalledWith('Data saved!');
+ expect(controller.$.editPricePopover.hide).toHaveBeenCalledWith();
+ expect(controller.resetChanges).toHaveBeenCalledWith();
+ });
+ });
+
+ describe('changeDiscount()', () => {
+ it('should call to the updateDiscount() method and then to the editDiscount hide() method', () => {
+ jest.spyOn(controller, 'updateDiscount').mockReturnThis();
+
+ const selectedSale = controller.sales[0];
+ selectedSale.checked = true;
+ const expectedSale = selectedSale;
+ controller.$.editDiscount = {hide: jest.fn()};
+ controller.edit = {
+ discount: 10,
+ sale: selectedSale
+ };
+
+ controller.changeDiscount();
+
+ expect(controller.updateDiscount).toHaveBeenCalledWith([expectedSale]);
+ expect(controller.$.editDiscount.hide).toHaveBeenCalledWith();
+ });
+ });
+
+ describe('changeMultipleDiscount()', () => {
+ it('should call to the updateDiscount() method and then to the editDiscountDialog hide() method', () => {
+ jest.spyOn(controller, 'updateDiscount').mockReturnThis();
+
+ const firstSelectedSale = controller.sales[0];
+ firstSelectedSale.checked = true;
+
+ const secondSelectedSale = controller.sales[1];
+ secondSelectedSale.checked = true;
+
+ const expectedSales = [firstSelectedSale, secondSelectedSale];
+ controller.$.editDiscountDialog = {hide: jest.fn()};
+ controller.edit = {
+ discount: 10,
+ sales: expectedSales
+ };
+
+ controller.changeMultipleDiscount();
+
+ expect(controller.updateDiscount).toHaveBeenCalledWith(expectedSales);
+ expect(controller.$.editDiscountDialog.hide).toHaveBeenCalledWith();
+ });
+
+ it('should not call to the updateDiscount() method and then to the editDiscountDialog hide() method', () => {
+ jest.spyOn(controller, 'updateDiscount').mockReturnThis();
+
+ const firstSelectedSale = controller.sales[0];
+ firstSelectedSale.checked = true;
+ firstSelectedSale.discount = 10;
+
+ const secondSelectedSale = controller.sales[1];
+ secondSelectedSale.checked = true;
+ secondSelectedSale.discount = 10;
+
+ const expectedSales = [firstSelectedSale, secondSelectedSale];
+ controller.$.editDiscountDialog = {hide: jest.fn()};
+ controller.edit = {
+ discount: 10,
+ sales: expectedSales
+ };
+
+ controller.changeMultipleDiscount();
+
+ expect(controller.updateDiscount).not.toHaveBeenCalledWith(expectedSales);
+ expect(controller.$.editDiscountDialog.hide).toHaveBeenCalledWith();
+ });
+ });
+
+ describe('updateDiscount()', () => {
+ it('should make an HTTP POST query, update the sales discount and then call to the resetChanges() method', () => {
+ jest.spyOn(controller, 'resetChanges').mockReturnThis();
+ jest.spyOn(controller.vnApp, 'showSuccess').mockReturnThis();
+
+ const expectedDiscount = 10;
+ const firstSelectedSale = controller.sales[0];
+ firstSelectedSale.checked = true;
+
+ const secondSelectedSale = controller.sales[1];
+ secondSelectedSale.checked = true;
+
+ controller.edit = {
+ discount: expectedDiscount
+ };
+
+ const expectedSales = [firstSelectedSale, secondSelectedSale];
+ const expectedSaleIds = [firstSelectedSale.id, secondSelectedSale.id];
+ const expectedParams = {salesIds: expectedSaleIds, newDiscount: expectedDiscount};
+ $httpBackend.expect('POST', `Tickets/1/updateDiscount`, expectedParams).respond(200, {discount: 10});
+ controller.updateDiscount(expectedSales);
+ $httpBackend.flush();
+
+ expect(firstSelectedSale.discount).toEqual(expectedDiscount);
+ expect(secondSelectedSale.discount).toEqual(expectedDiscount);
+ expect(controller.vnApp.showSuccess).toHaveBeenCalledWith('Data saved!');
+ expect(controller.resetChanges).toHaveBeenCalledWith();
});
});
});