From 70afe95459f0446b2c86b1ea9e45ced672056135 Mon Sep 17 00:00:00 2001 From: Carlos Date: Sun, 29 Oct 2017 15:49:44 +0100 Subject: [PATCH] e2e tests for create client path fixed --- e2e/helpers/extensions.js | 6 +- e2e/helpers/selectors.js | 9 +- e2e/paths/create_client_path.spec.js | 355 ++++++++++++++------------- 3 files changed, 197 insertions(+), 173 deletions(-) diff --git a/e2e/helpers/extensions.js b/e2e/helpers/extensions.js index 859edc603..234df5c0f 100644 --- a/e2e/helpers/extensions.js +++ b/e2e/helpers/extensions.js @@ -110,9 +110,9 @@ Nightmare.action('countSearchResults', function(selector, done) { }); Nightmare.action('waitForNumberOfElements', function(selector, count, done) { - this.wait((selector, count) => { - return document.querySelectorAll(selector).length === count; - }, selectors.clientsView.searchResult, count) + this.wait((resultSelector, expectedCount) => { + return document.querySelectorAll(resultSelector).length === expectedCount; + }, selector, count) .then(done); }); diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js index 77ce319ca..916c4dc1c 100644 --- a/e2e/helpers/selectors.js +++ b/e2e/helpers/selectors.js @@ -7,12 +7,16 @@ export default { }, globalItems: { topBar: 'vn-topbar', - snackbarIsActive: '.mdl-snackbar--active > .mdl-snackbar__text' + snackbarIsActive: '.mdl-snackbar--active > .mdl-snackbar__text', + applicationsMenuButton: '#apps > i', + applicationsMenuVisible: 'body > vn-app > vn-vertical > vn-topbar > header > vn-main-menu > div .is-visible > div', + clientsButton: 'body > vn-app > vn-vertical > vn-topbar > header > vn-main-menu > div > div > ul > li:nth-child(1)' + }, moduleAccessView: { clientsSectionButton: 'body > vn-app > vn-vertical > vn-vertical > vn-home > vn-vertical > vn-module-container > a:nth-child(1)' }, - clientsView: { + clientsIndex: { searchClientInput: 'body > vn-app > vn-vertical > vn-vertical > vn-client-index > div > div > vn-card:nth-child(1) > div > vn-horizontal > vn-searchbar > form > vn-horizontal > vn-textfield > div > input', searchButton: 'body > vn-app > vn-vertical > vn-vertical > vn-client-index > div > div > vn-card:nth-child(1) > div > vn-horizontal > vn-searchbar > form > vn-horizontal > vn-icon-button > button', searchResult: 'body > vn-app > vn-vertical > vn-vertical > vn-client-index > div > div > vn-card:nth-child(2) > div > vn-item-client', @@ -27,4 +31,3 @@ export default { createButton: 'body > vn-app > vn-vertical > vn-vertical > vn-client-create > form > div > vn-button-bar > vn-button > button' } }; - diff --git a/e2e/paths/create_client_path.spec.js b/e2e/paths/create_client_path.spec.js index ab5eff549..ca4ac2e61 100644 --- a/e2e/paths/create_client_path.spec.js +++ b/e2e/paths/create_client_path.spec.js @@ -5,174 +5,195 @@ import {catchErrors} from '../../services/utils/jasmineHelpers'; const nightmare = createNightmare(); const moduleAccessViewHashURL = '#!/'; -describe('Clients path', () => { - it('should log in', done => { - nightmare - .login() - .waitForURL(moduleAccessViewHashURL) - .url() - .then(url => { - expect(url).toBe(config.url + moduleAccessViewHashURL); - done(); - }) - .catch(catchErrors(done)); +fdescribe('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)); + // }); }); - it('should access to the clients index by clicking the clients button', done => { - nightmare - .click(selectors.moduleAccessView.clientsSectionButton) - .wait(selectors.clientsView.createClientButton) - .url() - .then(url => { - expect(url).toBe(config.url + '#!/clients'); - 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 isn't created yet`, done => { - nightmare - .wait(selectors.clientsView.searchResult) - .type(selectors.clientsView.searchClientInput, 'Carol Danvers') - .click(selectors.clientsView.searchButton) - .waitForNumberOfElements(selectors.clientsView.searchResult, 0) - .countSearchResults(selectors.clientsView.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.clientsView.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)); - }); - - // it(`should create a new user with all it's data`, done => { - // nightmare - // .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(`some validation message`); - // done(); - // }) - // .catch(catchErrors(done)); - // }); });