feat(invoiceOut): separate index.js and jest test
gitea/salix/pipeline/head This commit looks good Details

This commit is contained in:
Alex Moreno 2021-11-10 14:48:17 +01:00
parent a52c06057f
commit f34130cbd7
4 changed files with 18 additions and 110 deletions

View File

@ -3,8 +3,10 @@ import Section from 'salix/components/section';
import './style.scss'; import './style.scss';
class Controller extends Section { class Controller extends Section {
constructor($element, $) { constructor($element, $, vnReport, vnEmail) {
super($element, $); super($element, $);
this.vnReport = vnReport;
this.vnEmail = vnEmail;
} }
get invoiceOut() { get invoiceOut() {
@ -13,6 +15,8 @@ class Controller extends Section {
set invoiceOut(value) { set invoiceOut(value) {
this._invoiceOut = value; this._invoiceOut = value;
if (value)
this.id = value.id;
} }
loadData() { loadData() {
@ -31,8 +35,8 @@ class Controller extends Section {
} }
] ]
}; };
return this.getData(`InvoiceOuts/${this.invoiceOut.id}`, {filter}) return this.$http.get(`InvoiceOuts/${this.invoiceOut.id}`, {filter})
.then(res => this.invoice = res.data); .then(res => this.invoiceOut = res.data);
} }
reload() { reload() {
return this.loadData().then(() => { return this.loadData().then(() => {
@ -48,8 +52,8 @@ class Controller extends Section {
deleteInvoiceOut() { deleteInvoiceOut() {
return this.$http.post(`InvoiceOuts/${this.invoiceOut.id}/delete`) return this.$http.post(`InvoiceOuts/${this.invoiceOut.id}/delete`)
.then(() => this.$state.go('invoiceOut.index')) .then(() => this.$state.go('invoiceOut.index'))
.then(() => this.vnApp.showSuccess(this.$t('InvoiceOut deleted'))) .then(() => this.$state.reload())
.then(() => this.close()); .then(() => this.vnApp.showSuccess(this.$t('InvoiceOut deleted')));
} }
bookInvoiceOut() { bookInvoiceOut() {
@ -59,8 +63,7 @@ class Controller extends Section {
} }
createPdfInvoice() { createPdfInvoice() {
const invoiceId = this.invoiceOut.id; return this.$http.post(`InvoiceOuts/${this.id}/createPdf`)
return this.$http.post(`InvoiceOuts/${invoiceId}/createPdf`)
.then(() => this.reload()) .then(() => this.reload())
.then(() => { .then(() => {
const snackbarMessage = this.$t( const snackbarMessage = this.$t(
@ -72,7 +75,7 @@ class Controller extends Section {
showCsvInvoice() { showCsvInvoice() {
this.vnReport.showCsv('invoice', { this.vnReport.showCsv('invoice', {
recipientId: this.invoiceOut.client.id, recipientId: this.invoiceOut.client.id,
invoiceId: this.id, invoiceId: this.id
}); });
} }
@ -95,17 +98,18 @@ class Controller extends Section {
showExportationLetter() { showExportationLetter() {
this.vnReport.show('exportation', { this.vnReport.show('exportation', {
recipientId: this.invoiceOut.client.id, recipientId: this.invoiceOut.client.id,
invoiceId: this.id, invoiceId: this.id
}); });
} }
} }
Controller.$inject = ['$element', '$scope']; Controller.$inject = ['$element', '$scope', 'vnReport', 'vnEmail'];
ngModule.vnComponent('vnInvoiceOutDescriptorMenu', { ngModule.vnComponent('vnInvoiceOutDescriptorMenu', {
template: require('./index.html'), template: require('./index.html'),
controller: Controller, controller: Controller,
bindings: { bindings: {
invoiceOut: '<', invoiceOut: '<',
parentReload: '&'
} }
}); });

View File

@ -1,6 +1,6 @@
import './index'; import './index';
describe('vnInvoiceOutDescriptor', () => { describe('vnInvoiceOutDescriptorMenu', () => {
let controller; let controller;
let $httpBackend; let $httpBackend;
let $httpParamSerializer; let $httpParamSerializer;
@ -14,22 +14,9 @@ describe('vnInvoiceOutDescriptor', () => {
beforeEach(inject(($componentController, _$httpParamSerializer_, _$httpBackend_) => { beforeEach(inject(($componentController, _$httpParamSerializer_, _$httpBackend_) => {
$httpBackend = _$httpBackend_; $httpBackend = _$httpBackend_;
$httpParamSerializer = _$httpParamSerializer_; $httpParamSerializer = _$httpParamSerializer_;
controller = $componentController('vnInvoiceOutDescriptor', {$element: null}); controller = $componentController('vnInvoiceOutDescriptorMenu', {$element: null});
})); }));
describe('loadData()', () => {
it(`should perform a get query to store the invoice in data into the controller`, () => {
const id = 1;
const response = {id: 1};
$httpBackend.expectGET(`InvoiceOuts/${id}`).respond(response);
controller.id = id;
$httpBackend.flush();
expect(controller.invoiceOut).toEqual(response);
});
});
describe('createPdfInvoice()', () => { describe('createPdfInvoice()', () => {
it('should make a query to the createPdf() endpoint and show a success snackbar', () => { it('should make a query to the createPdf() endpoint and show a success snackbar', () => {
jest.spyOn(controller.vnApp, 'showSuccess'); jest.spyOn(controller.vnApp, 'showSuccess');

View File

@ -4,7 +4,7 @@
<slot-dot-menu> <slot-dot-menu>
<vn-invoice-out-descriptor-menu <vn-invoice-out-descriptor-menu
invoice-out="$ctrl.invoiceOut" invoice-out="$ctrl.invoiceOut"
parent-reload="$ctrl.cardReload()" parent-reload="$ctrl.reload()"
/> />
</slot-dot-menu> </slot-dot-menu>
<slot-body> <slot-body>

View File

@ -3,17 +3,11 @@ import './index';
describe('vnInvoiceOutDescriptor', () => { describe('vnInvoiceOutDescriptor', () => {
let controller; let controller;
let $httpBackend; let $httpBackend;
let $httpParamSerializer;
const invoiceOut = {
id: 1,
client: {id: 1101}
};
beforeEach(ngModule('invoiceOut')); beforeEach(ngModule('invoiceOut'));
beforeEach(inject(($componentController, _$httpParamSerializer_, _$httpBackend_) => { beforeEach(inject(($componentController, _$httpBackend_) => {
$httpBackend = _$httpBackend_; $httpBackend = _$httpBackend_;
$httpParamSerializer = _$httpParamSerializer_;
controller = $componentController('vnInvoiceOutDescriptor', {$element: null}); controller = $componentController('vnInvoiceOutDescriptor', {$element: null});
})); }));
@ -29,81 +23,4 @@ describe('vnInvoiceOutDescriptor', () => {
expect(controller.invoiceOut).toEqual(response); expect(controller.invoiceOut).toEqual(response);
}); });
}); });
describe('createPdfInvoice()', () => {
it('should make a query to the createPdf() endpoint and show a success snackbar', () => {
jest.spyOn(controller.vnApp, 'showSuccess');
controller.invoiceOut = invoiceOut;
$httpBackend.whenGET(`InvoiceOuts/${invoiceOut.id}`).respond();
$httpBackend.expectPOST(`InvoiceOuts/${invoiceOut.id}/createPdf`).respond();
controller.createPdfInvoice();
$httpBackend.flush();
expect(controller.vnApp.showSuccess).toHaveBeenCalled();
});
});
describe('showCsvInvoice()', () => {
it('should make a query to the csv invoice download endpoint and show a message snackbar', () => {
jest.spyOn(window, 'open').mockReturnThis();
controller.invoiceOut = invoiceOut;
const expectedParams = {
invoiceId: invoiceOut.id,
recipientId: invoiceOut.client.id
};
const serializedParams = $httpParamSerializer(expectedParams);
const expectedPath = `api/csv/invoice/download?${serializedParams}`;
controller.showCsvInvoice();
expect(window.open).toHaveBeenCalledWith(expectedPath);
});
});
describe('sendPdfInvoice()', () => {
it('should make a query to the email invoice endpoint and show a message snackbar', () => {
jest.spyOn(controller.vnApp, 'showMessage');
controller.invoiceOut = invoiceOut;
const $data = {email: 'brucebanner@gothamcity.com'};
const expectedParams = {
invoiceId: invoiceOut.id,
recipient: $data.email,
recipientId: invoiceOut.client.id
};
const serializedParams = $httpParamSerializer(expectedParams);
$httpBackend.expectGET(`email/invoice?${serializedParams}`).respond();
controller.sendPdfInvoice($data);
$httpBackend.flush();
expect(controller.vnApp.showMessage).toHaveBeenCalled();
});
});
describe('sendCsvInvoice()', () => {
it('should make a query to the csv invoice send endpoint and show a message snackbar', () => {
jest.spyOn(controller.vnApp, 'showMessage');
controller.invoiceOut = invoiceOut;
const $data = {email: 'brucebanner@gothamcity.com'};
const expectedParams = {
invoiceId: invoiceOut.id,
recipient: $data.email,
recipientId: invoiceOut.client.id
};
const serializedParams = $httpParamSerializer(expectedParams);
$httpBackend.expectGET(`csv/invoice/send?${serializedParams}`).respond();
controller.sendCsvInvoice($data);
$httpBackend.flush();
expect(controller.vnApp.showMessage).toHaveBeenCalled();
});
});
}); });