#1537 refactor fixtures

This commit is contained in:
Carlos Jimenez Ruiz 2019-06-19 14:40:47 +02:00
parent 63febf8bd0
commit 560cce7c8c
19 changed files with 140 additions and 293 deletions

View File

@ -187,7 +187,7 @@ INSERT INTO `vn`.`contactChannel`(`id`, `name`)
INSERT INTO `vn`.`client`(`id`,`name`,`fi`,`socialName`,`contact`,`street`,`city`,`postcode`,`phone`,`mobile`,`fax`,`isRelevant`,`email`,`iban`,`dueDay`,`accountingAccount`,`isEqualizated`,`provinceFk`,`hasToInvoice`,`credit`,`countryFk`,`isActive`,`gestdocFk`,`quality`,`payMethodFk`,`created`,`isToBeMailed`,`contactChannelFk`,`hasSepaVnl`,`hasCoreVnl`,`hasCoreVnh`,`riskCalculated`,`clientTypeFk`,`mailAddress`,`cplusTerIdNifFk`,`hasToInvoiceByAddress`,`isTaxDataChecked`,`isFreezed`,`creditInsurance`,`isCreatedAsServed`,`hasInvoiceSimplified`,`salesPersonFk`,`isVies`,`eypbc`)
VALUES
(101, 'Bruce Wayne', '84612325V', 'Batman', 'Alfred', '1007 Mountain Drive, Gotham', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'BruceWayne@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1),
(102, 'Petter Parker', '87945234L', 'Spider-Man', 'Aunt May', '20 Ingram Street', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'PetterParker@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 0, 0, NULL, 0, 0, 18, 0, 1),
(102, 'Petter Parker', '87945234L', 'Spider-Man', 'Aunt May', '20 Ingram Street', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'PetterParker@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1),
(103, 'Clark Kent', '06815934E', 'Super-Man', 'lois lane', '344 Clinton Street', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'ClarkKent@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 0, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1),
(104, 'Tony Stark', '06089160W', 'Iron-Man', 'Pepper Potts', '10880 Malibu Point', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'TonyStark@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 0, NULL, 0, 0, 18, 0, 1),
(105, 'Max Eisenhardt', '251628698', 'Magneto', 'Rogue', 'Unknown Whereabouts', 'Silla', 46460, 1111111111, 222222222, 333333333, 1, 'MaxEisenhardt@mydomain.com', NULL, 0, 1234567890, 0, 1, 1, 300, 1, 1, NULL, 10, 5,CURDATE(), 1, 5, 1, 1, 1, '0000-00-00', 1, NULL, 1, 1, 1, 1, NULL, 0, 0, NULL, 0, 1),
@ -439,12 +439,12 @@ INSERT INTO `vn`.`ticket`(`id`, `priority`, `agencyModeFk`,`warehouseFk`,`routeF
(14, 1, 2, 2, 3, CURDATE(), DATE_ADD(CURDATE(), INTERVAL + 1 DAY), 104, 'Malibu Point', 4, NULL, 0, CURDATE()),
(15, 1, 3, 3, 3, CURDATE(), DATE_ADD(CURDATE(), INTERVAL + 1 DAY), 105, 'Plastic Cell', 125, NULL, 0, CURDATE()),
(16, 1, 7, 1, 3, CURDATE(), DATE_ADD(CURDATE(), INTERVAL + 1 DAY), 106, 'Many Places', 126, NULL, 0, CURDATE()),
(17, 1, 4, 4, 3, CURDATE(), DATE_ADD(CURDATE(), INTERVAL + 1 DAY), 107, 'Your pocket', 127, NULL, 0, CURDATE()),
(17, 1, 7, 1, 3, CURDATE(), DATE_ADD(CURDATE(), INTERVAL + 1 DAY), 106, 'Many Places', 126, NULL, 0, CURDATE()),
(18, 1, 4, 4, 3, CURDATE(), DATE_ADD(CURDATE(), INTERVAL + 1 DAY), 108, 'Cerebro', 128, NULL, 0, CURDATE()),
(19, 1, 5, 5, 3, CURDATE(), DATE_ADD(CURDATE(), INTERVAL + 1 DAY), 109, 'Somewhere in Thailand', 129, NULL, 0, CURDATE()),
(20, 1, 5, 5, 3, CURDATE(), DATE_ADD(CURDATE(), INTERVAL + 1 DAY), 109, 'Somewhere in Thailand', 129, NULL, 0, CURDATE()),
(21, NULL, 5, 5, NULL, DATE_ADD(CURDATE(), INTERVAL +1 MONTH), DATE_ADD(DATE_ADD(CURDATE(),INTERVAL +1 MONTH), INTERVAL +1 DAY), 109, 'Somewhere in Holland', 102, NULL, 1, DATE_ADD(CURDATE(), INTERVAL +1 MONTH)),
(22, NULL, 5, 5, NULL, DATE_ADD(CURDATE(), INTERVAL +1 MONTH), DATE_ADD(DATE_ADD(CURDATE(),INTERVAL +1 MONTH), INTERVAL +1 DAY), 109, 'Somewhere in Japan', 103, NULL, 1, DATE_ADD(CURDATE(), INTERVAL +1 MONTH));
(19, 1, 5, 5, 3, CURDATE(), DATE_ADD(CURDATE(), INTERVAL + 1 DAY), 109, 'Somewhere in Thailand', 129, NULL, 1, CURDATE()),
(20, 1, 5, 5, 3, DATE_ADD(CURDATE(), INTERVAL +1 MONTH), DATE_ADD(DATE_ADD(CURDATE(),INTERVAL +1 MONTH), INTERVAL +1 DAY), 109, 'Somewhere in Thailand', 129, NULL, 0, DATE_ADD(CURDATE(), INTERVAL +1 MONTH)),
(21, NULL, 5, 5, NULL, DATE_ADD(CURDATE(), INTERVAL +1 MONTH), DATE_ADD(DATE_ADD(CURDATE(),INTERVAL +1 MONTH), INTERVAL +1 DAY), 109, 'Somewhere in Holland', 102, NULL, 0, DATE_ADD(CURDATE(), INTERVAL +1 MONTH)),
(22, NULL, 5, 5, NULL, DATE_ADD(CURDATE(), INTERVAL +1 MONTH), DATE_ADD(DATE_ADD(CURDATE(),INTERVAL +1 MONTH), INTERVAL +1 DAY), 109, 'Somewhere in Japan', 103, NULL, 0, DATE_ADD(CURDATE(), INTERVAL +1 MONTH));
ccc
INSERT INTO `vn`.`ticketObservation`(`id`, `ticketFk`, `observationTypeFk`, `description`)
VALUES
@ -475,10 +475,10 @@ INSERT INTO `vn`.`ticketTracking`(`id`, `ticketFk`, `stateFk`, `workerFk`, `crea
(16, 16, 3, 19, CURDATE()),
(17, 17, 3, 19, CURDATE()),
(18, 18, 3, 19, CURDATE()),
(19, 19, 3, 19, CURDATE()),
(20, 20, 3, 19, CURDATE()),
(19, 19, 17, 19, CURDATE()),
(20, 20, 1, 19, DATE_ADD(CURDATE(), INTERVAL +1 MONTH)),
(21, 21, 1, 19, DATE_ADD(CURDATE(), INTERVAL +1 MONTH)),
(22, 22, 17, 19, DATE_ADD(CURDATE(), INTERVAL +1 MONTH));
(22, 22, 1, 19, DATE_ADD(CURDATE(), INTERVAL +1 MONTH));
INSERT INTO `vn`.`stowaway`(`id`, `shipFk`, `created`)
VALUES
@ -1095,7 +1095,7 @@ INSERT INTO `hedera`.`order`(`id`, `date_send`, `customer_id`, `delivery_method_
(17, DATE_ADD(CURDATE(), INTERVAL + 1 DAY), 107, 1, 4, 127, 442, NULL, 'SALIX', 0, CURDATE(), CURDATE(), CURDATE()),
(18, DATE_ADD(CURDATE(), INTERVAL + 1 DAY), 108, 1, 4, 128, 442, NULL, 'SALIX', 0, CURDATE(), CURDATE(), CURDATE()),
(19, DATE_ADD(CURDATE(), INTERVAL + 1 DAY), 109, 1, 5, 129, 442, NULL, 'SALIX', 0, CURDATE(), CURDATE(), CURDATE()),
(20, DATE_ADD(CURDATE(), INTERVAL + 1 DAY), 109, 1, 5, 101, 442, NULL, 'SALIX', 0, CURDATE(), CURDATE(), CURDATE()),
(20, DATE_ADD(DATE_ADD(CURDATE(),INTERVAL +1 MONTH), INTERVAL +1 DAY), 109, 1, 5, 101, 442, NULL, 'SALIX', 0, DATE_ADD(CURDATE(), INTERVAL +1 MONTH), DATE_ADD(CURDATE(), INTERVAL +1 MONTH), DATE_ADD(CURDATE(), INTERVAL +1 MONTH)),
(21, DATE_ADD(DATE_ADD(CURDATE(),INTERVAL +1 MONTH), INTERVAL +1 DAY), 109, 1, 5, 102, 442, NULL, 'SALIX', 0, DATE_ADD(CURDATE(), INTERVAL +1 MONTH), DATE_ADD(CURDATE(), INTERVAL +1 MONTH), DATE_ADD(CURDATE(), INTERVAL +1 MONTH)),
(22, DATE_ADD(DATE_ADD(CURDATE(),INTERVAL +1 MONTH), INTERVAL +1 DAY), 109, 1, 5, 103, 442, NULL, 'SALIX', 0, DATE_ADD(CURDATE(), INTERVAL +1 MONTH), DATE_ADD(CURDATE(), INTERVAL +1 MONTH), DATE_ADD(CURDATE(), INTERVAL +1 MONTH));

View File

@ -270,8 +270,8 @@ let actions = {
waitForClassPresent: function(selector, className, done) {
this.wait(selector)
.wait((selector, className) => {
if (document.querySelector(selector).classList.contains(className))
.wait((elementSelector, targetClass) => {
if (document.querySelector(elementSelector).classList.contains(targetClass))
return true;
}, selector, className)
.then(done)

View File

@ -8,7 +8,7 @@ describe('Client lock verified data path', () => {
beforeAll(() => {
nightmare
.loginAndModule('salesPerson', 'client')
.accessToSearchResult('Petter Parker')
.accessToSearchResult('Hank Pym')
.accessToSection('client.card.fiscalData');
});
@ -27,7 +27,7 @@ describe('Client lock verified data path', () => {
const result = await nightmare
.wait(selectors.clientFiscalData.socialNameInput)
.clearInput(selectors.clientFiscalData.socialNameInput)
.write(selectors.clientFiscalData.socialNameInput, 'salesPerson was here')
.write(selectors.clientFiscalData.socialNameInput, 'Captain America Civil War')
.waitToClick(selectors.clientFiscalData.saveButton)
.waitForLastSnackbar();
@ -39,55 +39,16 @@ describe('Client lock verified data path', () => {
.reloadSection('client.card.fiscalData')
.waitToGetProperty(selectors.clientFiscalData.socialNameInput, 'value');
expect(result).toEqual('salesPerson was here');
expect(result).toEqual('Captain America Civil War');
});
});
describe('as administrative', () => {
beforeAll(() => {
nightmare
.waitForLogin('administrative');
});
it('should navigate to clients index', async() => {
const url = await nightmare
.waitToClick(selectors.globalItems.applicationsMenuButton)
.wait(selectors.globalItems.applicationsMenuVisible)
.waitToClick(selectors.globalItems.clientsButton)
.wait(selectors.clientsIndex.createClientButton)
.parsedUrl();
expect(url.hash).toEqual('#!/client/index');
});
it('should search again for the user Petter Parker', async() => {
const resultCount = await nightmare
.write(selectors.clientsIndex.searchClientInput, 'Petter Parker')
.waitToClick(selectors.clientsIndex.searchButton)
.waitForNumberOfElements(selectors.clientsIndex.searchResult, 1)
.countElement(selectors.clientsIndex.searchResult);
expect(resultCount).toEqual(1);
});
it(`should click on the search result to access to the Petter Parkers fiscal data`, async() => {
const url = await nightmare
.waitForTextInElement(selectors.clientsIndex.searchResult, 'Petter Parker')
.waitToClick(selectors.clientsIndex.searchResult)
.waitToClick(selectors.clientFiscalData.fiscalDataButton)
.waitForURL('fiscal-data')
.parsedUrl();
expect(url.hash).toContain('fiscal-data');
});
it(`should click on the fiscal data button`, async() => {
const url = await nightmare
.waitToClick(selectors.clientFiscalData.fiscalDataButton)
.waitForURL('fiscal-data')
.parsedUrl();
expect(url.hash).toContain('fiscal-data');
.loginAndModule('administrative', 'client')
.accessToSearchResult('Hank Pym')
.accessToSection('client.card.fiscalData');
});
it('should confirm verified data button is enabled for administrative', async() => {
@ -110,18 +71,18 @@ describe('Client lock verified data path', () => {
});
it('should confirm Verified data checkbox is checked', async() => {
const result = await nightmare
const isChecked = await nightmare
.reloadSection('client.card.fiscalData')
.checkboxState(selectors.clientFiscalData.verifiedDataCheckbox);
expect(result).toBe('checked');
expect(isChecked).toEqual('checked');
});
it('should again edit the social name', async() => {
const result = await nightmare
.wait(selectors.clientFiscalData.socialNameInput)
.clearInput(selectors.clientFiscalData.socialNameInput)
.write(selectors.clientFiscalData.socialNameInput, 'administrative was here')
.write(selectors.clientFiscalData.socialNameInput, 'Ant-Man and the Wasp')
.waitToClick(selectors.clientFiscalData.saveButton)
.waitForLastSnackbar();
@ -133,71 +94,32 @@ describe('Client lock verified data path', () => {
.reloadSection('client.card.fiscalData')
.waitToGetProperty(selectors.clientFiscalData.socialNameInput, 'value');
expect(result).toEqual('administrative was here');
expect(result).toEqual('Ant-Man and the Wasp');
});
});
describe('as salesPerson second run', () => {
beforeAll(() => {
nightmare
.waitForLogin('salesPerson');
});
it('should again click on the Clients button of the top bar menu', async() => {
const url = await nightmare
.waitToClick(selectors.globalItems.applicationsMenuButton)
.wait(selectors.globalItems.applicationsMenuVisible)
.waitToClick(selectors.globalItems.clientsButton)
.wait(selectors.clientsIndex.createClientButton)
.parsedUrl();
expect(url.hash).toEqual('#!/client/index');
});
it('should again search for the user Petter Parker', async() => {
const resultCount = await nightmare
.write(selectors.clientsIndex.searchClientInput, 'Petter Parker')
.waitToClick(selectors.clientsIndex.searchButton)
.waitForNumberOfElements(selectors.clientsIndex.searchResult, 1)
.countElement(selectors.clientsIndex.searchResult);
expect(resultCount).toEqual(1);
});
it(`should click on the search result to access to the client's fiscal data`, async() => {
const url = await nightmare
.waitForTextInElement(selectors.clientsIndex.searchResult, 'Petter Parker')
.waitToClick(selectors.clientsIndex.searchResult)
.waitToClick(selectors.clientFiscalData.fiscalDataButton)
.waitForURL('fiscal-data')
.parsedUrl();
expect(url.hash).toContain('fiscal-data');
});
it(`should click on the fiscal data button to start editing`, async() => {
const url = await nightmare
.waitToClick(selectors.clientFiscalData.fiscalDataButton)
.waitForURL('fiscal-data')
.parsedUrl();
expect(url.hash).toContain('fiscal-data');
.loginAndModule('salesPerson', 'client')
.accessToSearchResult('Hank Pym')
.accessToSection('client.card.fiscalData');
});
it('should confirm verified data button is disabled once again for salesPerson', async() => {
const result = await nightmare
.wait(selectors.clientFiscalData.verifiedDataCheckbox)
const isChecked = await nightmare
.waitForClassPresent(selectors.clientFiscalData.verifiedDataCheckbox, 'md-checked')
.evaluate(selector => {
return document.querySelector(selector).getAttribute('disabled');
}, selectors.clientFiscalData.verifiedDataCheckbox);
expect(result).toBeTruthy();
expect(isChecked).toBeTruthy();
});
it('should not be able to save change throwing a verified data error', async() => {
const result = await nightmare
.clearInput(selectors.clientFiscalData.socialNameInput)
.write(selectors.clientFiscalData.socialNameInput, 'salesPerson was here')
.write(selectors.clientFiscalData.socialNameInput, 'This wont happen')
.waitToClick(selectors.clientFiscalData.saveButton)
.waitForSnackbar();
@ -209,64 +131,25 @@ describe('Client lock verified data path', () => {
beforeAll(() => {
nightmare
.forceReloadSection('client.card.fiscalData')
.waitForLogin('salesAssistant');
});
it('should now navigate to clients index', async() => {
const url = await nightmare
.waitToClick(selectors.globalItems.applicationsMenuButton)
.wait(selectors.globalItems.applicationsMenuVisible)
.waitToClick(selectors.globalItems.clientsButton)
.wait(selectors.clientsIndex.createClientButton)
.parsedUrl();
expect(url.hash).toEqual('#!/client/index');
});
it('should now search again for the user Petter Parker', async() => {
const resultCount = await nightmare
.write(selectors.clientsIndex.searchClientInput, 'Petter Parker')
.waitToClick(selectors.clientsIndex.searchButton)
.waitForNumberOfElements(selectors.clientsIndex.searchResult, 1)
.countElement(selectors.clientsIndex.searchResult);
expect(resultCount).toEqual(1);
});
it(`should click on the search result to access to the Petter Parkers fiscal data`, async() => {
const url = await nightmare
.waitForTextInElement(selectors.clientsIndex.searchResult, 'Petter Parker')
.waitToClick(selectors.clientsIndex.searchResult)
.waitToClick(selectors.clientFiscalData.fiscalDataButton)
.waitForURL('fiscal-data')
.parsedUrl();
expect(url.hash).toContain('fiscal-data');
});
it(`should click on the fiscal data button`, async() => {
const url = await nightmare
.waitToClick(selectors.clientFiscalData.fiscalDataButton)
.waitForURL('fiscal-data')
.parsedUrl();
expect(url.hash).toContain('fiscal-data');
.loginAndModule('salesAssistant', 'client')
.accessToSearchResult('Hank Pym')
.accessToSection('client.card.fiscalData');
});
it('should confirm verified data button is enabled for salesAssistant', async() => {
const result = await nightmare
.wait(selectors.clientFiscalData.verifiedDataCheckbox)
const isDisabled = await nightmare
.waitForClassPresent(selectors.clientFiscalData.verifiedDataCheckbox, 'md-checked')
.evaluate(selector => {
return document.querySelector(selector).getAttribute('disabled');
return document.querySelector(selector).getAttribute('aria-disabled');
}, selectors.clientFiscalData.verifiedDataCheckbox);
expect(result).toBeFalsy();
expect(isDisabled).toEqual('false');
});
it('should now edit the social name', async() => {
const result = await nightmare
.clearInput(selectors.clientFiscalData.socialNameInput)
.write(selectors.clientFiscalData.socialNameInput, 'salesAssistant was here')
.write(selectors.clientFiscalData.socialNameInput, 'new social name edition')
.waitToClick(selectors.clientFiscalData.saveButton)
.waitForLastSnackbar();
@ -278,65 +161,26 @@ describe('Client lock verified data path', () => {
.reloadSection('client.card.fiscalData')
.waitToGetProperty(selectors.clientFiscalData.socialNameInput, 'value');
expect(result).toEqual('salesAssistant was here');
expect(result).toEqual('new social name edition');
});
});
describe('as salesPerson third run', () => {
beforeAll(() => {
nightmare
.waitForLogin('salesPerson');
});
it('should now click on the Clients button of the top bar menu', async() => {
const url = await nightmare
.waitToClick(selectors.globalItems.applicationsMenuButton)
.wait(selectors.globalItems.applicationsMenuVisible)
.waitToClick(selectors.globalItems.clientsButton)
.wait(selectors.clientsIndex.createClientButton)
.parsedUrl();
expect(url.hash).toEqual('#!/client/index');
});
it('should once again search for the user Petter Parker', async() => {
const resultCount = await nightmare
.write(selectors.clientsIndex.searchClientInput, 'Petter Parker')
.waitToClick(selectors.clientsIndex.searchButton)
.waitForNumberOfElements(selectors.clientsIndex.searchResult, 1)
.countElement(selectors.clientsIndex.searchResult);
expect(resultCount).toEqual(1);
});
it(`should click on the search result to access to the client's fiscal data`, async() => {
const url = await nightmare
.waitForTextInElement(selectors.clientsIndex.searchResult, 'Petter Parker')
.waitToClick(selectors.clientsIndex.searchResult)
.waitToClick(selectors.clientFiscalData.fiscalDataButton)
.waitForURL('fiscal-data')
.parsedUrl();
expect(url.hash).toContain('fiscal-data');
});
it(`should click on the fiscal data button to start editing`, async() => {
const url = await nightmare
.waitToClick(selectors.clientFiscalData.fiscalDataButton)
.waitForURL('fiscal-data')
.parsedUrl();
expect(url.hash).toContain('fiscal-data');
.loginAndModule('salesPerson', 'client')
.accessToSearchResult('Hank Pym')
.accessToSection('client.card.fiscalData');
});
it('should confirm verified data button is enabled once again', async() => {
const result = await nightmare
.wait(selectors.clientFiscalData.verifiedDataCheckbox)
const isChecked = await nightmare
.waitForClassPresent(selectors.clientFiscalData.verifiedDataCheckbox, 'md-checked')
.evaluate(selector => {
return document.querySelector(selector).getAttribute('disabled');
}, selectors.clientFiscalData.verifiedDataCheckbox);
expect(result).toBeTruthy();
expect(isChecked).toBeTruthy();
});
it('should confirm the form is enabled for salesPerson', async() => {

View File

@ -12,7 +12,7 @@ describe('Ticket descriptor path', () => {
describe('Delete ticket', () => {
it('should search for an specific ticket', async() => {
const result = await nightmare
.write(selectors.ticketsIndex.searchTicketInput, 17)
.write(selectors.ticketsIndex.searchTicketInput, 18)
.waitToClick(selectors.ticketsIndex.searchButton)
.waitForNumberOfElements(selectors.ticketsIndex.searchResult, 1)
.countElement(selectors.ticketsIndex.searchResult);
@ -22,7 +22,7 @@ describe('Ticket descriptor path', () => {
it(`should click on the search result to access to the ticket summary`, async() => {
const url = await nightmare
.waitForTextInElement(selectors.ticketsIndex.searchResult, 'Your pocket')
.waitForTextInElement(selectors.ticketsIndex.searchResult, 'Cerebro')
.waitToClick(selectors.ticketsIndex.searchResult)
.waitForURL('/summary')
.parsedUrl();
@ -49,7 +49,7 @@ describe('Ticket descriptor path', () => {
it(`should search for the deleted ticket and check it's date`, async() => {
const result = await nightmare
.write(selectors.ticketsIndex.searchTicketInput, 17)
.write(selectors.ticketsIndex.searchTicketInput, 18)
.waitToClick(selectors.ticketsIndex.searchButton)
.waitForNumberOfElements(selectors.ticketsIndex.searchResult, 1)
.wait(selectors.ticketsIndex.searchResultDate)
@ -63,7 +63,7 @@ describe('Ticket descriptor path', () => {
it('should search for a ticket', async() => {
const result = await nightmare
.clearInput(selectors.ticketsIndex.searchTicketInput)
.write(selectors.ticketsIndex.searchTicketInput, 20)
.write(selectors.ticketsIndex.searchTicketInput, 16)
.waitToClick(selectors.ticketsIndex.searchButton)
.waitForNumberOfElements(selectors.ticketsIndex.searchResult, 1)
.countElement(selectors.ticketsIndex.searchResult);
@ -73,7 +73,7 @@ describe('Ticket descriptor path', () => {
it(`should now click on the search result to access to the ticket summary`, async() => {
const url = await nightmare
.waitForTextInElement(selectors.ticketsIndex.searchResult, 'Somewhere in Thailand')
.waitForTextInElement(selectors.ticketsIndex.searchResult, 'Many Places')
.waitToClick(selectors.ticketsIndex.searchResult)
.waitForURL('/summary')
.parsedUrl();
@ -104,29 +104,29 @@ describe('Ticket descriptor path', () => {
const url = await nightmare
.waitToClick(selectors.ticketDescriptor.closeStowawayDialog)
.waitToClick(selectors.ticketDescriptor.shipButton)
.waitForURL('#!/ticket/19/summary')
.waitForURL('#!/ticket/17/summary')
.parsedUrl();
expect(url.hash).toContain('#!/ticket/19/summary');
expect(url.hash).toContain('#!/ticket/17/summary');
});
it(`should navigate to the ship ticket using the descriptors ship button`, async() => {
const url = await nightmare
.waitToClick(selectors.ticketDescriptor.shipButton)
.waitForURL('#!/ticket/20/summary')
.waitForURL('#!/ticket/16/summary')
.parsedUrl();
expect(url.hash).toContain('#!/ticket/20/summary');
expect(url.hash).toContain('#!/ticket/16/summary');
});
it(`should navigate back to the added ticket using the descriptors ship button`, async() => {
const url = await nightmare
.waitToClick(selectors.ticketDescriptor.closeStowawayDialog)
.waitToClick(selectors.ticketDescriptor.shipButton)
.waitForURL('#!/ticket/19/summary')
.waitForURL('#!/ticket/17/summary')
.parsedUrl();
expect(url.hash).toContain('#!/ticket/19/summary');
expect(url.hash).toContain('#!/ticket/17/summary');
});
it('should delete the stowaway', async() => {
@ -149,7 +149,7 @@ describe('Ticket descriptor path', () => {
describe('Make invoice', () => {
it('should login as adminBoss role then search for a ticket', async() => {
const invoiceableTicketId = 18;
const invoiceableTicketId = 14;
const url = await nightmare
.loginAndModule('adminBoss', 'ticket')

View File

@ -7,6 +7,6 @@ describe('Client get', () => {
expect(result.id).toEqual(101);
expect(result.name).toEqual('Bruce Wayne');
expect(result.debt).toEqual(-111.86);
expect(result.debt).toEqual(-101.85);
});
});

View File

@ -4,7 +4,7 @@ describe('client getDebt()', () => {
it('should return the client debt', async() => {
let result = await app.models.Client.getDebt(101);
expect(result.debt).toEqual(-111.86);
expect(result.debt).toEqual(-101.85);
});
});

View File

@ -17,7 +17,7 @@ describe('client summary()', () => {
it('should return a summary object containing debt', async() => {
let result = await app.models.Client.summary(101);
expect(result.debt.debt).toEqual(-111.86);
expect(result.debt.debt).toEqual(-101.85);
});
it('should return a summary object containing averageInvoiced', async() => {

View File

@ -2,37 +2,35 @@ const app = require('vn-loopback/server/server');
describe('invoiceOut delete()', () => {
const invoiceOutId = 2;
let OriginalInvoiceOut;
let OriginalTickets;
let originalInvoiceOut;
let originalTicket;
afterAll(async done => {
const newInvoiceOut = await app.models.InvoiceOut.create(OriginalInvoiceOut);
await newInvoiceOut.updateAttribute('ref', OriginalInvoiceOut.ref);
const newInvoiceOut = await app.models.InvoiceOut.create(originalInvoiceOut);
await newInvoiceOut.updateAttribute('ref', originalInvoiceOut.ref);
const promises = [];
OriginalTickets.forEach(ticket => {
promises.push(ticket.updateAttribute('refFk', newInvoiceOut.ref));
});
promises.push(originalTicket.updateAttribute('refFk', newInvoiceOut.ref));
Promise.all(promises);
done();
});
it('should check that there is two tickets from the invoice id 2', async() => {
it('should check that there is one ticket in the target invoiceOut', async() => {
const invoiceOut = await app.models.InvoiceOut.findById(invoiceOutId);
const tickets = await app.models.Ticket.find({where: {refFk: invoiceOut.ref}});
expect(tickets.length).toEqual(2);
expect(tickets[0].id).toEqual(2);
expect(tickets.length).toEqual(1);
expect(tickets[0].id).toEqual(3);
});
it(`should check the two tickets from the invoice id 2 that are not invoiced`, async() => {
OriginalInvoiceOut = await app.models.InvoiceOut.findById(invoiceOutId);
it(`should delete the target invoiceOut then check the ticket doesn't have a refFk anymore`, async() => {
originalInvoiceOut = await app.models.InvoiceOut.findById(invoiceOutId);
await app.models.InvoiceOut.delete(invoiceOutId);
OriginalTickets = await app.models.Ticket.find({where: {id: {inq: [2, 3]}}});
const invoiceOut = await app.models.InvoiceOut.findById(invoiceOutId);
originalTicket = await app.models.Ticket.findById(3);
const deletedInvoiceOut = await app.models.InvoiceOut.findById(invoiceOutId);
expect(OriginalTickets[0].refFk).toBeNull();
expect(OriginalTickets[1].refFk).toBeNull();
expect(invoiceOut).toBeNull();
expect(deletedInvoiceOut).toBeNull();
expect(originalTicket.refFk).toBeNull();
});
});

View File

@ -58,8 +58,8 @@ describe('InvoiceOut filter()', () => {
it('should return the invoice out matching min and max', async() => {
let ctx = {
args: {
min: 20.10,
max: 200,
min: 100,
max: 300,
}
};

View File

@ -8,26 +8,26 @@ describe('invoiceOut summary()', () => {
});
it(`should return a summary object containing data from it's tickets`, async() => {
const result = await app.models.InvoiceOut.summary(1);
const tickets = result.invoiceOut.tickets();
const summary = await app.models.InvoiceOut.summary(1);
const tickets = summary.invoiceOut.tickets();
expect(result.invoiceOut.ref).toEqual('T1111111');
expect(tickets.length).toEqual(1);
expect(summary.invoiceOut.ref).toEqual('T1111111');
expect(tickets.length).toEqual(2);
});
it(`should return a summary object containing it's supplier country`, async() => {
const result = await app.models.InvoiceOut.summary(1);
const supplier = result.invoiceOut.supplier();
const summary = await app.models.InvoiceOut.summary(1);
const supplier = summary.invoiceOut.supplier();
expect(result.invoiceOut.ref).toEqual('T1111111');
expect(summary.invoiceOut.ref).toEqual('T1111111');
expect(supplier.id).toEqual(442);
expect(supplier.countryFk).toEqual(1);
});
it(`should return a summary object containing idata from it's tax types`, async() => {
const result = await app.models.InvoiceOut.summary(1);
const summary = await app.models.InvoiceOut.summary(1);
expect(result.invoiceOut.ref).toEqual('T1111111');
expect(result.invoiceOut.taxesBreakdown.length).toEqual(2);
expect(summary.invoiceOut.ref).toEqual('T1111111');
expect(summary.invoiceOut.taxesBreakdown.length).toEqual(2);
});
});

View File

@ -51,7 +51,7 @@ describe('Route filter()', () => {
let result = await app.models.Route.filter(ctx);
expect(result.length).toEqual(2);
expect(result.length).toEqual(4);
});
it('should return the routes matching "description"', async() => {

View File

@ -7,18 +7,18 @@ describe('sale priceDifference()', () => {
tomorrow.setDate(tomorrow.getDate() + 1);
let data = {
landed: tomorrow,
addressFk: 121,
addressFk: 122,
agencyModeFk: 7,
warehouseFk: 1
};
let result = await app.models.Sale.priceDifference(11, data);
expect(result.totalUnitPrice).toEqual(4.03);
expect(result.totalUnitPrice).toEqual(4.13);
expect(result.totalNewPrice).toEqual(4.13);
expect(result.totalDifference).toEqual(0);
});
it('should return an error if the ticket state is not valid for modifications', async() => {
it('should return an error if the ticket is not editable', async() => {
let error;
let data = {
landed: new Date(),
@ -35,4 +35,3 @@ describe('sale priceDifference()', () => {
expect(error).toEqual(new UserError(`The sales of this ticket can't be modified`));
});
});

View File

@ -5,22 +5,26 @@ describe('sale updatePrice()', () => {
let originalSalesPersonMana;
let createdSaleComponent;
let saleId = 7;
afterAll(async done => {
await originalSale.save();
await app.models.SaleComponent.updateAll({componentFk: 37, saleFk: saleId}, {value: 0});
await originalSalesPersonMana.save();
done();
});
let manaComponentId;
beforeAll(async done => {
let componentRate = await app.models.ComponentRate.findOne({where: {code: 'mana'}});
manaComponentId = componentRate.id;
originalSale = await app.models.Sale.findById(saleId);
originalSalesPersonMana = await app.models.WorkerMana.findById(18);
done();
});
afterAll(async done => {
await originalSale.save();
await app.models.SaleComponent.updateAll({componentFk: manaComponentId, saleFk: saleId}, {value: 0});
await originalSalesPersonMana.save();
done();
});
it('should throw an error if the ticket is not editable', async() => {
let immutableSaleId = 1;
let price = 5;
@ -54,14 +58,13 @@ describe('sale updatePrice()', () => {
it('should set price as a decimal number and check the sale has the mana component', async() => {
let price = 5.5;
let manaComponentId = 37;
await app.models.Sale.updatePrice(saleId, price);
let saleUpdated = await app.models.Sale.findById(saleId);
createdSaleComponent = await app.models.SaleComponent.findOne({where: {saleFk: saleId, componentFk: manaComponentId}});
expect(saleUpdated.price).toEqual(5.5);
expect(createdSaleComponent.value).toEqual(4.48);
expect(createdSaleComponent.value).toEqual(4.43);
});
it('should check that the mana of salesPerson changed', async() => {

View File

@ -26,20 +26,20 @@ module.exports = function(Self) {
Self.makeInvoice = async(ctx, id) => {
let userId = ctx.req.accessToken.userId;
let $ = Self.app.models;
let models = Self.app.models;
let tx = await Self.beginTransaction({});
try {
let options = {transaction: tx};
let filter = {fields: ['id', 'clientFk', 'companyFk']};
let ticket = await $.Ticket.findById(id, filter, options);
let ticket = await models.Ticket.findById(id, filter, options);
let clientCanBeInvoiced = await $.Client.canBeInvoiced(ticket.clientFk);
let clientCanBeInvoiced = await models.Client.canBeInvoiced(ticket.clientFk);
if (!clientCanBeInvoiced)
throw new UserError(`This client can't be invoiced`);
let ticketCanBeInvoiced = await $.Ticket.canBeInvoiced(ticket.id);
let ticketCanBeInvoiced = await models.Ticket.canBeInvoiced(ticket.id);
if (!ticketCanBeInvoiced)
throw new UserError(`This ticket can't be invoiced`);
@ -64,7 +64,7 @@ module.exports = function(Self) {
await Self.rawSql(query, [invoice], options);
}
let user = await $.Worker.findOne({where: {userFk: userId}}, options);
let user = await models.Worker.findOne({where: {userFk: userId}}, options);
query = `INSERT INTO printServerQueue(reportFk, param1, workerFk) VALUES (?, ?, ?)`;
await Self.rawSql(query, [3, invoice, user.id], options);

View File

@ -22,8 +22,8 @@ module.exports = Self => {
});
Self.new = async(ctx, params, options) => {
let $ = Self.app.models;
let address = await $.Address.findOne({
let models = Self.app.models;
let address = await models.Address.findOne({
where: {id: params.addressFk},
fields: ['id', 'clientFk'],
include: [
@ -42,7 +42,7 @@ module.exports = Self => {
let agencyMode;
if (params && params.agencyModeFk)
agencyMode = await $.AgencyMode.findById(params.agencyModeFk);
agencyMode = await models.AgencyMode.findById(params.agencyModeFk);
if (address.client().type().code === 'normal' && (!agencyMode || agencyMode.code != 'refund')) {
if (address.client().isFreezed)
@ -64,7 +64,7 @@ module.exports = Self => {
try {
if (!params.shipped && params.landed) {
params.shipped = await $.Agency.getShipped(ctx, {
params.shipped = await models.Agency.getShipped(ctx, {
landed: params.landed,
addressFk: address.id,
agencyModeFk: params.agencyModeFk,
@ -73,7 +73,7 @@ module.exports = Self => {
}
if (params.shipped && !params.landed) {
const landedResult = await $.Agency.getLanded(ctx, {
const landedResult = await models.Agency.getLanded(ctx, {
shipped: params.shipped,
addressFk: address.id,
agencyModeFk: params.agencyModeFk,
@ -99,7 +99,7 @@ module.exports = Self => {
params.userId
], options);
let ticket = await $.Ticket.findById(result[1][0].newTicketId, null, options);
let ticket = await models.Ticket.findById(result[1][0].newTicketId, null, options);
let cleanInstance = JSON.parse(JSON.stringify(ticket));
let logRecord = {
@ -112,7 +112,7 @@ module.exports = Self => {
newInstance: cleanInstance
};
await $.TicketLog.create(logRecord, options);
await models.TicketLog.create(logRecord, options);
if (tx) await tx.commit();
return await ticket;

View File

@ -1,19 +1,23 @@
const app = require('vn-loopback/server/server');
describe('ticket componentUpdate()', () => {
let firstvalueBeforeChange;
let secondvalueBeforeChange;
let componentOfSaleSeven = `SELECT value FROM vn.saleComponent
WHERE saleFk = 7 AND componentFk = 15`;
let componentOfSaleEight = `SELECT value FROM vn.saleComponent
WHERE saleFk = 8 AND componentFk = 15`;
const ticketId = 11;
const today = new Date();
const tomorrow = new Date();
tomorrow.setDate(tomorrow.getDate() + 1);
let ticketId = 11;
let deliveryComponentId;
let firstvalueBeforeChange;
let secondvalueBeforeChange;
let componentOfSaleSeven;
let componentOfSaleEight;
beforeAll(async done => {
let deliveryComponenet = await app.models.ComponentRate.findOne({where: {code: 'delivery'}});
deliveryComponentId = deliveryComponenet.id;
componentOfSaleSeven = `SELECT value FROM vn.saleComponent WHERE saleFk = 7 AND componentFk = ${deliveryComponentId}`;
componentOfSaleEight = `SELECT value FROM vn.saleComponent WHERE saleFk = 8 AND componentFk = ${deliveryComponentId}`;
[componentValue] = await app.models.SaleComponent.rawSql(componentOfSaleSeven);
firstvalueBeforeChange = componentValue.value;
@ -25,9 +29,9 @@ describe('ticket componentUpdate()', () => {
it('should change the agencyMode to modify the sale components value', async() => {
let data = {
clientFk: 101,
clientFk: 102,
agencyModeFk: 8,
addressFk: 121,
addressFk: 122,
warehouseFk: 1,
companyFk: 442,
shipped: today,
@ -53,9 +57,9 @@ describe('ticket componentUpdate()', () => {
it('should change the agencyMode to go back to the originals sale components value', async() => {
let data = {
clientFk: 101,
clientFk: 102,
agencyModeFk: 7,
addressFk: 121,
addressFk: 122,
warehouseFk: 1,
companyFk: 442,
shipped: today,

View File

@ -1,25 +1,25 @@
const app = require('vn-loopback/server/server');
describe('ticket isEditable()', () => {
it('should return false if the ticket given is not editable', async() => {
it('should return false if the given ticket is not editable', async() => {
let result = await app.models.Ticket.isEditable(2);
expect(result).toEqual(false);
});
it('should return false if the ticket given does not exist', async() => {
it('should return false if the given ticket does not exist', async() => {
let result = await app.models.Ticket.isEditable(99999);
expect(result).toEqual(false);
});
it('should return false if the ticket given isDeleted', async() => {
let result = await app.models.Ticket.isEditable(21);
it('should return false if the given ticket isDeleted', async() => {
let result = await app.models.Ticket.isEditable(19);
expect(result).toEqual(false);
});
it('should return true if the ticket given is editable', async() => {
it('should return true if the given ticket is editable', async() => {
let result = await app.models.Ticket.isEditable(16);
expect(result).toEqual(true);

View File

@ -2,6 +2,7 @@ const app = require('vn-loopback/server/server');
describe('ticket makeInvoice()', () => {
let invoice;
let ticketId = 11;
afterAll(async done => {
let ticket = await app.models.Ticket.findById(11);
@ -18,8 +19,7 @@ describe('ticket makeInvoice()', () => {
it('should invoice a ticket', async() => {
let ctx = {req: {accessToken: {userId: 9}}};
let ticketFk = 11;
invoice = await app.models.Ticket.makeInvoice(ctx, ticketFk);
invoice = await app.models.Ticket.makeInvoice(ctx, ticketId);
expect(invoice.invoiceFk).not.toBeNaN();
expect(invoice.serial).toEqual('T');
@ -27,10 +27,9 @@ describe('ticket makeInvoice()', () => {
it('should not invoice an already invoiced ticket', async() => {
let ctx = {req: {accessToken: {userId: 9}}};
let ticketFk = 11;
let error;
await app.models.Ticket.makeInvoice(ctx, ticketFk).catch(e => {
await app.models.Ticket.makeInvoice(ctx, ticketId).catch(e => {
error = e;
}).finally(() => {
expect(error.message).toEqual(`This ticket can't be invoiced`);

View File

@ -20,7 +20,7 @@ module.exports = Self => {
Self.threeLastActive = async params => {
let query = `
SELECT t.id,t.shipped,a.name AS agencyName,w.name AS warehouseName
SELECT t.id, t.shipped, a.name AS agencyName, w.name AS warehouseName
FROM vn.ticket t
JOIN vn.ticketState ts ON t.id = ts.ticketFk
JOIN vn.agencyMode a ON t.agencyModeFk = a.id