diff --git a/src/components/CreateNewCityForm.vue b/src/components/CreateNewCityForm.vue
index 85d13beb1..4b1e12fb0 100644
--- a/src/components/CreateNewCityForm.vue
+++ b/src/components/CreateNewCityForm.vue
@@ -17,10 +17,6 @@ const $props = defineProps({
type: Number,
default: null,
},
- provinces: {
- type: Array,
- default: () => [],
- },
});
const { t } = useI18n();
@@ -56,7 +52,6 @@ const onDataSaved = (...args) => {
:province-selected="$props.provinceSelected"
:country-fk="$props.countryFk"
v-model="data.provinceFk"
- :provinces="$props.provinces"
/>
diff --git a/src/components/CreateNewPostcodeForm.vue b/src/components/CreateNewPostcodeForm.vue
index 03cba8ac7..44338f186 100644
--- a/src/components/CreateNewPostcodeForm.vue
+++ b/src/components/CreateNewPostcodeForm.vue
@@ -56,10 +56,10 @@ async function onCityCreated(newTown, formData) {
}
function setTown(newTown, data) {
- if (!newTown) return;
- town.value = newTown;
data.provinceFk = newTown.provinceFk;
data.countryFk = newTown.province.countryFk;
+ if (!newTown) return;
+ town.value = newTown;
}
async function setProvince(id, data) {
@@ -73,7 +73,7 @@ async function onProvinceCreated(data) {
await provincesFetchDataRef.value.fetch({
where: { countryFk: postcodeFormData.countryFk },
});
- postcodeFormData.provinceFk.value = data.id;
+ postcodeFormData.provinceFk = data.id;
}
watch(
@@ -90,22 +90,33 @@ watch(
postcodeFormData.townFk = null;
}
if (oldValueFk !== newCountryFk) {
- await provincesFetchDataRef.value.fetch({
- where: {
- countryFk: newCountryFk,
- },
- });
- await townsFetchDataRef.value.fetch({
- where: {
- provinceFk: {
- inq: provincesOptions.value.map(({ id }) => id),
- },
- },
- });
+ await fetchProvinces(newCountryFk);
+ await fetchTowns(newCountryFk);
}
}
);
-
+async function fetchTowns(countryFk) {
+ const townsFilter = countryFk
+ ? {
+ where: {
+ provinceFk: {
+ inq: provincesOptions.value.map(({ id }) => id),
+ },
+ },
+ }
+ : {};
+ await townsFetchDataRef.value.fetch(townsFilter);
+}
+async function fetchProvinces(countryFk) {
+ const provincesFilter = countryFk
+ ? {
+ where: {
+ countryFk: countryFk,
+ },
+ }
+ : {};
+ await provincesFetchDataRef.value.fetch(provincesFilter);
+}
watch(
() => postcodeFormData.provinceFk,
async (newProvinceFk, oldValueFk) => {
@@ -147,6 +158,13 @@ async function handleCountries(data) {
auto-load
url="Towns/location"
/>
+
onCityCreated(requestResponse, data)
@@ -209,14 +226,12 @@ async function handleCountries(data) {
@update:model-value="(value) => setProvince(value, data)"
v-model="data.provinceFk"
:clearable="true"
- :provinces="provincesOptions"
@on-province-created="onProvinceCreated"
/>
-import { reactive, ref } from 'vue';
+import { computed, reactive, ref } from 'vue';
import { useI18n } from 'vue-i18n';
import FetchData from 'components/FetchData.vue';
@@ -34,6 +34,12 @@ const onDataSaved = (dataSaved, requestResponse) => {
);
emit('onDataSaved', dataSaved, requestResponse);
};
+const where = computed(() => {
+ if (!$props.countryFk) {
+ return {};
+ }
+ return { countryFk: $props.countryFk };
+});
@@ -41,9 +47,7 @@ const onDataSaved = (dataSaved, requestResponse) => {
@on-fetch="(data) => (autonomiesOptions = data)"
auto-load
:filter="{
- where: {
- countryFk: $props.countryFk,
- },
+ where,
}"
url="Autonomies/location"
:sort-by="['name ASC']"
diff --git a/src/components/VnSelectProvince.vue b/src/components/VnSelectProvince.vue
index 9fcbef11e..5da6b781f 100644
--- a/src/components/VnSelectProvince.vue
+++ b/src/components/VnSelectProvince.vue
@@ -1,5 +1,5 @@
{
});
it('Create postCode', () => {
- const postCode = '1234475';
+ const postCode = Math.floor(100000 + Math.random() * 900000);
const province = 'Valencia';
cy.get(createLocationButton).click();
cy.get('.q-card > h1').should('have.text', 'New postcode');
@@ -115,20 +115,68 @@ describe('VnLocation', () => {
checkVnLocation(postCode, province);
});
- it('Create city', () => {
- const postCode = '9011';
- const province = 'Saskatchew';
+
+ it('Create city without country', () => {
+ const cityName = 'Saskatchew'.concat(Math.random(1 * 100));
cy.get(createLocationButton).click();
- cy.get(dialogInputs).eq(0).type(postCode);
cy.get(
`${createForm.prefix} > :nth-child(4) > .q-select > ${createForm.sufix} > :nth-child(2) > .q-icon`
).click();
cy.selectOption('#q-portal--dialog--3 .q-select', 'one');
- cy.get('#q-portal--dialog--3 .q-input').type(province);
+ cy.get('#q-portal--dialog--3 .q-input').type(cityName);
cy.get('#q-portal--dialog--3 .q-btn--standard').click();
- cy.get('#q-portal--dialog--1 .q-btn--standard').click();
- cy.waitForElement('.q-form');
- checkVnLocation(postCode, province);
+ });
+
+ it('Create province without country', () => {
+ const provinceName = 'Saskatchew'.concat(Math.random(1 * 100));
+ cy.get(createLocationButton).click();
+ cy.get(
+ `${createForm.prefix} > :nth-child(5) > .q-select > ${createForm.sufix} > :nth-child(2) `
+ )
+ .eq(0)
+ .click();
+ cy.selectOption('#q-portal--dialog--3 .q-select', 'one');
+ cy.countSelectOptions('#q-portal--dialog--3 .q-select', 4);
+ cy.get('#q-portal--dialog--3 .q-input').type(provinceName);
+
+ cy.get('#q-portal--dialog--3 .q-btn--standard').click();
+ });
+
+ it('Create city with country', () => {
+ const cityName = 'Saskatchew'.concat(Math.random(1 * 100));
+ cy.get(createLocationButton).click();
+ cy.selectOption(
+ `${createForm.prefix} > :nth-child(5) > :nth-child(3) `,
+ 'Italia'
+ );
+ cy.get(
+ `${createForm.prefix} > :nth-child(4) > .q-select > ${createForm.sufix} > :nth-child(2) > .q-icon`
+ ).click();
+ cy.selectOption('#q-portal--dialog--4 .q-select', 'Province four');
+ cy.countSelectOptions('#q-portal--dialog--4 .q-select', 1);
+
+ cy.get('#q-portal--dialog--4 .q-input').type(cityName);
+ cy.get('#q-portal--dialog--4 .q-btn--standard').click();
+ });
+
+ it('Create province with country', () => {
+ const provinceName = 'Saskatchew'.concat(Math.random(1 * 100));
+ cy.get(createLocationButton).click();
+ cy.selectOption(
+ `${createForm.prefix} > :nth-child(5) > :nth-child(3) `,
+ 'EspaƱa'
+ );
+ cy.get(
+ `${createForm.prefix} > :nth-child(5) > .q-select > ${createForm.sufix} > :nth-child(2) `
+ )
+ .eq(0)
+ .click();
+
+ cy.selectOption('#q-portal--dialog--4 .q-select', 'one');
+ cy.countSelectOptions('#q-portal--dialog--4 .q-select', 2);
+
+ cy.get('#q-portal--dialog--4 .q-input').type(provinceName);
+ cy.get('#q-portal--dialog--4 .q-btn--standard').click();
});
function checkVnLocation(postCode, province) {
diff --git a/test/cypress/support/commands.js b/test/cypress/support/commands.js
index 728342304..53f9d1d73 100755
--- a/test/cypress/support/commands.js
+++ b/test/cypress/support/commands.js
@@ -91,6 +91,11 @@ Cypress.Commands.add('selectOption', (selector, option) => {
cy.get(selector).click();
cy.get('.q-menu .q-item').contains(option).click();
});
+Cypress.Commands.add('countSelectOptions', (selector, option) => {
+ cy.waitForElement(selector);
+ cy.get(selector).click();
+ cy.get('.q-menu .q-item').should('have.length', option);
+});
Cypress.Commands.add('fillInForm', (obj, form = '.q-form > .q-card') => {
cy.waitForElement('.q-form > .q-card');