+
{
@@ -75,7 +75,6 @@ const setFilteredAddresses = (data) => {
min="0"
/>
-
{
/>
-
{
min="0"
:required="true"
clearable
+ data-cy="ZoneBasicDataPrice"
/>
-import { useRoute } from 'vue-router';
-import { computed } from 'vue';
-
-import VnCard from 'components/common/VnCard.vue';
+import VnCardBeta from 'src/components/common/VnCardBeta.vue';
import ZoneDescriptor from './ZoneDescriptor.vue';
-import ZoneFilterPanel from '../ZoneFilterPanel.vue';
-import filter from './ZoneFilter.js';
-
-const route = useRoute();
-const routeName = computed(() => route.name);
-
-function notIsLocations(ifIsFalse, ifIsTrue) {
- if (routeName.value != 'ZoneLocations') return ifIsFalse;
- return ifIsTrue;
-}
-
-
+
diff --git a/src/pages/Zone/Card/ZoneDescriptorMenuItems.vue b/src/pages/Zone/Card/ZoneDescriptorMenuItems.vue
index 3c45700cb..f8683773d 100644
--- a/src/pages/Zone/Card/ZoneDescriptorMenuItems.vue
+++ b/src/pages/Zone/Card/ZoneDescriptorMenuItems.vue
@@ -36,13 +36,13 @@ function openConfirmDialog(callback) {
}
-
+
{{ t('deleteZone') }}
-
+
diff --git a/src/pages/Zone/Card/ZoneEventExclusionForm.vue b/src/pages/Zone/Card/ZoneEventExclusionForm.vue
index 4b6aa52bd..3828c998f 100644
--- a/src/pages/Zone/Card/ZoneEventExclusionForm.vue
+++ b/src/pages/Zone/Card/ZoneEventExclusionForm.vue
@@ -171,9 +171,10 @@ onMounted(() => {
openConfirmationModal(
t('eventsPanel.deleteTitle'),
t('eventsPanel.deleteSubtitle'),
- () => deleteEvent()
+ () => deleteEvent(),
)
"
+ data-cy="ZoneEventExclusionDeleteBtn"
/>
{
eventInclusionFormData.value.weekDays = weekdayStore.toSet(
- eventInclusionFormData.value.wdays
+ eventInclusionFormData.value.wdays,
);
if (inclusionType.value == 'day') eventInclusionFormData.value.weekDays = '';
@@ -74,7 +73,7 @@ const createEvent = async () => {
else
await axios.put(
`Zones/${route.params.id}/events/${props.event?.id}`,
- eventInclusionFormData.value
+ eventInclusionFormData.value,
);
await refetchEvents();
@@ -123,12 +122,14 @@ onMounted(() => {
dense
val="day"
:label="t('eventsInclusionForm.oneDay')"
+ data-cy="ZoneEventInclusionDayRadio"
/>
{
val="range"
:label="t('eventsInclusionForm.rangeOfDates')"
class="q-mb-sm"
+ data-cy="ZoneEventInclusionRangeRadio"
/>
@@ -221,7 +223,7 @@ onMounted(() => {
openConfirmationModal(
t('zone.deleteTitle'),
t('zone.deleteSubtitle'),
- () => deleteEvent()
+ () => deleteEvent(),
)
"
/>
diff --git a/src/pages/Zone/Card/ZoneEvents.vue b/src/pages/Zone/Card/ZoneEvents.vue
index 1e6debd25..2fa7dfb43 100644
--- a/src/pages/Zone/Card/ZoneEvents.vue
+++ b/src/pages/Zone/Card/ZoneEvents.vue
@@ -1,18 +1,14 @@
-
-
-
+
+
+
+
+
{
await fetchData();
},
- { immediate: true, deep: true }
+ { immediate: true, deep: true },
);
const formatWdays = (event) => {
@@ -178,9 +176,10 @@ onMounted(async () => {
openConfirmationModal(
t('zone.deleteTitle'),
t('zone.deleteSubtitle'),
- () => deleteEvent(event.id)
+ () => deleteEvent(event.id),
)
"
+ data-cy="ZoneEventsPanelDeleteBtn"
>
{{ t('eventsPanel.delete') }}
diff --git a/src/pages/Zone/Card/ZoneLocationsTree.vue b/src/pages/Zone/Card/ZoneLocationsTree.vue
index 5c87faf99..083436440 100644
--- a/src/pages/Zone/Card/ZoneLocationsTree.vue
+++ b/src/pages/Zone/Card/ZoneLocationsTree.vue
@@ -1,6 +1,7 @@
+
+
+
{
-
-
+
diff --git a/src/pages/Zone/Card/ZoneSearchbar.vue b/src/pages/Zone/Card/ZoneSearchbar.vue
deleted file mode 100644
index d1188a1e8..000000000
--- a/src/pages/Zone/Card/ZoneSearchbar.vue
+++ /dev/null
@@ -1,74 +0,0 @@
-
-
-
-
-
diff --git a/src/pages/Zone/Card/ZoneSummary.vue b/src/pages/Zone/Card/ZoneSummary.vue
index 5b29b495b..2c56fa3e2 100644
--- a/src/pages/Zone/Card/ZoneSummary.vue
+++ b/src/pages/Zone/Card/ZoneSummary.vue
@@ -60,10 +60,11 @@ onMounted(async () => {
#{{ entity.id }} - {{ entity.name }}
diff --git a/src/pages/Zone/ZoneCalendar.vue b/src/pages/Zone/ZoneCalendar.vue
index c2abd15ff..7cae59698 100644
--- a/src/pages/Zone/ZoneCalendar.vue
+++ b/src/pages/Zone/ZoneCalendar.vue
@@ -185,6 +185,7 @@ const handleDateClick = (timestamp) => {
:class="{
'--today': isToday(timestamp),
}"
+ data-cy="ZoneCalendarDay"
>
-
diff --git a/src/pages/Zone/ZoneDeliveryPanel.vue b/src/pages/Zone/ZoneDeliveryPanel.vue
index 0a535afcb..a8cb05afc 100644
--- a/src/pages/Zone/ZoneDeliveryPanel.vue
+++ b/src/pages/Zone/ZoneDeliveryPanel.vue
@@ -46,7 +46,7 @@ watch(
inq.value = {
deliveryMethodFk: { inq: deliveryMethods.value[deliveryMethodFk.value] },
};
- }
+ },
);
@@ -89,7 +89,7 @@ watch(
v-model="formData.geoFk"
url="Postcodes/location"
:fields="['geoFk', 'code', 'townFk', 'countryFk']"
- :sort-by="['code ASC']"
+ :sort-by="'code ASC'"
option-value="geoFk"
option-label="code"
:filter-options="['code']"
@@ -98,6 +98,7 @@ watch(
outlined
rounded
map-key="geoFk"
+ data-cy="ZoneDeliveryDaysPostcodeSelect"
>
@@ -129,6 +130,7 @@ watch(
dense
outlined
rounded
+ data-cy="ZoneDeliveryDaysAgencySelect"
/>
-import { ref } from 'vue';
-import { useI18n } from 'vue-i18n';
-import VnInput from 'components/common/VnInput.vue';
-import FetchData from 'components/FetchData.vue';
-import VnFilterPanel from 'src/components/ui/VnFilterPanel.vue';
-import VnSelect from 'components/common/VnSelect.vue';
-import order from 'src/router/modules/order';
-
-const { t } = useI18n();
-const props = defineProps({
- dataKey: {
- type: String,
- required: true,
- },
- exprBuilder: {
- type: Function,
- default: null,
- },
-});
-
-const agencies = ref([]);
-
-
-
- (agencies = data)"
- auto-load
- />
-
-
-
- {{ t(`filterPanel.${tag.label}`) }}:
- {{ tag.value }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/pages/Zone/ZoneList.vue b/src/pages/Zone/ZoneList.vue
index eb54ec15b..869b0c12c 100644
--- a/src/pages/Zone/ZoneList.vue
+++ b/src/pages/Zone/ZoneList.vue
@@ -14,9 +14,7 @@ import VnTable from 'src/components/VnTable/VnTable.vue';
import VnSelect from 'src/components/common/VnSelect.vue';
import VnInput from 'src/components/common/VnInput.vue';
import VnInputTime from 'src/components/common/VnInputTime.vue';
-import RightMenu from 'src/components/common/RightMenu.vue';
-import ZoneFilterPanel from './ZoneFilterPanel.vue';
-import ZoneSearchbar from './Card/ZoneSearchbar.vue';
+import VnSection from 'src/components/common/VnSection.vue';
const { t } = useI18n();
const router = useRouter();
@@ -25,7 +23,7 @@ const { viewSummary } = useSummaryDialog();
const { openConfirmationModal } = useVnConfirm();
const tableRef = ref();
const warehouseOptions = ref([]);
-
+const dataKey = 'ZoneList';
const tableFilter = {
include: [
{
@@ -114,6 +112,7 @@ const columns = computed(() => [
columnFilter: {
inWhere: true,
},
+ columnClass: 'shrink-column',
},
{
align: 'left',
@@ -169,77 +168,128 @@ function formatRow(row) {
return dashIfEmpty(`${row?.address?.nickname},
${row?.address?.postcode?.town?.name} (${row?.address?.province?.name})`);
}
+
+const exprBuilder = (param, value) => {
+ switch (param) {
+ case 'name':
+ return {
+ name: { like: `%${value}%` },
+ };
+ case 'code':
+ return {
+ code: { like: `%${value}%` },
+ };
+ case 'agencyModeFk':
+ return {
+ agencyModeFk: value,
+ };
+ case 'search':
+ return /^\d+$/.test(value) ? { id: value } : { name: { like: `%${value}%` } };
+ case 'price':
+ return {
+ price: value,
+ };
+ }
+};
-
-
-
-
-
-
-
-
- {{ dashIfEmpty(formatRow(row)) }}
+
+
+
+
+
+ {{ dashIfEmpty(formatRow(row)) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
es:
Search zone: Buscar zona
diff --git a/src/pages/Zone/ZoneUpcoming.vue b/src/pages/Zone/ZoneUpcoming.vue
index adcdfbc04..b8664dc2f 100644
--- a/src/pages/Zone/ZoneUpcoming.vue
+++ b/src/pages/Zone/ZoneUpcoming.vue
@@ -7,7 +7,6 @@ import FetchData from 'components/FetchData.vue';
import { toDateFormat } from 'src/filters/date.js';
import { useWeekdayStore } from 'src/stores/useWeekdayStore';
-import ZoneSearchbar from './Card/ZoneSearchbar.vue';
const { t } = useI18n();
const weekdayStore = useWeekdayStore();
@@ -31,7 +30,7 @@ const columns = computed(() => [
label: t('list.id'),
name: 'id',
field: 'zoneFk',
- align: 'left',
+ align: 'center',
},
]);
@@ -53,7 +52,6 @@ onMounted(() => weekdayStore.initStore());
@on-fetch="(data) => (details = data)"
auto-load
/>
-
diff --git a/src/pages/Zone/locale/en.yml b/src/pages/Zone/locale/en.yml
index e53e7b560..22f4b1ae6 100644
--- a/src/pages/Zone/locale/en.yml
+++ b/src/pages/Zone/locale/en.yml
@@ -11,10 +11,13 @@ zone:
m3Max: Max m³
deleteTitle: This item will be deleted
deleteSubtitle: Are you sure you want to continue?
- volumetric: Volumetric
bonus: Bonus
closing: Closing
travelingDays: Traveling days
+ search: Search zone
+ searchInfo: Search zone by id or name
+ searchLocations: Search locations
+ searchLocationsInfo: Search locations by post code
list:
clone: Clone
id: Id
@@ -30,6 +33,7 @@ list:
confirmCloneTitle: All it's properties will be copied
confirmCloneSubtitle: Do you want to clone this zone?
warehouse: Warehouse
+ isVolumetric: Volumetric
createZone: Create zone
zoneSummary: Summary
addressFk: Address
diff --git a/src/pages/Zone/locale/es.yml b/src/pages/Zone/locale/es.yml
index bc31e74a9..777bc1c03 100644
--- a/src/pages/Zone/locale/es.yml
+++ b/src/pages/Zone/locale/es.yml
@@ -15,6 +15,10 @@ zone:
bonus: Bonificación
closing: Cierre
travelingDays: Días de viaje
+ search: Buscar zona
+ searchInfo: Buscar zona por Id o nombre
+ searchLocations: Buscar localización
+ searchLocationsInfo: Buscar localización por código postal
list:
clone: Clonar
id: Id
diff --git a/src/router/modules/invoiceIn.js b/src/router/modules/invoiceIn.js
index fe70a1056..b8021e69f 100644
--- a/src/router/modules/invoiceIn.js
+++ b/src/router/modules/invoiceIn.js
@@ -1,10 +1,15 @@
import { RouterView } from 'vue-router';
+import { setRectificative } from 'src/pages/InvoiceIn/composables/setRectificative';
const invoiceInCard = {
name: 'InvoiceInCard',
path: ':id',
component: () => import('src/pages/InvoiceIn/Card/InvoiceInCard.vue'),
redirect: { name: 'InvoiceInSummary' },
+ beforeEnter: async (to, from, next) => {
+ await setRectificative(to);
+ next();
+ },
meta: {
menu: [
'InvoiceInBasicData',
@@ -32,8 +37,7 @@ const invoiceInCard = {
title: 'basicData',
icon: 'vn:settings',
},
- component: () =>
- import('src/pages/InvoiceIn/Card/InvoiceInBasicData.vue'),
+ component: () => import('src/pages/InvoiceIn/Card/InvoiceInBasicData.vue'),
},
{
name: 'InvoiceInVat',
@@ -51,8 +55,7 @@ const invoiceInCard = {
title: 'dueDay',
icon: 'vn:calendar',
},
- component: () =>
- import('src/pages/InvoiceIn/Card/InvoiceInDueDay.vue'),
+ component: () => import('src/pages/InvoiceIn/Card/InvoiceInDueDay.vue'),
},
{
name: 'InvoiceInIntrastat',
@@ -61,8 +64,7 @@ const invoiceInCard = {
title: 'intrastat',
icon: 'vn:lines',
},
- component: () =>
- import('src/pages/InvoiceIn/Card/InvoiceInIntrastat.vue'),
+ component: () => import('src/pages/InvoiceIn/Card/InvoiceInIntrastat.vue'),
},
{
name: 'InvoiceInCorrective',
@@ -71,8 +73,7 @@ const invoiceInCard = {
title: 'corrective',
icon: 'attachment',
},
- component: () =>
- import('src/pages/InvoiceIn/Card/InvoiceInCorrective.vue'),
+ component: () => import('src/pages/InvoiceIn/Card/InvoiceInCorrective.vue'),
},
{
name: 'InvoiceInLog',
@@ -86,7 +87,7 @@ const invoiceInCard = {
],
};
-export default {
+export default {
name: 'InvoiceIn',
path: '/invoice-in',
meta: {
@@ -98,7 +99,7 @@ export default {
component: RouterView,
redirect: { name: 'InvoiceInMain' },
children: [
- {
+ {
name: 'InvoiceInMain',
path: '',
component: () => import('src/components/common/VnModule.vue'),
@@ -111,7 +112,7 @@ export default {
component: () => import('src/pages/InvoiceIn/InvoiceInList.vue'),
children: [
{
- name: 'InvoiceInList',
+ name: 'InvoiceInList',
path: 'list',
meta: {
title: 'list',
@@ -137,9 +138,10 @@ export default {
title: 'serial',
icon: 'view_list',
},
- component: () => import('src/pages/InvoiceIn/Serial/InvoiceInSerial.vue'),
+ component: () =>
+ import('src/pages/InvoiceIn/Serial/InvoiceInSerial.vue'),
},
],
},
],
-};
\ No newline at end of file
+};
diff --git a/src/router/modules/wagon.js b/src/router/modules/wagon.js
index 4a322d305..798c671eb 100644
--- a/src/router/modules/wagon.js
+++ b/src/router/modules/wagon.js
@@ -1,52 +1,60 @@
import { RouterView } from 'vue-router';
+const wagonCard = {
+ name: 'WagonCard',
+ path: ':id',
+ component: () => import('src/pages/Wagon/Card/WagonCard.vue'),
+ redirect: { name: 'WagonEdit' },
+ meta: {
+ menu: ['WagonEdit'],
+ },
+ children: [
+ {
+ path: 'edit',
+ name: 'WagonEdit',
+ meta: {
+ title: 'wagonEdit',
+ icon: 'edit',
+ },
+ component: () => import('src/pages/Wagon/WagonCreate.vue'),
+ },
+ ],
+};
+
export default {
- path: '/wagon',
name: 'Wagon',
+ path: '/wagon',
meta: {
title: 'wagons',
icon: 'vn:trolley',
moduleName: 'Wagon',
+ menu: ['WagonList', 'WagonTypeList', 'WagonCounter'],
},
component: RouterView,
redirect: { name: 'WagonMain' },
- menus: {
- main: ['WagonList', 'WagonTypeList', 'WagonCounter', 'WagonTray'],
- card: [],
- },
children: [
{
- path: '/wagon',
+ path: '',
name: 'WagonMain',
component: () => import('src/components/common/VnModule.vue'),
- redirect: { name: 'WagonList' },
+ redirect: { name: 'WagonIndexMain' },
children: [
{
- path: 'list',
- name: 'WagonList',
- meta: {
- title: 'list',
- icon: 'vn:trolley',
- },
+ path: '',
+ name: 'WagonIndexMain',
+ redirect: { name: 'WagonList' },
component: () => import('src/pages/Wagon/WagonList.vue'),
- },
- {
- path: 'create',
- name: 'WagonCreate',
- meta: {
- title: 'wagonCreate',
- icon: 'create',
- },
- component: () => import('src/pages/Wagon/WagonCreate.vue'),
- },
- {
- path: ':id/edit',
- name: 'WagonEdit',
- meta: {
- title: 'wagonEdit',
- icon: 'edit',
- },
- component: () => import('src/pages/Wagon/WagonCreate.vue'),
+ children: [
+ {
+ name: 'WagonList',
+ path: 'list',
+ meta: {
+ title: 'list',
+ icon: 'view_list',
+ },
+ },
+ wagonCard,
+ ],
},
{
path: 'counter',
@@ -57,40 +65,32 @@ export default {
},
component: () => import('src/pages/Wagon/WagonCounter.vue'),
},
- ],
- },
- {
- path: '/wagon/type',
- name: 'WagonTypeMain',
- component: () => import('src/components/common/VnModule.vue'),
- redirect: { name: 'WagonTypeList' },
- children: [
{
- path: 'list',
- name: 'WagonTypeList',
- meta: {
- title: 'typesList',
- icon: 'view_list',
- },
- component: () => import('src/pages/Wagon/Type/WagonTypeList.vue'),
- },
- {
- path: 'create',
- name: 'WagonTypeCreate',
- meta: {
- title: 'typeCreate',
- icon: 'create',
- },
- component: () => import('src/pages/Wagon/Type/WagonTypeList.vue'),
- },
- {
- path: ':id/edit',
- name: 'WagonTypeEdit',
- meta: {
- title: 'typeEdit',
- icon: 'edit',
- },
- component: () => import('src/pages/Wagon/Type/WagonTypeEdit.vue'),
+ path: 'type',
+ name: 'WagonTypeMain',
+ redirect: { name: 'WagonTypeList' },
+ children: [
+ {
+ path: 'list',
+ name: 'WagonTypeList',
+ meta: {
+ title: 'typesList',
+ icon: 'view_list',
+ },
+ component: () =>
+ import('src/pages/Wagon/Type/WagonTypeList.vue'),
+ },
+ {
+ path: ':id/edit',
+ name: 'WagonTypeEdit',
+ meta: {
+ title: 'typeEdit',
+ icon: 'edit',
+ },
+ component: () =>
+ import('src/pages/Wagon/Type/WagonTypeEdit.vue'),
+ },
+ ],
},
],
},
diff --git a/src/router/modules/zone.js b/src/router/modules/zone.js
index f400a708e..f48a715b9 100644
--- a/src/router/modules/zone.js
+++ b/src/router/modules/zone.js
@@ -1,24 +1,12 @@
import { RouterView } from 'vue-router';
-export default {
- path: '/zone',
- name: 'Zone',
+const zoneCard = {
+ name: 'ZoneCard',
+ path: ':id',
+ component: () => import('src/pages/Zone/Card/ZoneCard.vue'),
+ redirect: { name: 'ZoneSummary' },
meta: {
- title: 'zones',
- icon: 'vn:zone',
- moduleName: 'Zone',
- keyBinding: 'z',
- },
- component: RouterView,
- redirect: { name: 'ZoneMain' },
- menus: {
- main: [
- 'ZoneList',
- 'ZoneDeliveryDays',
- 'ZoneUpcomingList',
- 'ZoneUpcomingDeliveries',
- ],
- card: [
+ menu: [
'ZoneBasicData',
'ZoneWarehouses',
'ZoneHistory',
@@ -28,19 +16,102 @@ export default {
},
children: [
{
- path: '/zone',
+ name: 'ZoneSummary',
+ path: 'summary',
+ meta: {
+ title: 'summary',
+ icon: 'launch',
+ },
+ component: () => import('src/pages/Zone/Card/ZoneSummary.vue'),
+ },
+ {
+ path: 'basic-data',
+ name: 'ZoneBasicData',
+ meta: {
+ title: 'basicData',
+ icon: 'vn:settings',
+ },
+ component: () => import('src/pages/Zone/Card/ZoneBasicData.vue'),
+ },
+ {
+ path: 'location',
+ name: 'ZoneLocations',
+ meta: {
+ title: 'locations',
+ icon: 'my_location',
+ },
+ component: () => import('src/pages/Zone/Card/ZoneLocations.vue'),
+ },
+ {
+ path: 'warehouses',
+ name: 'ZoneWarehouses',
+ meta: {
+ title: 'warehouses',
+ icon: 'home',
+ },
+ component: () => import('src/pages/Zone/Card/ZoneWarehouses.vue'),
+ },
+ {
+ path: 'log',
+ name: 'ZoneHistory',
+ meta: {
+ title: 'log',
+ icon: 'history',
+ },
+ component: () => import('src/pages/Zone/Card/ZoneLog.vue'),
+ },
+ {
+ path: 'events',
+ name: 'ZoneEvents',
+ meta: {
+ title: 'calendar',
+ icon: 'vn:calendar',
+ },
+ component: () => import('src/pages/Zone/Card/ZoneEvents.vue'),
+ },
+ ],
+};
+
+export default {
+ name: 'Zone',
+ path: '/zone',
+ meta: {
+ title: 'zones',
+ icon: 'vn:zone',
+ moduleName: 'Zone',
+ keyBinding: 'z',
+ menu: [
+ 'ZoneList',
+ 'ZoneDeliveryDays',
+ 'ZoneUpcomingList',
+ 'ZoneUpcomingDeliveries',
+ ],
+ },
+ component: RouterView,
+ redirect: { name: 'ZoneMain' },
+ children: [
+ {
name: 'ZoneMain',
+ path: '',
component: () => import('src/components/common/VnModule.vue'),
- redirect: { name: 'ZoneList' },
+ redirect: { name: 'ZoneIndexMain' },
children: [
{
- path: 'list',
- name: 'ZoneList',
- meta: {
- title: 'zonesList',
- icon: 'view_list',
- },
+ path: '',
+ name: 'ZoneIndexMain',
+ redirect: { name: 'ZoneList' },
component: () => import('src/pages/Zone/ZoneList.vue'),
+ children: [
+ {
+ name: 'ZoneList',
+ path: 'list',
+ meta: {
+ title: 'list',
+ icon: 'view_list',
+ },
+ },
+ zoneCard,
+ ],
},
{
path: 'delivery-days',
@@ -62,67 +133,5 @@ export default {
},
],
},
- {
- name: 'ZoneCard',
- path: ':id',
- component: () => import('src/pages/Zone/Card/ZoneCard.vue'),
- redirect: { name: 'ZoneSummary' },
- children: [
- {
- name: 'ZoneSummary',
- path: 'summary',
- meta: {
- title: 'summary',
- icon: 'launch',
- },
- component: () => import('src/pages/Zone/Card/ZoneSummary.vue'),
- },
- {
- name: 'ZoneBasicData',
- path: 'basic-data',
- meta: {
- title: 'basicData',
- icon: 'vn:settings',
- },
- component: () => import('src/pages/Zone/Card/ZoneBasicData.vue'),
- },
- {
- name: 'ZoneLocations',
- path: 'location',
- meta: {
- title: 'locations',
- icon: 'my_location',
- },
- component: () => import('src/pages/Zone/Card/ZoneLocations.vue'),
- },
- {
- name: 'ZoneWarehouses',
- path: 'warehouses',
- meta: {
- title: 'warehouses',
- icon: 'home',
- },
- component: () => import('src/pages/Zone/Card/ZoneWarehouses.vue'),
- },
- {
- name: 'ZoneHistory',
- path: 'log',
- meta: {
- title: 'log',
- icon: 'history',
- },
- component: () => import('src/pages/Zone/Card/ZoneLog.vue'),
- },
- {
- name: 'ZoneEvents',
- path: 'events',
- meta: {
- title: 'calendar',
- icon: 'vn:calendar',
- },
- component: () => import('src/pages/Zone/Card/ZoneEvents.vue'),
- },
- ],
- },
],
};
diff --git a/test/cypress/integration/invoiceOut/invoiceOutMakeInvoice.spec.js b/test/cypress/integration/invoiceOut/invoiceOutMakeInvoice.spec.js
index c552be562..e93326f1d 100644
--- a/test/cypress/integration/invoiceOut/invoiceOutMakeInvoice.spec.js
+++ b/test/cypress/integration/invoiceOut/invoiceOutMakeInvoice.spec.js
@@ -16,6 +16,11 @@ describe.skip('InvoiceOut manual invoice', () => {
cy.checkNotification('Data saved');
cy.get('.q-virtual-scroll__content > :nth-child(1) > :nth-child(3)').click();
cy.get(':nth-child(8) > .value > .link').click();
- cy.get('.header > :nth-child(3) > .q-btn__content').click();
+ cy.get('.q-menu > .descriptor > .header').should('be.visible');
+ cy.get(
+ '.q-menu > .descriptor > .header > [data-cy="descriptor-more-opts"] > .q-btn__content',
+ ).click();
+ cy.get('[data-cy="descriptor-more-opts-menu"] > .q-list > :nth-child(4)').click();
+ cy.dataCy('VnConfirm_confirm').click();
});
});
diff --git a/test/cypress/integration/invoiceOut/invoiceOutSummary.spec.js b/test/cypress/integration/invoiceOut/invoiceOutSummary.spec.js
index c0231457a..63e828f55 100644
--- a/test/cypress/integration/invoiceOut/invoiceOutSummary.spec.js
+++ b/test/cypress/integration/invoiceOut/invoiceOutSummary.spec.js
@@ -7,7 +7,6 @@ describe('InvoiceOut summary', () => {
const firstRowDescriptors = (opt) =>
`tbody > :nth-child(1) > :nth-child(${opt}) > .q-btn`;
- const toCustomerSummary = '[href="#/customer/1101"]';
const toTicketList = '[href="#/ticket/list?table={%22refFk%22:%22T1111111%22}"]';
const selectMenuOption = (opt) => `.q-menu > .q-list > :nth-child(${opt})`;
const confirmSend = '.q-btn--unelevated';
@@ -25,8 +24,8 @@ describe('InvoiceOut summary', () => {
cy.get('.q-item > .q-item__label').should('include.text', '1101');
});
- it('should open the client summary and the ticket list', () => {
- cy.get(toCustomerSummary).click();
+ it('should open the client summary', () => {
+ cy.dataCy('invoiceOutDescriptorCustomerCard').click();
cy.get('.descriptor').should('be.visible');
cy.get('.q-item > .q-item__label').should('include.text', '1101');
});
@@ -51,6 +50,7 @@ describe('InvoiceOut summary', () => {
cy.dataCy('descriptor-more-opts').click();
cy.get(selectMenuOption(3)).click();
cy.dataCy('InvoiceOutDescriptorMenuSendPdfOption').click();
+ cy.dataCy('SendEmailNotifiactionDialogInput').should('be.visible');
cy.get(confirmSend).click();
cy.checkNotification('Notification sent');
});
@@ -59,18 +59,11 @@ describe('InvoiceOut summary', () => {
cy.dataCy('descriptor-more-opts').click();
cy.get(selectMenuOption(3)).click();
cy.dataCy('InvoiceOutDescriptorMenuSendCsvOption').click();
+ cy.dataCy('SendEmailNotifiactionDialogInput').should('be.visible');
cy.get(confirmSend).click();
cy.checkNotification('Notification sent');
});
- it('should delete an invoice ', () => {
- cy.typeSearchbar('T2222222{enter}');
- cy.dataCy('descriptor-more-opts').click();
- cy.get(selectMenuOption(4)).click();
- cy.dataCy('VnConfirm_confirm').click();
- cy.checkNotification('InvoiceOut deleted');
- });
-
it('should book the invoice', () => {
cy.dataCy('descriptor-more-opts').click();
cy.get(selectMenuOption(5)).click();
diff --git a/test/cypress/integration/order/orderList.spec.js b/test/cypress/integration/order/orderList.spec.js
index 1c954622f..8b8852a02 100644
--- a/test/cypress/integration/order/orderList.spec.js
+++ b/test/cypress/integration/order/orderList.spec.js
@@ -1,5 +1,9 @@
///
describe('OrderList', () => {
+ const clientCreateSelect = '#formModel [data-cy="Client_select"]';
+ const addressCreateSelect = '#formModel [data-cy="Address_select"]';
+ const agencyCreateSelect = '#formModel [data-cy="Agency_select"]';
+
beforeEach(() => {
cy.login('developer');
cy.viewport(1920, 1080);
@@ -8,16 +12,14 @@ describe('OrderList', () => {
it('create order', () => {
cy.get('[data-cy="vnTableCreateBtn"]').click();
- cy.get('[data-cy="Client_select"]').type('1101');
- cy.get('.q-menu').contains('Bruce Wayne').click();
- cy.get('[data-cy="Address_select"]').click();
+ cy.selectOption(clientCreateSelect, 1101);
+ cy.get(addressCreateSelect).click();
cy.get(
'.q-menu > div> div.q-item:nth-child(1) >div.q-item__section--avatar > i',
).should('have.text', 'star');
- cy.get('.q-menu > div> .q-item:nth-child(1)').click();
cy.dataCy('landedDate').find('input').type('06/01/2001');
- cy.get('.q-card [data-cy="Agency_select"]').click();
- cy.get('.q-menu > div> .q-item:nth-child(1)').click();
+ cy.selectOption(agencyCreateSelect, 1);
+
cy.intercept('GET', /\/api\/Orders\/\d/).as('orderSale');
cy.get('[data-cy="FormModelPopup_save"] > .q-btn__content > .block').click();
cy.wait('@orderSale');
@@ -32,7 +34,7 @@ describe('OrderList', () => {
cy.dataCy('Customer ID_input').type('1101{enter}');
cy.dataCy('vnTableCreateBtn').click();
cy.dataCy('landedDate').find('input').type('06/01/2001');
- cy.get('.q-card [data-cy="Agency_select"]').click();
+ cy.get(agencyCreateSelect).click();
cy.get('.q-menu > div> .q-item:nth-child(1)').click();
cy.intercept('GET', /\/api\/Orders\/\d/).as('orderSale');
cy.get('[data-cy="FormModelPopup_save"] > .q-btn__content > .block').click();
@@ -54,10 +56,11 @@ describe('OrderList', () => {
`[href="#/order/list?createForm={%22clientFk%22:${clientId},%22addressId%22:1}"] > .q-btn__content > .q-icon`,
).click();
cy.dataCy('vnTableCreateBtn').click();
- cy.get('[data-cy="Client_select"]').should('have.value', 'Bruce Wayne');
- cy.get('[data-cy="Address_select"]').should('have.value', 'Bruce Wayne');
+
+ cy.get(clientCreateSelect).should('have.value', 'Bruce Wayne');
+ cy.get(addressCreateSelect).should('have.value', 'Bruce Wayne');
cy.dataCy('landedDate').find('input').type('06/01/2001');
- cy.get('.q-card [data-cy="Agency_select"]').click();
+ cy.get(agencyCreateSelect).click();
cy.get('.q-menu > div> .q-item:nth-child(1)').click();
cy.intercept('GET', /\/api\/Orders\/\d/).as('orderSale');
cy.get('[data-cy="FormModelPopup_save"] > .q-btn__content > .block').click();
diff --git a/test/cypress/integration/route/routeExtendedList.spec.js b/test/cypress/integration/route/routeExtendedList.spec.js
index e3505ad60..5fda93b25 100644
--- a/test/cypress/integration/route/routeExtendedList.spec.js
+++ b/test/cypress/integration/route/routeExtendedList.spec.js
@@ -32,18 +32,18 @@ describe.skip('Route extended list', () => {
const originalFields = [
{ selector: selectors.worker, type: 'select', value: 'logistic' },
- { selector: selectors.agency, type: 'select', value: 'Super-Man delivery' },
+ { selector: selectors.agency, type: 'select', value: 'inhouse pickup' },
{ selector: selectors.vehicle, type: 'select', value: '3333-IMK' },
- { selector: selectors.date, type: 'date', value: '01/02/2024' },
+ { selector: selectors.date, type: 'date', value: '01/01/2001' },
{ selector: selectors.description, type: 'input', value: 'Test route' },
{ selector: selectors.served, type: 'checkbox', value: checkboxState.uncheck },
];
const updateFields = [
{ selector: selectors.worker, type: 'select', value: 'salesperson' },
- { selector: selectors.agency, type: 'select', value: 'inhouse pickup' },
+ { selector: selectors.agency, type: 'select', value: 'Super-Man delivery' },
{ selector: selectors.vehicle, type: 'select', value: '1111-IMK' },
- { selector: selectors.date, type: 'date', value: '01/01/2001' },
+ { selector: selectors.date, type: 'date', value: '11/01/2001' },
{ selector: selectors.description, type: 'input', value: 'Description updated' },
{ selector: selectors.served, type: 'checkbox', value: checkboxState.check },
];
@@ -57,11 +57,11 @@ describe.skip('Route extended list', () => {
break;
case 'input':
cy.get(selector).should('be.visible').click();
- cy.dataCy('null_input').clear().type(`${value}{enter}`);
+ cy.dataCy('null_input').clear().type(`${value}`);
break;
case 'date':
cy.get(selector).should('be.visible').click();
- cy.dataCy('null_inputDate').clear().type(`${value}{enter}`);
+ cy.dataCy('null_inputDate').clear().type(`${value}`);
break;
case 'checkbox':
cy.get(selector).should('be.visible').click().click();
@@ -76,15 +76,6 @@ describe.skip('Route extended list', () => {
cy.typeSearchbar('{enter}');
});
- after(() => {
- cy.visit(url);
- cy.typeSearchbar('{enter}');
- cy.get(selectors.lastRowSelectCheckBox).click();
-
- cy.get(selectors.removeBtn).click();
- cy.dataCy(selectors.confirmBtn).click();
- });
-
it('Should list routes', () => {
cy.get('.q-table')
.children()
@@ -97,9 +88,9 @@ describe.skip('Route extended list', () => {
const data = {
Worker: { val: 'logistic', type: 'select' },
- Agency: { val: 'Super-Man delivery', type: 'select' },
+ Agency: { val: 'inhouse pickup', type: 'select' },
Vehicle: { val: '3333-IMK', type: 'select' },
- Date: { val: '02-01-2024', type: 'date' },
+ Date: { val: '01-01-2001', type: 'date' },
From: { val: '01-01-2024', type: 'date' },
To: { val: '10-01-2024', type: 'date' },
'Km start': { val: 1000 },
@@ -129,7 +120,7 @@ describe.skip('Route extended list', () => {
it('Should clone selected route', () => {
cy.get(selectors.lastRowSelectCheckBox).click();
cy.get(selectors.cloneBtn).click();
- cy.dataCy('route.Starting date_inputDate').type('10-05-2001{enter}');
+ cy.dataCy('route.Starting date_inputDate').type('10-05-2001').click();
cy.get('.q-card__actions > .q-btn--standard > .q-btn__content').click();
cy.validateContent(selectors.date, '05/10/2001');
});
@@ -142,10 +133,6 @@ describe.skip('Route extended list', () => {
const fileName = 'download.zip';
cy.readFile(`${downloadsFolder}/${fileName}`).should('exist');
-
- cy.task('deleteFile', `${downloadsFolder}/${fileName}`).then((deleted) => {
- expect(deleted).to.be.true;
- });
});
it('Should mark as served the selected route', () => {
@@ -165,6 +152,13 @@ describe.skip('Route extended list', () => {
cy.checkNotification(dataSaved);
});
+ it('Should add ticket to route', () => {
+ cy.dataCy('tableAction-0').last().click();
+ cy.get(selectors.firstTicketsRowSelectCheckBox).click();
+ cy.get('.q-card__actions > .q-btn--standard > .q-btn__content').click();
+ cy.checkNotification(dataSaved);
+ });
+
it('Should save changes in route', () => {
updateFields.forEach(({ selector, type, value }) => {
fillField(selector, type, value);
@@ -175,18 +169,15 @@ describe.skip('Route extended list', () => {
cy.typeSearchbar('{enter}');
- updateFields.forEach(({ selector, value }) => {
+ updateFields.forEach(({ selector, value, type }) => {
+ if (type === 'date') {
+ const [month, day, year] = value.split('/');
+ value = `${day}/${month}/${year}`;
+ }
cy.validateContent(selector, value);
});
});
- it('Should add ticket to route', () => {
- cy.dataCy('tableAction-0').last().click();
- cy.get(selectors.firstTicketsRowSelectCheckBox).click();
- cy.get('.q-card__actions > .q-btn--standard > .q-btn__content').click();
- cy.checkNotification(dataSaved);
- });
-
it('Should open summary pop-up when click summuary icon', () => {
cy.dataCy('tableAction-1').last().click();
cy.get('.summaryHeader > :nth-child(2').should('contain', updateFields[4].value);
diff --git a/test/cypress/integration/ticket/negative/TicketLackDetail.spec.js b/test/cypress/integration/ticket/negative/TicketLackDetail.spec.js
index 90566bbcf..19f4dc3b2 100644
--- a/test/cypress/integration/ticket/negative/TicketLackDetail.spec.js
+++ b/test/cypress/integration/ticket/negative/TicketLackDetail.spec.js
@@ -1,5 +1,5 @@
///
-describe('Ticket Lack detail', () => {
+describe.skip('Ticket Lack detail', () => {
beforeEach(() => {
cy.login('developer');
cy.intercept('GET', /\/api\/Tickets\/itemLack\/5.*$/, {
diff --git a/test/cypress/integration/ticket/ticketList.spec.js b/test/cypress/integration/ticket/ticketList.spec.js
index 25ee05033..2409dd149 100644
--- a/test/cypress/integration/ticket/ticketList.spec.js
+++ b/test/cypress/integration/ticket/ticketList.spec.js
@@ -38,8 +38,8 @@ describe('TicketList', () => {
it('filter client and create ticket', () => {
cy.intercept('GET', /\/api\/Tickets\/filter/).as('ticketSearchbar');
searchResults();
+ cy.wait('@ticketSearchbar');
- cy.intercept('GET', /\/api\/Tickets\/filter/).as('ticketFilter');
cy.dataCy('Customer ID_input').clear('1');
cy.dataCy('Customer ID_input').type('1101{enter}');
diff --git a/test/cypress/integration/vnComponent/VnSearchBar.spec.js b/test/cypress/integration/vnComponent/VnSearchBar.spec.js
index 11d9bbe6a..8fed23643 100644
--- a/test/cypress/integration/vnComponent/VnSearchBar.spec.js
+++ b/test/cypress/integration/vnComponent/VnSearchBar.spec.js
@@ -27,7 +27,7 @@ describe('VnSearchBar', () => {
const searchAndCheck = (searchTerm, expectedText) => {
cy.clearSearchbar();
cy.typeSearchbar(`${searchTerm}{enter}`);
- cy.get(idGap).should('have.text', expectedText);
+ cy.get(idGap).should('include.text', expectedText);
};
const checkTableLength = (expectedLength) => {
diff --git a/test/cypress/integration/wagon/wagonCreate.spec.js b/test/cypress/integration/wagon/wagonCreate.spec.js
index 6d185ea69..88855fdf9 100644
--- a/test/cypress/integration/wagon/wagonCreate.spec.js
+++ b/test/cypress/integration/wagon/wagonCreate.spec.js
@@ -1,4 +1,4 @@
-describe.skip('WagonCreate', () => {
+describe('WagonCreate', () => {
beforeEach(() => {
cy.viewport(1280, 720);
cy.login('developer');
@@ -17,7 +17,7 @@ describe.skip('WagonCreate', () => {
'.grid-create > [label="Volume"] > .q-field > .q-field__inner > .q-field__control > .q-field__control-container > [data-cy="Volume_input"]',
).type('100');
cy.selectOption('[data-cy="Type_select"]', '1');
-
+ cy.dataCy('FormModelPopup_save').click();
cy.get('[title="Remove"] > .q-btn__content > .q-icon').first().click();
});
});
diff --git a/test/cypress/integration/wagon/wagonType/wagonTypeCreate.spec.js b/test/cypress/integration/wagon/wagonType/wagonTypeCreate.spec.js
index 49d7d9f01..915927a6d 100644
--- a/test/cypress/integration/wagon/wagonType/wagonTypeCreate.spec.js
+++ b/test/cypress/integration/wagon/wagonType/wagonTypeCreate.spec.js
@@ -2,7 +2,7 @@ describe('WagonTypeCreate', () => {
beforeEach(() => {
cy.viewport(1920, 1080);
cy.login('developer');
- cy.visit('/#/wagon/type/create');
+ cy.visit('/#/wagon/type/list');
cy.waitForElement('.q-page', 6000);
});
diff --git a/test/cypress/integration/zone/zoneBasicData.spec.js b/test/cypress/integration/zone/zoneBasicData.spec.js
index 6db39b072..2d255d959 100644
--- a/test/cypress/integration/zone/zoneBasicData.spec.js
+++ b/test/cypress/integration/zone/zoneBasicData.spec.js
@@ -1,5 +1,5 @@
describe('ZoneBasicData', () => {
- const priceBasicData = '[data-cy="Price_input"]';
+ const priceBasicData = '[data-cy="ZoneBasicDataPrice"]';
const saveBtn = '.q-btn-group > .q-btn--standard';
beforeEach(() => {
@@ -8,20 +8,13 @@ describe('ZoneBasicData', () => {
cy.visit('/#/zone/4/basic-data');
});
- it('should throw an error if the name is empty', () => {
- cy.get('[data-cy="zone-basic-data-name"] input').type('{selectall}{backspace}');
-
- cy.get(saveBtn).click();
- cy.checkNotification("can't be blank");
- });
-
it('should throw an error if the price is empty', () => {
cy.get(priceBasicData).clear();
cy.get(saveBtn).click();
- cy.checkNotification('cannot be blank');
+ cy.get('.q-field__messages > div').should('have.text', 'Field required');
});
- it("should edit the basicData's zone", () => {
+ it("should edit the basicData's zone name", () => {
cy.get('.q-card > :nth-child(1)').type(' modified');
cy.get(saveBtn).click();
cy.checkNotification('Data saved');
diff --git a/test/cypress/integration/zone/zoneCalendar.spec.js b/test/cypress/integration/zone/zoneCalendar.spec.js
new file mode 100644
index 000000000..07661a17d
--- /dev/null
+++ b/test/cypress/integration/zone/zoneCalendar.spec.js
@@ -0,0 +1,51 @@
+describe('ZoneCalendar', () => {
+ const addEventBtn = '.q-page-sticky > div > .q-btn';
+ const submitBtn = '.q-mt-lg > .q-btn--standard';
+ const deleteBtn = '[data-cy="ZoneEventsPanelDeleteBtn"]';
+
+ beforeEach(() => {
+ cy.login('developer');
+ cy.viewport(1920, 1080);
+ cy.visit(`/#/zone/13/events`);
+ });
+
+ it('should include a one day event, then delete it', () => {
+ cy.get(addEventBtn).click();
+ cy.dataCy('ZoneEventInclusionDayRadio').click();
+ cy.get('.q-card > :nth-child(5)').type('01/01/2001');
+ cy.get(submitBtn).click();
+ cy.get(deleteBtn).click();
+ cy.dataCy('VnConfirm_confirm').click();
+ });
+
+ it('should include an indefinitely event for monday and tuesday', () => {
+ cy.get(addEventBtn).click();
+ cy.get('.flex > .q-gutter-x-sm > :nth-child(1)').click();
+ cy.get('.flex > .q-gutter-x-sm > :nth-child(2)').click();
+ cy.get(submitBtn).click();
+ cy.get(deleteBtn).click();
+ cy.dataCy('VnConfirm_confirm').click();
+ });
+
+ it('should include a range of dates event', () => {
+ cy.get(addEventBtn).click();
+ cy.dataCy('ZoneEventInclusionRangeRadio').click();
+ cy.get('.flex > .q-gutter-x-sm > :nth-child(1)').click();
+ cy.dataCy('From_inputDate').type('01/01/2001');
+ cy.dataCy('To_inputDate').type('31/01/2001');
+ cy.get(submitBtn).click();
+ cy.get(deleteBtn).click();
+ cy.dataCy('VnConfirm_confirm').click();
+ });
+
+ it('should exclude an event', () => {
+ cy.get('.q-mb-sm > .q-radio__inner').click();
+ cy.get('.q-current-day > .q-calendar-month__day--label__wrapper').click();
+ cy.get('.q-mt-lg > .q-btn--standard').click();
+ cy.get(
+ '.q-current-day > .q-calendar-month__day--content > [data-cy="ZoneCalendarDay"]',
+ ).click();
+ cy.dataCy('ZoneEventExclusionDeleteBtn').click();
+ cy.dataCy('VnConfirm_confirm').click();
+ });
+});
diff --git a/test/cypress/integration/zone/zoneCreate.spec.js b/test/cypress/integration/zone/zoneCreate.spec.js
index 9ef1945bf..fadf5b07f 100644
--- a/test/cypress/integration/zone/zoneCreate.spec.js
+++ b/test/cypress/integration/zone/zoneCreate.spec.js
@@ -1,4 +1,4 @@
-describe.skip('ZoneCreate', () => {
+describe('ZoneCreate', () => {
const data = {
Name: { val: 'Zone pickup D' },
Price: { val: '3' },
diff --git a/test/cypress/integration/zone/zoneDeliveryDays.spec.js b/test/cypress/integration/zone/zoneDeliveryDays.spec.js
index 1e1fc8ff5..291c20ce3 100644
--- a/test/cypress/integration/zone/zoneDeliveryDays.spec.js
+++ b/test/cypress/integration/zone/zoneDeliveryDays.spec.js
@@ -1,15 +1,61 @@
describe('ZoneDeliveryDays', () => {
+ const postcode = '46680';
+ const agency = 'Gotham247Expensive';
+ const submitForm = '.q-form > .q-btn > .q-btn__content';
beforeEach(() => {
cy.login('developer');
cy.viewport(1920, 1080);
cy.visit(`/#/zone/delivery-days`);
});
- it('should query for the day', () => {
+ it('should return no data when querying without params', () => {
cy.get('.q-form > .q-btn > .q-btn__content').click();
cy.get('.q-notification__message').should(
'have.text',
- 'No service for the specified zone'
+ 'No service for the specified zone',
);
});
+
+ it('should query for delivery', () => {
+ cy.intercept('GET', /\/api\/Zones\/getEvents/, (req) => {
+ req.headers['cache-control'] = 'no-cache';
+ req.headers['pragma'] = 'no-cache';
+ req.headers['expires'] = '0';
+ req.on('response', (res) => {
+ delete res.headers['if-none-match'];
+ delete res.headers['if-modified-since'];
+ });
+ }).as('events');
+
+ cy.dataCy('ZoneDeliveryDaysPostcodeSelect').type(postcode);
+ cy.get('.q-menu .q-item').contains(postcode).click();
+ cy.get('.q-menu').then(($menu) => {
+ if ($menu.is(':visible')) {
+ cy.get('[data-cy="ZoneDeliveryDaysPostcodeSelect"]')
+ .as('focusedElement')
+ .focus();
+ cy.get('@focusedElement').blur();
+ }
+ });
+ cy.get('.q-menu').should('not.exist');
+
+ cy.dataCy('ZoneDeliveryDaysAgencySelect').type(agency);
+ cy.get('.q-menu .q-item').contains(agency).click();
+ cy.get('.q-menu').then(($menu) => {
+ if ($menu.is(':visible')) {
+ cy.get('[data-cy="ZoneDeliveryDaysAgencySelect"]')
+ .as('focusedElement')
+ .focus();
+ cy.get('@focusedElement').blur();
+ }
+ });
+ cy.get('.q-menu').should('not.exist');
+
+ cy.get(submitForm).click();
+ cy.wait('@events').then((interception) => {
+ cy.log('interception: ', interception);
+ const data = interception.response.body.events;
+ expect(data.length).to.be.greaterThan(0);
+ });
+ });
});
diff --git a/test/cypress/integration/zone/zoneList.spec.js b/test/cypress/integration/zone/zoneList.spec.js
index 68e924635..c84b1b017 100644
--- a/test/cypress/integration/zone/zoneList.spec.js
+++ b/test/cypress/integration/zone/zoneList.spec.js
@@ -1,21 +1,25 @@
describe('ZoneList', () => {
const agency = 'inhouse pickup';
+ const firstSummaryIcon =
+ ':nth-child(1) > .q-table--col-auto-width > [data-cy="tableAction-0"]';
beforeEach(() => {
cy.viewport(1280, 720);
cy.login('developer');
cy.visit('/#/zone/list');
- });
-
- it('should filter by agency', () => {
- cy.dataCy('zoneFilterPanelNameInput').type('{downArrow}{enter}');
+ cy.typeSearchbar('{enter}');
});
it('should open the zone summary', () => {
- cy.dataCy('zoneFilterPanelAgencySelect').type(agency);
- cy.get('.q-menu .q-item').contains(agency).click();
- cy.get(':nth-child(1) > [data-col-field="agencyModeFk"]').should(
- 'include.text',
- agency,
- );
+ cy.get(firstSummaryIcon).click();
+ cy.get('.header > .q-icon').click();
+ cy.url().should('include', 'zone/1/summary');
+ });
+
+ it('should clone the zone', () => {
+ cy.get('.router-link-active > .q-icon').click();
+ cy.dataCy('tableAction-1').eq(1).click();
+ cy.dataCy('VnConfirm_confirm').click();
+ cy.url().should('not.include', 'zone/2/');
+ cy.url().should('match', /zone\/\d+\/basic-data/);
});
});
diff --git a/test/cypress/integration/zone/zoneLocations.spec.js b/test/cypress/integration/zone/zoneLocations.spec.js
new file mode 100644
index 000000000..cdc2c778b
--- /dev/null
+++ b/test/cypress/integration/zone/zoneLocations.spec.js
@@ -0,0 +1,26 @@
+describe('ZoneLocations', () => {
+ const data = {
+ Warehouse: { val: 'Warehouse One', type: 'select' },
+ };
+
+ const postalCode =
+ '[style=""] > :nth-child(1) > :nth-child(1) > :nth-child(2) > :nth-child(1) > :nth-child(1) > :nth-child(2) > :nth-child(1) > .q-tree__node--parent > .q-tree__node-collapsible > .q-tree__children';
+
+ beforeEach(() => {
+ cy.viewport(1280, 720);
+ cy.login('developer');
+ cy.visit(`/#/zone/2/location`);
+ });
+
+ it('should show all locations on entry', () => {
+ cy.get('.q-tree > :nth-child(1) > :nth-child(2) > :nth-child(1)')
+ .children()
+ .should('have.length', 9);
+ });
+
+ it('should be able to search by postal code', () => {
+ cy.get('#searchbarForm').type('46680');
+ cy.get('.router-link-active > .q-icon').click();
+ cy.get(postalCode).should('include.text', '46680');
+ });
+});
diff --git a/test/cypress/integration/zone/zoneSummary.spec.js b/test/cypress/integration/zone/zoneSummary.spec.js
new file mode 100644
index 000000000..fa9c5353c
--- /dev/null
+++ b/test/cypress/integration/zone/zoneSummary.spec.js
@@ -0,0 +1,22 @@
+describe('ZoneSummary', () => {
+ const agency = 'inhouse pickup';
+ beforeEach(() => {
+ cy.viewport(1280, 720);
+ cy.login('developer');
+ cy.visit('/#/zone/2/summary');
+ });
+
+ it('should clone the zone, then delete it', () => {
+ cy.dataCy('descriptor-more-opts').click();
+ cy.dataCy('Clone_button').click();
+ cy.dataCy('VnConfirm_confirm').click();
+ cy.url().should('not.include', 'zone/2/');
+ cy.url().should('match', /zone\/\d+\/basic-data/);
+ cy.get('.list-box > :nth-child(1)').should('include.text', agency);
+ cy.get('.title > span').should('include.text', 'Zone pickup B');
+ cy.get('.q-page').should('exist');
+ cy.dataCy('descriptor-more-opts').click();
+ cy.dataCy('Delete_button').click();
+ cy.dataCy('VnConfirm_confirm').click();
+ });
+});
diff --git a/test/cypress/integration/zone/zoneUpcomingDeliveries.spec.js b/test/cypress/integration/zone/zoneUpcomingDeliveries.spec.js
index 28e2222d4..576b2ea70 100644
--- a/test/cypress/integration/zone/zoneUpcomingDeliveries.spec.js
+++ b/test/cypress/integration/zone/zoneUpcomingDeliveries.spec.js
@@ -1,9 +1,17 @@
describe('ZoneUpcomingDeliveries', () => {
+ const tableFields = (opt) =>
+ `:nth-child(1) > .q-table__container > .q-table__middle > .q-table > thead > tr > :nth-child(${opt})`;
+
beforeEach(() => {
cy.login('developer');
cy.viewport(1920, 1080);
cy.visit(`/#/zone/upcoming-deliveries`);
});
- it('should show the page', () => {});
+ it('should show the page', () => {
+ cy.get('.q-card').should('be.visible');
+ cy.get(tableFields(1)).should('be.visible').should('have.text', 'Province');
+ cy.get(tableFields(2)).should('be.visible').should('have.text', 'Closing');
+ cy.get(tableFields(3)).should('be.visible').should('have.text', 'Id');
+ });
});
diff --git a/test/cypress/integration/zone/zoneWarehouse.spec.js b/test/cypress/integration/zone/zoneWarehouse.spec.js
index f231ecd4f..bca5ced22 100644
--- a/test/cypress/integration/zone/zoneWarehouse.spec.js
+++ b/test/cypress/integration/zone/zoneWarehouse.spec.js
@@ -1,20 +1,19 @@
-describe.skip('ZoneWarehouse', () => {
+describe('ZoneWarehouse', () => {
const data = {
- Warehouse: { val: 'Warehouse One', type: 'select' },
+ Warehouse: { val: 'Warehouse Two', type: 'select' },
};
-
const dataError = 'The introduced warehouse already exists';
const saveBtn = '.q-btn--standard > .q-btn__content > .block';
beforeEach(() => {
cy.viewport(1280, 720);
cy.login('developer');
- cy.visit(`/#/zone/2/warehouses`);
+ cy.visit(`/#/zone/1/warehouses`);
});
it('should throw an error if the warehouse chosen is already put in the zone', () => {
cy.addBtnClick();
- cy.dataCy('Warehouse_select').type('Warehouse Two{enter}');
+ cy.dataCy('Warehouse_select').type('Warehouse One{enter}');
cy.get(saveBtn).click();
cy.checkNotification(dataError);
});
@@ -26,7 +25,5 @@ describe.skip('ZoneWarehouse', () => {
cy.get('.q-mt-lg > .q-btn--standard').click();
cy.get('tbody > :nth-child(2) > :nth-child(2) > .q-icon').click();
cy.get('[title="Confirm"]').click();
-
- cy.reload();
});
});