diff --git a/README.md b/README.md index 30f05b384..a8df77f6a 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,10 @@ npm run testWatch or test for single run on root run: +gulp docker + +wait 10 secs for db to be ready + npm run e2e ## Built With diff --git a/e2e/helpers/extensions.js b/e2e/helpers/extensions.js index b4359098f..6ace6673d 100644 --- a/e2e/helpers/extensions.js +++ b/e2e/helpers/extensions.js @@ -8,16 +8,13 @@ function child(selector, childNumber) { } Nightmare.action('login', function(done) { - try { - this.goto(`${config.url}auth/?apiKey=salix`) - .wait(selectors.login.textFieldInput) - .write(`${child(selectors.login.textFieldInput, 1)}`, 'JessicaJones') - .write(`${child(selectors.login.textFieldInput, 2)}`, 'nightmare') - .click(selectors.login.submitButton) - .then(done); - } catch (err) { - console.log(err); - } + this.goto(`${config.url}auth/?apiKey=salix`) + .wait(selectors.login.textFieldInput) + .write(`${child(selectors.login.textFieldInput, 1)}`, 'JessicaJones') + .write(`${child(selectors.login.textFieldInput, 2)}`, 'nightmare') + .click(selectors.login.submitButton) + .wait(1000) // should create an extension like: https://github.com/segmentio/nightmare/issues/481 to wait for dom to be ready. + .then(done); }); Nightmare.action('getInnerText', function(selector, done) { @@ -27,6 +24,13 @@ Nightmare.action('getInnerText', function(selector, done) { }, done, selector); }); +Nightmare.action('getInputValue', function(selector, done) { + this.wait(selector) + .evaluate_now(function(elementToSelect) { + return document.querySelectorAll(elementToSelect)[0].value; + }, done, selector); +}); + Nightmare.action('clearInput', function(selector, done) { let backSpaces = []; for (let i = 0; i < 50; i += 1) { @@ -116,6 +120,13 @@ Nightmare.action('waitForNumberOfElements', function(selector, count, done) { .then(done); }); +Nightmare.action('waitForTextInElement', function(selector, name, done) { + this.wait((resultSelector, expectedName) => { + return document.querySelectorAll(resultSelector)[0].innerText.toLowerCase().includes(expectedName.toLowerCase()); + }, selector, name) + .then(done); +}); + Nightmare.action('waitForSnackbarReset', function(done) { this.wait(() => { return document.querySelector('vn-snackbar').innerText === ''; @@ -124,7 +135,6 @@ Nightmare.action('waitForSnackbarReset', function(done) { }); Nightmare.action('waitForURL', function(hashURL, done) { - this.wait(200); this.wait(hash => { return document.location.hash.includes(hash); }, hashURL) diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js index 0ef70177f..c4deb0d94 100644 --- a/e2e/helpers/selectors.js +++ b/e2e/helpers/selectors.js @@ -30,5 +30,27 @@ export default { userName: 'body > vn-app > vn-vertical > vn-vertical > vn-client-create > form > div > vn-card > div > vn-vertical > vn-horizontal:nth-child(3) > vn-textfield:nth-child(2) > div > input', email: 'body > vn-app > vn-vertical > vn-vertical > vn-client-create > form > div > vn-card > div > vn-vertical > vn-horizontal:nth-child(4) > vn-textfield > div > input', createButton: 'body > vn-app > vn-vertical > vn-vertical > vn-client-create > form > div > vn-button-bar > vn-button > button' + }, + basicData: { + basicDataButton: 'body > vn-app > vn-vertical > vn-vertical > vn-client-card > vn-horizontal > vn-empty > vn-left-menu > vn-card > div > vn-vertical > vn-actions > vn-horizontal > ul > vn-menu-item:nth-child(1) > li > a', + nameInput: 'body > vn-app > vn-vertical > vn-vertical > vn-client-card > vn-horizontal > vn-auto > vn-vertical > vn-client-basic-data > form > vn-card > div > vn-vertical > vn-horizontal:nth-child(2) > vn-textfield:nth-child(1) > div > input', + taxNumberInput: 'body > vn-app > vn-vertical > vn-vertical > vn-client-card > vn-horizontal > vn-auto > vn-vertical > vn-client-basic-data > form > vn-card > div > vn-vertical > vn-horizontal:nth-child(2) > vn-textfield:nth-child(2) > div > input', + socialNameInput: 'body > vn-app > vn-vertical > vn-vertical > vn-client-card > vn-horizontal > vn-auto > vn-vertical > vn-client-basic-data > form > vn-card > div > vn-vertical > vn-horizontal:nth-child(2) > vn-textfield:nth-child(3) > div > input', + phoneInput: 'body > vn-app > vn-vertical > vn-vertical > vn-client-card > vn-horizontal > vn-auto > vn-vertical > vn-client-basic-data > form > vn-card > div > vn-vertical > vn-horizontal:nth-child(3) > vn-textfield:nth-child(1) > div > input', + mobileInput: 'body > vn-app > vn-vertical > vn-vertical > vn-client-card > vn-horizontal > vn-auto > vn-vertical > vn-client-basic-data > form > vn-card > div > vn-vertical > vn-horizontal:nth-child(3) > vn-textfield:nth-child(2) > div > input', + faxInput: 'body > vn-app > vn-vertical > vn-vertical > vn-client-card > vn-horizontal > vn-auto > vn-vertical > vn-client-basic-data > form > vn-card > div > vn-vertical > vn-horizontal:nth-child(3) > vn-textfield:nth-child(3) > div > input', + emailInput: 'body > vn-app > vn-vertical > vn-vertical > vn-client-card > vn-horizontal > vn-auto > vn-vertical > vn-client-basic-data > form > vn-card > div > vn-vertical > vn-horizontal:nth-child(4) > vn-textfield > div > input', + salesPersonInput: 'body > vn-app > vn-vertical > vn-vertical > vn-client-card > vn-horizontal > vn-auto > vn-vertical > vn-client-basic-data > form > vn-card > div > vn-vertical > vn-horizontal:nth-child(4) > vn-autocomplete:nth-child(2) > vn-vertical > vn-textfield > div > input', + channelInput: 'body > vn-app > vn-vertical > vn-vertical > vn-client-card > vn-horizontal > vn-auto > vn-vertical > vn-client-basic-data > form > vn-card > div > vn-vertical > vn-horizontal:nth-child(4) > vn-autocomplete:nth-child(3) > vn-vertical > vn-textfield > div > input', + channelMetropolisOption: 'body > vn-app > vn-vertical > vn-vertical > vn-client-card > vn-horizontal > vn-auto > vn-vertical > vn-client-basic-data > form > vn-card > div > vn-vertical > vn-horizontal:nth-child(4) > vn-autocomplete:nth-child(3) > vn-vertical > vn-drop-down > vn-vertical > vn-one:nth-child(2) > ul > li:nth-child(3)', + saveButton: 'body > vn-app > vn-vertical > vn-vertical > vn-client-card > vn-horizontal > vn-auto > vn-vertical > vn-client-basic-data > form > vn-button-bar > vn-submit > input' + }, + fiscalData: { + fiscalDataButton: 'body > vn-app > vn-vertical > vn-vertical > vn-client-card > vn-horizontal > vn-empty > vn-left-menu > vn-card > div > vn-vertical > vn-actions > vn-horizontal > ul > vn-menu-item:nth-child(2) > li > a', + addressInput: 'body > vn-app > vn-vertical > vn-vertical > vn-client-card > vn-horizontal > vn-auto > vn-vertical > vn-client-fiscal-data > form > vn-card > div > vn-vertical > vn-horizontal:nth-child(3) > vn-textfield:nth-child(1) > div > input', + hastToInvoiceCheckboxLabel: 'body > vn-app > vn-vertical > vn-vertical > vn-client-card > vn-horizontal > vn-auto > vn-vertical > vn-client-fiscal-data > form > vn-card > div > vn-vertical > vn-horizontal:nth-child(2) > vn-one:nth-child(1) > vn-check > label', + hastToInvoiceCheckboxInput: 'body > vn-app > vn-vertical > vn-vertical > vn-client-card > vn-horizontal > vn-auto > vn-vertical > vn-client-fiscal-data > form > vn-card > div > vn-vertical > vn-horizontal:nth-child(2) > vn-one:nth-child(1) > vn-check > label > input', + invoiceByMailCheckbox: 'body > vn-app > vn-vertical > vn-vertical > vn-client-card > vn-horizontal > vn-auto > vn-vertical > vn-client-fiscal-data > form > vn-card > div > vn-vertical > vn-horizontal:nth-child(2) > vn-check:nth-child(2) > label > span.mdl-checkbox__ripple-container.mdl-js-ripple-effect.mdl-ripple--center', + saveButton: 'body > vn-app > vn-vertical > vn-vertical > vn-client-card > vn-horizontal > vn-auto > vn-vertical > vn-client-fiscal-data > form > vn-button-bar > vn-submit > input' } }; diff --git a/e2e/paths/create_client_path.spec.js b/e2e/paths/create_client_path.spec.js index f62513527..950757606 100644 --- a/e2e/paths/create_client_path.spec.js +++ b/e2e/paths/create_client_path.spec.js @@ -5,235 +5,217 @@ import {catchErrors} from '../../services/utils/jasmineHelpers'; const nightmare = createNightmare(); const moduleAccessViewHashURL = '#!/'; -describe('warm up', () => { - it('should warm up login and fixtures', done => { +describe('create client path', () => { + describe('warm up', () => { + it('should warm up login and fixtures', done => { + nightmare + .login() + .waitForURL(moduleAccessViewHashURL) + .waitToClick(selectors.globalItems.logOutButton) + .then(() => { + done(); + }) + .catch(catchErrors(done)); + }); + }); + + it('should log in', done => { nightmare .login() .waitForURL(moduleAccessViewHashURL) - .waitToClick(selectors.globalItems.logOutButton) - .then(() => { + .url() + .then(url => { + expect(url).toBe(config.url + moduleAccessViewHashURL); + done(); + }) + .catch(catchErrors(done)); + }); + + it('should access to the clients index by clicking the clients button', done => { + nightmare + .click(selectors.moduleAccessView.clientsSectionButton) + .wait(selectors.clientsIndex.createClientButton) + .url() + .then(url => { + expect(url).toBe(config.url + '#!/clients'); + done(); + }) + .catch(catchErrors(done)); + }); + + it(`should search for the user Carol Danvers to confirm it isn't created yet`, done => { + nightmare + .wait(selectors.clientsIndex.searchResult) + .type(selectors.clientsIndex.searchClientInput, 'Carol Danvers') + .click(selectors.clientsIndex.searchButton) + .waitForNumberOfElements(selectors.clientsIndex.searchResult, 0) + .countSearchResults(selectors.clientsIndex.searchResult) + .then(result => { + expect(result).toBe(0); + done(); + }) + .catch(catchErrors(done)); + }); + + it('should access to the create client view by clicking the create-client floating button', done => { + nightmare + .click(selectors.clientsIndex.createClientButton) + .wait(selectors.createClientView.createButton) + .url() + .then(url => { + expect(url).toBe(config.url + '#!/create'); + done(); + }) + .catch(catchErrors(done)); + }); + + it('should receive an error when clicking the create button having all the form fields empty', done => { + nightmare + .click(selectors.createClientView.createButton) + .wait(selectors.globalItems.snackbarIsActive) + .getInnerText(selectors.globalItems.snackbarIsActive) + .then(result => { + expect(result).toBe('No hay cambios que guardar'); + done(); + }) + .catch(catchErrors(done)); + }); + + it('should receive an error when clicking the create button having all the form fields empty but name', done => { + nightmare + .waitForSnackbarReset() + .type(selectors.createClientView.name, 'Carol Danvers') + .click(selectors.createClientView.createButton) + .wait(selectors.globalItems.snackbarIsActive) + .getInnerText(selectors.globalItems.snackbarIsActive) + .then(result => { + expect(result).toContain(`Error: La instancia`); + done(); + }) + .catch(catchErrors(done)); + }); + + it('should receive an error when clicking the create button having all the form fields empty but Tax Number', done => { + nightmare + .waitForSnackbarReset() + .clearInput(selectors.createClientView.name) + .type(selectors.createClientView.taxNumber, 'AVG tax') + .click(selectors.createClientView.createButton) + .wait(selectors.globalItems.snackbarIsActive) + .getInnerText(selectors.globalItems.snackbarIsActive) + .then(result => { + expect(result).toContain(`Error: La instancia`); + done(); + }) + .catch(catchErrors(done)); + }); + + it('should receive an error when clicking the create button having all the form fields empty but Business Name', done => { + nightmare + .waitForSnackbarReset() + .clearInput(selectors.createClientView.taxNumber) + .type(selectors.createClientView.businessName, 'Avengers team') + .click(selectors.createClientView.createButton) + .wait(selectors.globalItems.snackbarIsActive) + .getInnerText(selectors.globalItems.snackbarIsActive) + .then(result => { + expect(result).toContain(`Error: La instancia`); + done(); + }) + .catch(catchErrors(done)); + }); + + it('should receive an error when clicking the create button having all the form fields empty but User Name', done => { + nightmare + .waitForSnackbarReset() + .clearInput(selectors.createClientView.businessName) + .type(selectors.createClientView.userName, 'CaptainMarvel') + .click(selectors.createClientView.createButton) + .wait(selectors.globalItems.snackbarIsActive) + .getInnerText(selectors.globalItems.snackbarIsActive) + .then(result => { + expect(result).toContain(`Error: La instancia`); + done(); + }) + .catch(catchErrors(done)); + }); + + it('should receive an error when clicking the create button having all the form fields empty but email while email have incorrect format', done => { + nightmare + .waitForSnackbarReset() + .clearInput(selectors.createClientView.userName) + .type(selectors.createClientView.email, 'I will save the Avengers!') + .click(selectors.createClientView.createButton) + .wait(selectors.globalItems.snackbarIsActive) + .getInnerText(selectors.globalItems.snackbarIsActive) + .then(result => { + expect(result).toBe(`Algunos campos no son válidos`); + done(); + }) + .catch(catchErrors(done)); + }); + + it('should receive an error when clicking the create button having all the form fields empty but email', done => { + nightmare + .waitForSnackbarReset() + .clearInput(selectors.createClientView.email) + .type(selectors.createClientView.email, 'CarolDanvers@verdnatura.es') + .click(selectors.createClientView.createButton) + .wait(selectors.globalItems.snackbarIsActive) + .getInnerText(selectors.globalItems.snackbarIsActive) + .then(result => { + expect(result).toContain(`Error: La instancia`); + done(); + }) + .catch(catchErrors(done)); + }); + + it(`should create a new user with all it's data`, done => { + nightmare + .waitForSnackbarReset() + .wait(selectors.createClientView.email) + .clearInput(selectors.createClientView.email) + .type(selectors.createClientView.name, 'Carol Danvers') + .type(selectors.createClientView.taxNumber, 'Avengers Tax Number') + .type(selectors.createClientView.businessName, 'AVG tax') + .type(selectors.createClientView.userName, 'CaptainMarvel') + .type(selectors.createClientView.email, 'CarolDanvers@verdnatura.es') + .click(selectors.createClientView.createButton) + .wait(selectors.globalItems.snackbarIsActive) + .getInnerText(selectors.globalItems.snackbarIsActive) + .then(result => { + expect(result).toContain(`¡Datos guardados!`); + done(); + }) + .catch(catchErrors(done)); + }); + + it('should click on the Clients button of the top bar menu', done => { + nightmare + .waitToClick(selectors.globalItems.applicationsMenuButton) + .wait(selectors.globalItems.applicationsMenuVisible) + .waitToClick(selectors.globalItems.clientsButton) + .wait(selectors.clientsIndex.createClientButton) + .url() + .then(url => { + expect(url).toBe(config.url + '#!/clients'); + done(); + }) + .catch(catchErrors(done)); + }); + + it(`should search for the user Carol Danvers to confirm it exists`, done => { + nightmare + .wait(selectors.clientsIndex.searchResult) + .type(selectors.clientsIndex.searchClientInput, 'Carol Danvers') + .click(selectors.clientsIndex.searchButton) + .waitForNumberOfElements(selectors.clientsIndex.searchResult, 1) + .countSearchResults(selectors.clientsIndex.searchResult) + .then(result => { + expect(result).toBe(1); done(); }) .catch(catchErrors(done)); }); }); -describe('Clients path', () => { - describe('Create', () => { - it('should log in', done => { - nightmare - .login() - .waitForURL(moduleAccessViewHashURL) - .url() - .then(url => { - expect(url).toBe(config.url + moduleAccessViewHashURL); - done(); - }) - .catch(catchErrors(done)); - }); - - it('should access to the clients index by clicking the clients button', done => { - nightmare - .click(selectors.moduleAccessView.clientsSectionButton) - .wait(selectors.clientsIndex.createClientButton) - .url() - .then(url => { - expect(url).toBe(config.url + '#!/clients'); - done(); - }) - .catch(catchErrors(done)); - }); - - it(`should search for the user Carol Danvers to confirm it isn't created yet`, done => { - nightmare - .wait(selectors.clientsIndex.searchResult) - .type(selectors.clientsIndex.searchClientInput, 'Carol Danvers') - .click(selectors.clientsIndex.searchButton) - .waitForNumberOfElements(selectors.clientsIndex.searchResult, 0) - .countSearchResults(selectors.clientsIndex.searchResult) - .then(result => { - expect(result).toBe(0); - done(); - }) - .catch(catchErrors(done)); - }); - - it('should access to the create client view by clicking the create-client floating button', done => { - nightmare - .click(selectors.clientsIndex.createClientButton) - .wait(selectors.createClientView.createButton) - .url() - .then(url => { - expect(url).toBe(config.url + '#!/create'); - done(); - }) - .catch(catchErrors(done)); - }); - - it('should receive an error when clicking the create button having all the form fields empty', done => { - nightmare - .click(selectors.createClientView.createButton) - .wait(selectors.globalItems.snackbarIsActive) - .getInnerText(selectors.globalItems.snackbarIsActive) - .then(result => { - expect(result).toBe('No hay cambios que guardar'); - done(); - }) - .catch(catchErrors(done)); - }); - - it('should receive an error when clicking the create button having all the form fields empty but name', done => { - nightmare - .waitForSnackbarReset() - .type(selectors.createClientView.name, 'Carol Danvers') - .click(selectors.createClientView.createButton) - .wait(selectors.globalItems.snackbarIsActive) - .getInnerText(selectors.globalItems.snackbarIsActive) - .then(result => { - expect(result).toContain(`Error: La instancia`); - done(); - }) - .catch(catchErrors(done)); - }); - - it('should receive an error when clicking the create button having all the form fields empty but Tax Number', done => { - nightmare - .waitForSnackbarReset() - .clearInput(selectors.createClientView.name) - .type(selectors.createClientView.taxNumber, 'Avengers Tax Number') - .click(selectors.createClientView.createButton) - .wait(selectors.globalItems.snackbarIsActive) - .getInnerText(selectors.globalItems.snackbarIsActive) - .then(result => { - expect(result).toContain(`Error: La instancia`); - done(); - }) - .catch(catchErrors(done)); - }); - - it('should receive an error when clicking the create button having all the form fields empty but Business Name', done => { - nightmare - .waitForSnackbarReset() - .clearInput(selectors.createClientView.taxNumber) - .type(selectors.createClientView.businessName, 'Avengers team') - .click(selectors.createClientView.createButton) - .wait(selectors.globalItems.snackbarIsActive) - .getInnerText(selectors.globalItems.snackbarIsActive) - .then(result => { - expect(result).toContain(`Error: La instancia`); - done(); - }) - .catch(catchErrors(done)); - }); - - it('should receive an error when clicking the create button having all the form fields empty but User Name', done => { - nightmare - .waitForSnackbarReset() - .clearInput(selectors.createClientView.businessName) - .type(selectors.createClientView.userName, 'CaptainMarvel') - .click(selectors.createClientView.createButton) - .wait(selectors.globalItems.snackbarIsActive) - .getInnerText(selectors.globalItems.snackbarIsActive) - .then(result => { - expect(result).toContain(`Error: La instancia`); - done(); - }) - .catch(catchErrors(done)); - }); - - it('should receive an error when clicking the create button having all the form fields empty but email while email have incorrect format', done => { - nightmare - .waitForSnackbarReset() - .clearInput(selectors.createClientView.userName) - .type(selectors.createClientView.email, 'I will save the Avengers!') - .click(selectors.createClientView.createButton) - .wait(selectors.globalItems.snackbarIsActive) - .getInnerText(selectors.globalItems.snackbarIsActive) - .then(result => { - expect(result).toBe(`Algunos campos no son válidos`); - done(); - }) - .catch(catchErrors(done)); - }); - - it('should receive an error when clicking the create button having all the form fields empty but email', done => { - nightmare - .waitForSnackbarReset() - .clearInput(selectors.createClientView.email) - .type(selectors.createClientView.email, 'CarolDanvers@verdnatura.es') - .click(selectors.createClientView.createButton) - .wait(selectors.globalItems.snackbarIsActive) - .getInnerText(selectors.globalItems.snackbarIsActive) - .then(result => { - expect(result).toContain(`Error: La instancia`); - done(); - }) - .catch(catchErrors(done)); - }); - - // the below tests should be enabled when the e2e execution restores fixtures - - // it(`should create a new user with all it's data`, done => { - // nightmare - // .waitForSnackbarReset() - // .wait(selectors.createClientView.email) - // .clearInput(selectors.createClientView.email) - // .type(selectors.createClientView.name, 'Carol Danvers') - // .type(selectors.createClientView.taxNumber, 'Avengers Tax Number') - // .type(selectors.createClientView.businessName, 'Avengers Team') - // .type(selectors.createClientView.userName, 'CaptainMarvel') - // .type(selectors.createClientView.email, 'CarolDanvers@verdnatura.es') - // .click(selectors.createClientView.createButton) - // .wait(selectors.globalItems.snackbarIsActive) - // .getInnerText(selectors.globalItems.snackbarIsActive) - // .then(result => { - // expect(result).toContain(`¡Datos guardados!`); - // done(); - // }) - // .catch(catchErrors(done)); - // }); - }); - - describe('Index', () => { - // it('should click on the Clients button of the top bar menu', done => { - // nightmare - // .waitToClick(selectors.globalItems.applicationsMenuButton) - // .wait(selectors.globalItems.applicationsMenuVisible) - // .waitToClick(selectors.globalItems.clientsButton) - // .wait(selectors.clientsIndex.createClientButton) - // .url() - // .then(url => { - // expect(url).toBe(config.url + '#!/clients'); - // done(); - // }) - // .catch(catchErrors(done)); - // }); - - // it(`should search for the user Carol Danvers to confirm it exists`, done => { - // nightmare - // .wait(selectors.clientsIndex.searchResult) - // .type(selectors.clientsIndex.searchClientInput, 'Carol Danvers') - // .click(selectors.clientsIndex.searchButton) - // .waitForNumberOfElements(selectors.clientsIndex.searchResult, 1) - // .countSearchResults(selectors.clientsIndex.searchResult) - // .then(result => { - // expect(result).toBe(1); - // done(); - // }) - // .catch(catchErrors(done)); - // }); - - // it(`should click on the search result to access to the client's basic data`, done => { - // nightmare - // .waitForNumberOfElements(selectors.clientsIndex.searchResult, 1) - // .waitToClick(selectors.clientsIndex.searchResult) // this is targeting Bruce Wayne 1 of 10 times instead of Carol Danvers watchout for intermitence - // .waitForURL('basic-data') - // .url() - // .then(url => { - // expect(url).toContain('basic-data'); - // done(); - // }) - // .catch(catchErrors(done)); - // }); - }); -}); diff --git a/e2e/paths/edit_basic_data.spec.js b/e2e/paths/edit_basic_data.spec.js new file mode 100644 index 000000000..d8d79a9e9 --- /dev/null +++ b/e2e/paths/edit_basic_data.spec.js @@ -0,0 +1,328 @@ +import config from '../helpers/config.js'; +import createNightmare from '../helpers/nightmare'; +import selectors from '../helpers/selectors.js'; +import {catchErrors} from '../../services/utils/jasmineHelpers'; +const nightmare = createNightmare(); +const moduleAccessViewHashURL = '#!/'; + +describe('Edit basicData path', () => { + describe('warm up', () => { + it('should warm up login and fixtures', done => { + nightmare + .login() + .waitForURL(moduleAccessViewHashURL) + .waitToClick(selectors.globalItems.logOutButton) + .then(() => { + done(); + }) + .catch(catchErrors(done)); + }); + }); + + it('should log in', done => { + nightmare + .login() + .waitForURL(moduleAccessViewHashURL) + .url() + .then(url => { + expect(url).toBe(config.url + moduleAccessViewHashURL); + done(); + }) + .catch(catchErrors(done)); + }); + + it('should click on the Clients button of the top bar menu', done => { + nightmare + .waitToClick(selectors.globalItems.applicationsMenuButton) + .wait(selectors.globalItems.applicationsMenuVisible) + .waitToClick(selectors.globalItems.clientsButton) + .wait(selectors.clientsIndex.createClientButton) + .url() + .then(url => { + expect(url).toBe(config.url + '#!/clients'); + done(); + }) + .catch(catchErrors(done)); + }); + + it(`should search for the user Bruce Wayne`, done => { + nightmare + .wait(selectors.clientsIndex.searchResult) + .type(selectors.clientsIndex.searchClientInput, 'Bruce Wayne') + .click(selectors.clientsIndex.searchButton) + .waitForNumberOfElements(selectors.clientsIndex.searchResult, 1) + .countSearchResults(selectors.clientsIndex.searchResult) + .then(result => { + expect(result).toBe(1); + done(); + }) + .catch(catchErrors(done)); + }); + + it(`should click on the search result to access to the client's basic data`, done => { + nightmare + .waitForTextInElement(selectors.clientsIndex.searchResult, 'Bruce Wayne') + .waitToClick(selectors.clientsIndex.searchResult) + .waitForURL('basic-data') + .url() + .then(url => { + expect(url).toContain('basic-data'); + done(); + }) + .catch(catchErrors(done)); + }); + + it(`should edit the name`, done => { + nightmare + .wait(selectors.basicData.nameInput) + .clearInput(selectors.basicData.nameInput) + .type(selectors.basicData.nameInput, 'Carol Danvers Edited') + .click(selectors.basicData.saveButton) + .wait(selectors.globalItems.snackbarIsActive) + .getInnerText(selectors.globalItems.snackbarIsActive) + .then(result => { + expect(result).toBe(`¡Datos guardados!`); + done(); + }) + .catch(catchErrors(done)); + }); + + it(`should confirm the name have been edited`, done => { + nightmare + .waitForSnackbarReset() + .click(selectors.fiscalData.fiscalDataButton) + .wait(selectors.fiscalData.addressInput) + .click(selectors.basicData.basicDataButton) + .wait(selectors.basicData.nameInput) + .getInputValue(selectors.basicData.nameInput) + .then(result => { + expect(result).toBe(`Carol Danvers Edited`); + done(); + }) + .catch(catchErrors(done)); + }); + + it(`should edit the tax number`, done => { + nightmare + .wait(selectors.basicData.taxNumberInput) + .clearInput(selectors.basicData.taxNumberInput) + .type(selectors.basicData.taxNumberInput, 'AVG tax Edited') + .click(selectors.basicData.saveButton) + .wait(selectors.globalItems.snackbarIsActive) + .getInnerText(selectors.globalItems.snackbarIsActive) + .then(result => { + expect(result).toBe(`¡Datos guardados!`); + done(); + }) + .catch(catchErrors(done)); + }); + + it(`should confirm the tax number have been edited`, done => { + nightmare + .waitForSnackbarReset() + .click(selectors.fiscalData.fiscalDataButton) + .wait(selectors.fiscalData.addressInput) + .click(selectors.basicData.basicDataButton) + .wait(selectors.basicData.taxNumberInput) + .getInputValue(selectors.basicData.taxNumberInput) + .then(result => { + expect(result).toBe(`AVG tax Edited`); + done(); + }) + .catch(catchErrors(done)); + }); + + it(`should edit the social name`, done => { + nightmare + .wait(selectors.basicData.socialNameInput) + .clearInput(selectors.basicData.socialNameInput) + .type(selectors.basicData.socialNameInput, 'Avengers Team Edited') + .click(selectors.basicData.saveButton) + .wait(selectors.globalItems.snackbarIsActive) + .getInnerText(selectors.globalItems.snackbarIsActive) + .then(result => { + expect(result).toBe(`¡Datos guardados!`); + done(); + }) + .catch(catchErrors(done)); + }); + + it(`should confirm the social name have been edited`, done => { + nightmare + .waitForSnackbarReset() + .click(selectors.fiscalData.fiscalDataButton) + .wait(selectors.fiscalData.addressInput) + .click(selectors.basicData.basicDataButton) + .wait(selectors.basicData.socialNameInput) + .getInputValue(selectors.basicData.socialNameInput) + .then(result => { + expect(result).toBe(`Avengers Team Edited`); + done(); + }) + .catch(catchErrors(done)); + }); + + it(`should add the landline phone number`, done => { + nightmare + .wait(selectors.basicData.phoneInput) + .clearInput(selectors.basicData.phoneInput) + .type(selectors.basicData.phoneInput, '123456789') + .click(selectors.basicData.saveButton) + .wait(selectors.globalItems.snackbarIsActive) + .getInnerText(selectors.globalItems.snackbarIsActive) + .then(result => { + expect(result).toBe(`¡Datos guardados!`); + done(); + }) + .catch(catchErrors(done)); + }); + + it(`should confirm the landline phone number have been added`, done => { + nightmare + .waitForSnackbarReset() + .click(selectors.fiscalData.fiscalDataButton) + .wait(selectors.fiscalData.addressInput) + .click(selectors.basicData.basicDataButton) + .wait(selectors.basicData.phoneInput) + .getInputValue(selectors.basicData.phoneInput) + .then(result => { + expect(result).toBe('123456789'); + done(); + }) + .catch(catchErrors(done)); + }); + + it(`should add the mobile phone number`, done => { + nightmare + .wait(selectors.basicData.mobileInput) + .clearInput(selectors.basicData.mobileInput) + .type(selectors.basicData.mobileInput, '987654321') + .click(selectors.basicData.saveButton) + .wait(selectors.globalItems.snackbarIsActive) + .getInnerText(selectors.globalItems.snackbarIsActive) + .then(result => { + expect(result).toBe(`¡Datos guardados!`); + done(); + }) + .catch(catchErrors(done)); + }); + + it(`should confirm the mobile phone number have been added`, done => { + nightmare + .waitForSnackbarReset() + .click(selectors.fiscalData.fiscalDataButton) + .wait(selectors.fiscalData.addressInput) + .click(selectors.basicData.basicDataButton) + .wait(selectors.basicData.mobileInput) + .getInputValue(selectors.basicData.mobileInput) + .then(result => { + expect(result).toBe('987654321'); + done(); + }) + .catch(catchErrors(done)); + }); + + it(`should add the fax number`, done => { + nightmare + .wait(selectors.basicData.faxInput) + .clearInput(selectors.basicData.faxInput) + .type(selectors.basicData.faxInput, '432198765') + .click(selectors.basicData.saveButton) + .wait(selectors.globalItems.snackbarIsActive) + .getInnerText(selectors.globalItems.snackbarIsActive) + .then(result => { + expect(result).toBe(`¡Datos guardados!`); + done(); + }) + .catch(catchErrors(done)); + }); + + it(`should confirm the fax number have been added`, done => { + nightmare + .waitForSnackbarReset() + .click(selectors.fiscalData.fiscalDataButton) + .wait(selectors.fiscalData.addressInput) + .click(selectors.basicData.basicDataButton) + .wait(selectors.basicData.faxInput) + .getInputValue(selectors.basicData.faxInput) + .then(result => { + expect(result).toBe('432198765'); + done(); + }) + .catch(catchErrors(done)); + }); + + it(`should edit the email`, done => { + nightmare + .wait(selectors.basicData.emailInput) + .clearInput(selectors.basicData.emailInput) + .type(selectors.basicData.emailInput, 'CarolDanversEdited@verdnatura.es') + .click(selectors.basicData.saveButton) + .wait(selectors.globalItems.snackbarIsActive) + .getInnerText(selectors.globalItems.snackbarIsActive) + .then(result => { + expect(result).toBe(`¡Datos guardados!`); + done(); + }) + .catch(catchErrors(done)); + }); + + it(`should confirm the email have been edited`, done => { + nightmare + .waitForSnackbarReset() + .click(selectors.fiscalData.fiscalDataButton) + .wait(selectors.fiscalData.addressInput) + .click(selectors.basicData.basicDataButton) + .wait(selectors.basicData.emailInput) + .getInputValue(selectors.basicData.emailInput) + .then(result => { + expect(result).toBe('CarolDanversEdited@verdnatura.es'); + done(); + }) + .catch(catchErrors(done)); + }); + + // it(`should select the sales person`, done => { + // nightmare + // .wait(selectors.basicData.salesPersonInput) + // .select(selectors.basicData.salesPersonInput, '') // not working quite yet + // .click(selectors.basicData.saveButton) + // .wait(selectors.globalItems.snackbarIsActive) + // .getInnerText(selectors.globalItems.snackbarIsActive) + // .then(result => { + // expect(result).toBe(`¡Datos guardados!`); + // done(); + // }) + // .catch(catchErrors(done)); + // }); + + it(`should select the channel`, done => { + nightmare + .waitToClick(selectors.basicData.channelInput) + .waitToClick(selectors.basicData.channelInput) + .waitToClick(selectors.basicData.channelMetropolisOption) + .waitToClick(selectors.basicData.saveButton) + .wait(selectors.globalItems.snackbarIsActive) + .getInnerText(selectors.globalItems.snackbarIsActive) + .then(result => { + expect(result).toBe(`¡Datos guardados!`); + done(); + }) + .catch(catchErrors(done)); + }); + + it(`should confirm the channel have been selected`, done => { + nightmare + .waitForSnackbarReset() + .click(selectors.fiscalData.fiscalDataButton) + .wait(selectors.fiscalData.addressInput) + .click(selectors.basicData.basicDataButton) + .wait(100) + .getInputValue(selectors.basicData.channelInput) + .then(result => { + expect(result).toBe('Metropolis newspaper'); + done(); + }) + .catch(catchErrors(done)); + }); +}); diff --git a/e2e/paths/edit_fiscal_data.spec.js b/e2e/paths/edit_fiscal_data.spec.js new file mode 100644 index 000000000..32662eddd --- /dev/null +++ b/e2e/paths/edit_fiscal_data.spec.js @@ -0,0 +1,105 @@ +import config from '../helpers/config.js'; +import createNightmare from '../helpers/nightmare'; +import selectors from '../helpers/selectors.js'; +import {catchErrors} from '../../services/utils/jasmineHelpers'; +const nightmare = createNightmare(); +const moduleAccessViewHashURL = '#!/'; + +describe('Edit fiscalData path', () => { + describe('warm up', () => { + it('should warm up login and fixtures', done => { + nightmare + .login() + .waitForURL(moduleAccessViewHashURL) + .waitToClick(selectors.globalItems.logOutButton) + .then(() => { + done(); + }) + .catch(catchErrors(done)); + }); + }); + + it('should log in', done => { + nightmare + .login() + .waitForURL(moduleAccessViewHashURL) + .url() + .then(url => { + expect(url).toBe(config.url + moduleAccessViewHashURL); + done(); + }) + .catch(catchErrors(done)); + }); + + it('should click on the Clients button of the top bar menu', done => { + nightmare + .waitToClick(selectors.globalItems.applicationsMenuButton) + .wait(selectors.globalItems.applicationsMenuVisible) + .waitToClick(selectors.globalItems.clientsButton) + .wait(selectors.clientsIndex.createClientButton) + .url() + .then(url => { + expect(url).toBe(config.url + '#!/clients'); + done(); + }) + .catch(catchErrors(done)); + }); + + it(`should search for the user Bruce Banner`, done => { + nightmare + .wait(selectors.clientsIndex.searchResult) + .type(selectors.clientsIndex.searchClientInput, 'Bruce Banner') + .click(selectors.clientsIndex.searchButton) + .waitForNumberOfElements(selectors.clientsIndex.searchResult, 1) + .countSearchResults(selectors.clientsIndex.searchResult) + .then(result => { + expect(result).toBe(1); + done(); + }) + .catch(catchErrors(done)); + }); + + it(`should click on the search result to access to the client's fiscal data`, done => { + nightmare + .waitForTextInElement(selectors.clientsIndex.searchResult, 'Bruce Banner') + .waitToClick(selectors.clientsIndex.searchResult) + .waitToClick(selectors.fiscalData.fiscalDataButton) + .waitForURL('fiscal-data') + .url() + .then(url => { + expect(url).toContain('fiscal-data'); + done(); + }) + .catch(catchErrors(done)); + }); + + it(`should uncheck the hasToInvoice checkbox`, done => { + nightmare + .waitToClick(selectors.fiscalData.hastToInvoiceCheckboxLabel) + .waitToClick(selectors.fiscalData.saveButton) + .wait(selectors.globalItems.snackbarIsActive) + .getInnerText(selectors.globalItems.snackbarIsActive) + .then(result => { + expect(result).toBe('¡Datos guardados!'); + done(); + }) + .catch(catchErrors(done)); + }); + + it(`should confirm hasToInvoice checkbox is unchecked`, done => { + nightmare + .waitForSnackbarReset() + .waitToClick(selectors.basicData.basicDataButton) + .wait(selectors.basicData.nameInput) + .waitToClick(selectors.fiscalData.fiscalDataButton) + .wait(selectors.fiscalData.hastToInvoiceCheckboxLabel) + .evaluate(selector => { + return document.querySelector(selector).checked; + }, selectors.fiscalData.hastToInvoiceCheckboxInput) + .then(value => { + expect(value).toBeFalsy(); + done(); + }) + .catch(catchErrors(done)); + }); +});