Added front unit tests
This commit is contained in:
parent
d530be9349
commit
defe7e7a17
|
@ -18,7 +18,6 @@ import './expedition';
|
||||||
import './volume';
|
import './volume';
|
||||||
import './package/index';
|
import './package/index';
|
||||||
import './sale';
|
import './sale';
|
||||||
import './sale/editDiscount';
|
|
||||||
import './tracking/index';
|
import './tracking/index';
|
||||||
import './tracking/edit';
|
import './tracking/edit';
|
||||||
import './sale-checked';
|
import './sale-checked';
|
||||||
|
|
|
@ -1,16 +0,0 @@
|
||||||
<section class="header vn-pa-md">
|
|
||||||
<h5>MANÁ: {{$ctrl.mana | currency: 'EUR':0}}</h5>
|
|
||||||
</section>
|
|
||||||
<div class="vn-pa-md">
|
|
||||||
<vn-input-number
|
|
||||||
vn-focus
|
|
||||||
label="Discount"
|
|
||||||
ng-model="$ctrl.newDiscount"
|
|
||||||
on-change="$ctrl.updateDiscount()"
|
|
||||||
suffix="%">
|
|
||||||
</vn-input-number>
|
|
||||||
<div class="simulator">
|
|
||||||
<p class="simulatorTitle" translate>New price</p>
|
|
||||||
<p>{{$ctrl.newPrice | currency: 'EUR':2}}</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
|
@ -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: '&'
|
|
||||||
}
|
|
||||||
});
|
|
|
@ -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() {
|
resetChanges() {
|
||||||
if (this.newInstances().length === 0)
|
if (this.newInstances().length === 0)
|
||||||
this.$.watcher.updateOriginalData();
|
this.$.watcher.updateOriginalData();
|
||||||
|
@ -197,8 +180,7 @@ class Controller extends Section {
|
||||||
|
|
||||||
showTransferPopover(event) {
|
showTransferPopover(event) {
|
||||||
this.setTransferParams();
|
this.setTransferParams();
|
||||||
this.$.transfer.parent = event.target;
|
this.$.transfer.show(event);
|
||||||
this.$.transfer.show();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setTransferParams() {
|
setTransferParams() {
|
||||||
|
|
|
@ -9,33 +9,33 @@ describe('Ticket', () => {
|
||||||
let $state;
|
let $state;
|
||||||
let $httpBackend;
|
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(ngModule('ticket'));
|
||||||
|
|
||||||
beforeEach(angular.mock.inject(($componentController, $rootScope, _$state_, _$httpBackend_) => {
|
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_;
|
$state = _$state_;
|
||||||
$scope = $rootScope.$new();
|
$scope = $rootScope.$new();
|
||||||
$scope.watcher = watcher;
|
$scope.watcher = watcher;
|
||||||
|
@ -56,300 +56,271 @@ describe('Ticket', () => {
|
||||||
const $element = angular.element('<vn-ticket-sale></vn-ticket-sale>');
|
const $element = angular.element('<vn-ticket-sale></vn-ticket-sale>');
|
||||||
controller = $componentController('vnTicketSale', {$element, $scope});
|
controller = $componentController('vnTicketSale', {$element, $scope});
|
||||||
controller.card = {reload: () => {}};
|
controller.card = {reload: () => {}};
|
||||||
controller.ticket = ticket;
|
controller._ticket = ticket;
|
||||||
controller.sales = sales;
|
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()', () => {
|
describe('createClaim()', () => {
|
||||||
it('should perform a query and call windows open', () => {
|
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 newEmptySale = {quantity: 10};
|
||||||
const sales = [{id: 1}, {id: 2}];
|
controller.sales.push(newEmptySale);
|
||||||
|
const firstSale = controller.sales[0];
|
||||||
|
firstSale.checked = true;
|
||||||
|
|
||||||
$httpBackend.whenGET(`Tickets/1/getVAT`).respond(200, 10.5);
|
const expectedParams = {
|
||||||
$httpBackend.whenGET(`Tickets/1/subtotal`).respond(200, 227.5);
|
claim: {ticketFk: 1, clientFk: 101, ticketCreated: 1},
|
||||||
$httpBackend.whenGET(`Tickets/1/isEditable`).respond();
|
sales: [firstSale]
|
||||||
$httpBackend.whenGET(`Tickets/1/isLocked`).respond();
|
};
|
||||||
$httpBackend.when('POST', `Claims/createFromSales`, {claim: claim, sales: sales}).respond(claim);
|
|
||||||
$httpBackend.expect('POST', `Claims/createFromSales`).respond(claim);
|
$httpBackend.expect('POST', `Claims/createFromSales`, expectedParams).respond(200, {id: 1});
|
||||||
controller.createClaim();
|
controller.createClaim();
|
||||||
$httpBackend.flush();
|
$httpBackend.flush();
|
||||||
|
|
||||||
expect(controller.subtotal).toEqual(227.5);
|
expect(controller.resetChanges).toHaveBeenCalledWith();
|
||||||
expect(controller.VAT).toEqual(10.5);
|
|
||||||
expect(controller.total).toEqual(238);
|
|
||||||
expect(controller.$state.go).toHaveBeenCalledWith('claim.card.basicData', {id: 1});
|
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()', () => {
|
describe('setTransferParams()', () => {
|
||||||
it('should define the transfer object on the controller and its default properties', () => {
|
it('should define the transfer object on the controller and its default properties', () => {
|
||||||
let sale = controller.sales[0];
|
const firstSale = controller.sales[0];
|
||||||
sale.checked = true;
|
firstSale.checked = true;
|
||||||
const expectedResponse = [sale];
|
const expectedResponse = [firstSale];
|
||||||
|
|
||||||
$httpBackend.when('GET', `clients/101/lastActiveTickets?ticketId=1`).respond(expectedResponse);
|
|
||||||
$httpBackend.expect('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();
|
controller.setTransferParams();
|
||||||
$httpBackend.flush();
|
$httpBackend.flush();
|
||||||
|
|
||||||
|
@ -357,52 +328,152 @@ describe('Ticket', () => {
|
||||||
|
|
||||||
expect(controller.transfer).toBeDefined();
|
expect(controller.transfer).toBeDefined();
|
||||||
expect(lastActiveTickets).toBeDefined();
|
expect(lastActiveTickets).toBeDefined();
|
||||||
expect(lastActiveTickets[0].id).toEqual(4);
|
expect(lastActiveTickets[0].id).toEqual(1);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('newOrderFromTicket()', () => {
|
describe('transferSales()', () => {
|
||||||
it('should make an HTTP post query and then open the new order on a new tab', () => {
|
it('should transfer sales to a ticket and then call to the $state go() method', () => {
|
||||||
const params = {ticketFk: 1};
|
jest.spyOn(controller.$state, 'go').mockReturnThis();
|
||||||
const expectedResponse = {id: 123};
|
|
||||||
|
|
||||||
window.open = jasmine.createSpy('open');
|
controller.transfer = {
|
||||||
controller.$state.href = jasmine.createSpy('href')
|
sales: [{id: 1, itemFk: 1}, {id: 2, itemFk: 4}]
|
||||||
.and.returnValue('/somePath');
|
};
|
||||||
|
|
||||||
$httpBackend.when('POST', `Orders/newFromTicket`, params).respond(expectedResponse);
|
const ticketIdToTransfer = 13;
|
||||||
$httpBackend.expect('POST', `Orders/newFromTicket`, params).respond(expectedResponse);
|
const expectedResponse = {id: ticketIdToTransfer};
|
||||||
$httpBackend.whenGET(`Tickets/1/subtotal`).respond(200, 227.5);
|
const params = {
|
||||||
$httpBackend.whenGET(`Tickets/1/getVAT`).respond(200, 10.5);
|
ticketId: 13,
|
||||||
$httpBackend.whenGET(`Tickets/1/isEditable`).respond();
|
sales: controller.transfer.sales
|
||||||
$httpBackend.whenGET(`Tickets/1/isLocked`).respond();
|
};
|
||||||
controller.newOrderFromTicket();
|
|
||||||
|
$httpBackend.expect('POST', `tickets/1/transferSales`, params).respond(expectedResponse);
|
||||||
|
controller.transferSales(ticketIdToTransfer);
|
||||||
$httpBackend.flush();
|
$httpBackend.flush();
|
||||||
|
|
||||||
expect(window.open).toHaveBeenCalledWith('/somePath', '_blank');
|
expect(controller.$state.go).toHaveBeenCalledWith('ticket.card.sale', {id: ticketIdToTransfer});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('hasOneSaleSelected()', () => {
|
describe('updatePrice()', () => {
|
||||||
it('should return true if just one sale is selected', () => {
|
it('should make an HTTP POST query, update the sale price and then call to the resetChanges() method', () => {
|
||||||
controller.sales[0].checked = true;
|
jest.spyOn(controller.vnApp, 'showSuccess').mockReturnThis();
|
||||||
|
jest.spyOn(controller, 'resetChanges').mockReturnThis();
|
||||||
|
|
||||||
expect(controller.hasOneSaleSelected()).toBeTruthy();
|
const selectedSale = controller.sales[0];
|
||||||
});
|
selectedSale.checked = true;
|
||||||
});
|
controller.$.editPricePopover = {hide: jest.fn()};
|
||||||
|
controller.edit = {
|
||||||
describe('calculateSalePrice()', () => {
|
price: 2,
|
||||||
it('should make an HTTP post query ', () => {
|
sale: selectedSale
|
||||||
controller.sales[0].checked = true;
|
};
|
||||||
|
const expectedParams = {newPrice: 2};
|
||||||
$httpBackend.when('POST', `Sales/4/recalculatePrice`).respond(200);
|
$httpBackend.expect('POST', `Sales/1/updatePrice`, expectedParams).respond(200, {price: 2});
|
||||||
$httpBackend.whenGET(`Tickets/1/subtotal`).respond(200, 227.5);
|
controller.updatePrice();
|
||||||
$httpBackend.whenGET(`Tickets/1/getVAT`).respond(200, 10.5);
|
|
||||||
$httpBackend.whenGET(`Tickets/1/isEditable`).respond();
|
|
||||||
$httpBackend.whenGET(`Tickets/1/isLocked`).respond();
|
|
||||||
|
|
||||||
controller.calculateSalePrice();
|
|
||||||
$httpBackend.flush();
|
$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();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue