From 031dbcb63a188cbb508f99391382af639b7b74e8 Mon Sep 17 00:00:00 2001 From: Joan Sanchez Date: Wed, 18 Sep 2019 10:35:46 +0200 Subject: [PATCH] Unlocked from autocomplete city and postcode fields #1703 --- e2e/helpers/selectors.js | 12 +++++------ .../02-client-module/01_create_client.spec.js | 7 +++++-- .../03_edit_fiscal_data.spec.js | 12 +++++++---- .../02-client-module/05_add_address.spec.js | 10 +++++++--- loopback/locale/en.json | 3 ++- loopback/locale/es.json | 5 ++++- modules/client/back/models/address.js | 15 ++++++++++++++ modules/client/back/models/client.js | 15 ++++++++++++++ .../client/front/address/create/index.html | 16 +++++++++++---- modules/client/front/address/edit/index.html | 16 +++++++++++---- modules/client/front/create/index.html | 20 +++++++++++++------ modules/client/front/fiscal-data/index.html | 12 +++++++++-- 12 files changed, 110 insertions(+), 33 deletions(-) diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js index d4eb4562b..d9d6cbc93 100644 --- a/e2e/helpers/selectors.js +++ b/e2e/helpers/selectors.js @@ -33,8 +33,8 @@ export default { taxNumber: `${components.vnTextfield}[name="fi"]`, socialName: `${components.vnTextfield}[name="socialName"]`, street: `${components.vnTextfield}[name="street"]`, - postcode: `vn-autocomplete[field="$ctrl.client.postcode"]`, - city: `vn-autocomplete[field="$ctrl.client.city"]`, + postcode: `${components.vnTextfield}[name="postcode"]`, + city: `${components.vnTextfield}[name="city"]`, province: `vn-autocomplete[field="$ctrl.client.provinceFk"]`, country: `vn-autocomplete[field="$ctrl.client.countryFk"]`, userName: `${components.vnTextfield}[name="userName"]`, @@ -65,8 +65,8 @@ export default { equalizationTaxCheckbox: 'vn-check[label="Is equalizated"] md-checkbox', acceptPropagationButton: 'vn-client-fiscal-data > vn-confirm button[response=ACCEPT]', addressInput: `${components.vnTextfield}[name="street"]`, - postcodeAutocomplete: `vn-autocomplete[field="$ctrl.client.postcode"]`, - cityAutocomplete: `vn-autocomplete[field="$ctrl.client.city"]`, + postcodeInput: `${components.vnTextfield}[name="postcode"]`, + cityInput: `${components.vnTextfield}[name="city"]`, provinceAutocomplete: 'vn-autocomplete[field="$ctrl.client.provinceFk"]', countryAutocomplete: 'vn-autocomplete[field="$ctrl.client.countryFk"]', activeCheckbox: 'vn-check[label="Active"] md-checkbox', @@ -100,8 +100,8 @@ export default { defaultCheckboxInput: 'vn-check[label="Default"] md-checkbox', consigneeInput: `${components.vnTextfield}[name="nickname"]`, streetAddressInput: `${components.vnTextfield}[name="street"]`, - postcodeAutocomplete: `vn-autocomplete[field="$ctrl.address.postalCode"]`, - cityAutocomplete: `vn-autocomplete[field="$ctrl.address.city"]`, + postcodeInput: `${components.vnTextfield}[name="postalCode"]`, + cityInput: `${components.vnTextfield}[name="city"]`, provinceAutocomplete: 'vn-autocomplete[field="$ctrl.address.provinceFk"]', agencyAutocomplete: 'vn-autocomplete[field="$ctrl.address.agencyModeFk"]', phoneInput: `${components.vnTextfield}[name="phone"]`, diff --git a/e2e/paths/02-client-module/01_create_client.spec.js b/e2e/paths/02-client-module/01_create_client.spec.js index b9ea5e112..b67a89e68 100644 --- a/e2e/paths/02-client-module/01_create_client.spec.js +++ b/e2e/paths/02-client-module/01_create_client.spec.js @@ -53,7 +53,10 @@ describe('Client create path', () => { .write(selectors.createClientView.name, 'Carol Danvers') .write(selectors.createClientView.socialName, 'AVG tax') .write(selectors.createClientView.street, 'Many places') - .autocompleteSearch(selectors.createClientView.postcode, '46000') + .autocompleteSearch(selectors.createClientView.country, 'España') + .autocompleteSearch(selectors.createClientView.province, 'Province one') + .write(selectors.createClientView.city, 'Valencia') + .write(selectors.createClientView.postcode, '46000') .clearInput(selectors.createClientView.email) .write(selectors.createClientView.email, 'incorrect email format') .waitToClick(selectors.createClientView.createButton) @@ -64,7 +67,7 @@ describe('Client create path', () => { it(`should check for autocompleted city, province and country`, async() => { const clientCity = await nightmare - .waitToGetProperty(`${selectors.createClientView.city} input`, 'value'); + .waitToGetProperty(`${selectors.createClientView.city}`, 'value'); const clientProvince = await nightmare .waitToGetProperty(`${selectors.createClientView.province} input`, 'value'); diff --git a/e2e/paths/02-client-module/03_edit_fiscal_data.spec.js b/e2e/paths/02-client-module/03_edit_fiscal_data.spec.js index b304a03ee..ae3020d2a 100644 --- a/e2e/paths/02-client-module/03_edit_fiscal_data.spec.js +++ b/e2e/paths/02-client-module/03_edit_fiscal_data.spec.js @@ -67,8 +67,12 @@ describe('Client Edit fiscalData path', () => { .write(selectors.clientFiscalData.fiscalIdInput, 'INVALID!') .clearInput(selectors.clientFiscalData.addressInput) .write(selectors.clientFiscalData.addressInput, 'Somewhere edited') - .autocompleteSearch(selectors.clientFiscalData.cityAutocomplete, 'Valencia') - .autocompleteSearch(selectors.clientFiscalData.postcodeAutocomplete, '46000') + .autocompleteSearch(selectors.clientFiscalData.countryAutocomplete, 'España') + .autocompleteSearch(selectors.clientFiscalData.provinceAutocomplete, 'Province one') + .clearInput(selectors.clientFiscalData.cityInput) + .write(selectors.clientFiscalData.cityInput, 'Valencia') + .clearInput(selectors.clientFiscalData.postcodeInput) + .write(selectors.clientFiscalData.postcodeInput, '46000') .waitToClick(selectors.clientFiscalData.activeCheckbox) .waitToClick(selectors.clientFiscalData.frozenCheckbox) .waitToClick(selectors.clientFiscalData.hasToInvoiceCheckbox) @@ -194,14 +198,14 @@ describe('Client Edit fiscalData path', () => { it('should confirm the postcode have been edited', async() => { const result = await nightmare - .waitToGetProperty(`${selectors.clientFiscalData.postcodeAutocomplete} input`, 'value'); + .waitToGetProperty(`${selectors.clientFiscalData.postcodeInput}`, 'value'); expect(result).toContain('46000'); }); it('should confirm the city have been autocompleted', async() => { const result = await nightmare - .waitToGetProperty(`${selectors.clientFiscalData.cityAutocomplete} input`, 'value'); + .waitToGetProperty(`${selectors.clientFiscalData.cityInput}`, 'value'); expect(result).toEqual('Valencia'); }); diff --git a/e2e/paths/02-client-module/05_add_address.spec.js b/e2e/paths/02-client-module/05_add_address.spec.js index 08227fc0f..f4e68634a 100644 --- a/e2e/paths/02-client-module/05_add_address.spec.js +++ b/e2e/paths/02-client-module/05_add_address.spec.js @@ -24,7 +24,11 @@ describe('Client Add address path', () => { const result = await nightmare .waitToClick(selectors.clientAddresses.defaultCheckboxInput) .clearInput(selectors.clientAddresses.streetAddressInput) - .autocompleteSearch(selectors.clientAddresses.postcodeAutocomplete, '46000') + .autocompleteSearch(selectors.clientAddresses.provinceAutocomplete, 'Province one') + .clearInput(selectors.clientAddresses.cityInput) + .write(selectors.clientAddresses.cityInput, 'Valencia') + .clearInput(selectors.clientAddresses.postcodeInput) + .write(selectors.clientAddresses.postcodeInput, '46000') .autocompleteSearch(selectors.clientAddresses.agencyAutocomplete, 'Entanglement') .write(selectors.clientAddresses.phoneInput, '999887744') .write(selectors.clientAddresses.mobileInput, '999887744') @@ -36,14 +40,14 @@ describe('Client Add address path', () => { it('should confirm the postcode have been edited', async() => { const result = await nightmare - .waitToGetProperty(`${selectors.clientAddresses.postcodeAutocomplete} input`, 'value'); + .waitToGetProperty(`${selectors.clientAddresses.postcodeInput}`, 'value'); expect(result).toContain('46000'); }); it('should confirm the city have been autocompleted', async() => { const result = await nightmare - .waitToGetProperty(`${selectors.clientAddresses.cityAutocomplete} input`, 'value'); + .waitToGetProperty(`${selectors.clientAddresses.cityInput}`, 'value'); expect(result).toEqual('Valencia'); }); diff --git a/loopback/locale/en.json b/loopback/locale/en.json index 7aea68f02..4c29d0a70 100644 --- a/loopback/locale/en.json +++ b/loopback/locale/en.json @@ -54,5 +54,6 @@ "Weekday cannot be blank": "Weekday cannot be blank", "This ticket can not be modified": "This ticket can not be modified", "You can't delete a confirmed order": "You can't delete a confirmed order", - "Value has an invalid format": "Value has an invalid format" + "Value has an invalid format": "Value has an invalid format", + "The postcode doesn't exists. Ensure you put the correct format": "The postcode doesn't exists. Ensure you put the correct format" } \ No newline at end of file diff --git a/loopback/locale/es.json b/loopback/locale/es.json index fd09e8b1f..43b3c8177 100644 --- a/loopback/locale/es.json +++ b/loopback/locale/es.json @@ -104,5 +104,8 @@ "You can't delete a confirmed order": "No puedes borrar un pedido confirmado", "Can't create stowaway for this ticket": "No se puede crear un polizon para este ticket", "Value has an invalid format": "El valor tiene un formato incorrecto", - "Invalid quantity": "Cantidad invalida" + "Invalid quantity": "Cantidad invalida", + "This postal code is not valid": "This postal code is not valid", + "is invalid": "is invalid", + "The postcode doesn't exists. Ensure you put the correct format": "El código postal no existe. Asegúrate de ponerlo con el formato correcto" } \ No newline at end of file diff --git a/modules/client/back/models/address.js b/modules/client/back/models/address.js index d0cfd0900..afdacdee5 100644 --- a/modules/client/back/models/address.js +++ b/modules/client/back/models/address.js @@ -42,6 +42,21 @@ module.exports = Self => { next(); }); + Self.validateAsync('postalCode', hasValidPostcode, { + message: `The postcode doesn't exists. Ensure you put the correct format` + }); + + async function hasValidPostcode(err, done) { + if (!this.postalCode) + return done(); + + const models = Self.app.models; + const postcode = await models.Postcode.findById(this.postalCode); + + if (!postcode) err(); + done(); + } + // Helpers Self.observe('before save', async function(ctx) { diff --git a/modules/client/back/models/client.js b/modules/client/back/models/client.js index 24659b366..a5536c76e 100644 --- a/modules/client/back/models/client.js +++ b/modules/client/back/models/client.js @@ -160,6 +160,21 @@ module.exports = Self => { return regexp.test(value); } + Self.validateAsync('postCode', hasValidPostcode, { + message: `The postcode doesn't exists. Ensure you put the correct format` + }); + + async function hasValidPostcode(err, done) { + if (!this.postcode) + return done(); + + const models = Self.app.models; + const postcode = await models.Postcode.findById(this.postcode); + + if (!postcode) err(); + done(); + } + Self.observe('before save', async function(ctx) { let changes = ctx.data || ctx.instance; let orgData = ctx.currentInstance; diff --git a/modules/client/front/address/create/index.html b/modules/client/front/address/create/index.html index 432d4ebbe..0240aceb5 100644 --- a/modules/client/front/address/create/index.html +++ b/modules/client/front/address/create/index.html @@ -31,7 +31,11 @@ value-field="id" label="Province"> - + + + + + - + + + + + - + + + + + + - + + + +