+
diff --git a/src/components/common/VnCard.vue b/src/components/common/VnCard.vue
index 21cdc9df5..50b041060 100644
--- a/src/components/common/VnCard.vue
+++ b/src/components/common/VnCard.vue
@@ -1,5 +1,5 @@
@@ -227,7 +223,7 @@ onMounted(() => {
{{ t('account.card.actions.deactivateUser.name') }}
en:
params:
+ departmentFk: Department
search: Contains
clientFk: Customer
clientName: Customer
@@ -127,6 +128,7 @@ en:
zoneFk: Zone
es:
params:
+ departmentFk: Departamento
search: Contiene
clientFk: Cliente
clientName: Cliente
diff --git a/src/pages/Customer/Card/CustomerBalance.vue b/src/pages/Customer/Card/CustomerBalance.vue
index 15f80b2f6..4855fadc0 100644
--- a/src/pages/Customer/Card/CustomerBalance.vue
+++ b/src/pages/Customer/Card/CustomerBalance.vue
@@ -25,7 +25,7 @@ import WorkerDescriptorProxy from 'src/pages/Worker/Card/WorkerDescriptorProxy.v
const { openConfirmationModal } = useVnConfirm();
const { sendEmail, openReport } = usePrintService();
const { t } = useI18n();
-const { hasAny } = useAcl();
+const { hasAcl } = useAcl();
const quasar = useQuasar();
const route = useRoute();
@@ -276,9 +276,7 @@ const showBalancePdf = ({ id }) => {
>
diff --git a/src/pages/Customer/CustomerFilter.vue b/src/pages/Customer/CustomerFilter.vue
index 55a7f565e..107a08144 100644
--- a/src/pages/Customer/CustomerFilter.vue
+++ b/src/pages/Customer/CustomerFilter.vue
@@ -156,6 +156,7 @@ en:
email: Email
isToBeMailed: Mailed
isEqualizated: Equailized
+ departmentFk: Department
businessTypeFk: Business type
sageTaxTypeFk: Sage Tax Type
sageTransactionTypeFk: Sage Tax Type
@@ -166,6 +167,7 @@ en:
postcode: Postcode
es:
params:
+ departmentFk: Departamento
search: Contiene
fi: NIF
isActive: Activo
diff --git a/src/pages/Customer/Defaulter/CustomerDefaulterFilter.vue b/src/pages/Customer/Defaulter/CustomerDefaulterFilter.vue
index 64e3baeb5..f7d4163d1 100644
--- a/src/pages/Customer/Defaulter/CustomerDefaulterFilter.vue
+++ b/src/pages/Customer/Defaulter/CustomerDefaulterFilter.vue
@@ -192,8 +192,10 @@ en:
date: L. O. Date
credit: Credit I.
defaulterSinced: From
+ departmentFk: Department
es:
params:
+ departmentFk: Departamento
clientFk: Cliente
countryFk: País
paymentMethod: F. Pago
diff --git a/src/pages/Monitor/MonitorClients.vue b/src/pages/Monitor/MonitorClients.vue
index c814d623e..2ba5f4c0b 100644
--- a/src/pages/Monitor/MonitorClients.vue
+++ b/src/pages/Monitor/MonitorClients.vue
@@ -9,12 +9,14 @@ import VnInputDate from 'src/components/common/VnInputDate.vue';
import VnRow from 'src/components/ui/VnRow.vue';
import { dateRange } from 'src/filters';
import useOpenURL from 'src/composables/useOpenURL';
+import { useState } from 'src/composables/useState';
const { t } = useI18n();
const dates = dateRange(Date.vnNew());
const from = ref(dates[0]);
const to = ref(dates[1]);
+const state = useState();
const filter = computed(() => {
const obj = {};
const formatFrom = setHours(from.value, 'from');
@@ -24,16 +26,18 @@ const filter = computed(() => {
if (!formatFrom && formatTo) stamp = { lte: formatTo };
else if (formatFrom && !formatTo) stamp = { gte: formatFrom };
else if (formatFrom && formatTo) stamp = { between: [formatFrom, formatTo] };
-
- return Object.assign(obj, { where: { 'v.stamp': stamp } });
+ return Object.assign(obj, {
+ where: {
+ 'v.stamp': stamp,
+ 'c.departmentFk': state.getUser().value.departmentFk,
+ },
+ });
});
function exprBuilder(param, value) {
switch (param) {
case 'clientFk':
return { [`c.id`]: value };
- case 'departmentFk':
- return { [`c.${param}`]: value };
}
}
@@ -66,9 +70,13 @@ const columns = computed(() => [
align: 'left',
name: 'departmentFk',
label: t('customer.summary.team'),
- component: 'select',
- attrs: {
- url: 'Departments',
+ columnFilter: {
+ component: 'select',
+ attrs: {
+ url: 'Departments',
+ },
+ alias: 'c',
+ inWhere: true,
},
columnField: {
component: null,
diff --git a/src/pages/Order/Card/OrderFilter.vue b/src/pages/Order/Card/OrderFilter.vue
index 609a1215a..5f91153ac 100644
--- a/src/pages/Order/Card/OrderFilter.vue
+++ b/src/pages/Order/Card/OrderFilter.vue
@@ -130,8 +130,10 @@ en:
myTeam: My Team
isConfirmed: Order Confirmed
showEmpty: Show Empty
+ departmentFk: Department
es:
params:
+ departmentFk: Departamento
search: Búsqueda
clientFk: Cliente
agencyModeFk: Agencia
diff --git a/src/pages/Route/Agency/Card/AgencyCard.vue b/src/pages/Route/Agency/Card/AgencyCard.vue
index c21298470..9fd3fe5e5 100644
--- a/src/pages/Route/Agency/Card/AgencyCard.vue
+++ b/src/pages/Route/Agency/Card/AgencyCard.vue
@@ -3,5 +3,5 @@ import AgencyDescriptor from 'pages/Route/Agency/Card/AgencyDescriptor.vue';
import VnCard from 'src/components/common/VnCard.vue';
-
+
diff --git a/src/pages/Route/locale/en.yml b/src/pages/Route/locale/en.yml
index 283b61855..e7e2d691e 100644
--- a/src/pages/Route/locale/en.yml
+++ b/src/pages/Route/locale/en.yml
@@ -50,7 +50,7 @@ route:
agencyAgreement: Agency agreement
agencyModeName: Agency route
isOwn: Own
- isAnyVolumeallowed: Any volume allowed
+ isAnyVolumeAllowed: Any volume allowed
Worker: Worker
Agency: Agency
Vehicle: Vehicle
diff --git a/src/pages/Ticket/Card/BasicData/TicketBasicDataForm.vue b/src/pages/Ticket/Card/BasicData/TicketBasicDataForm.vue
index 9d70fea38..61932468c 100644
--- a/src/pages/Ticket/Card/BasicData/TicketBasicDataForm.vue
+++ b/src/pages/Ticket/Card/BasicData/TicketBasicDataForm.vue
@@ -25,9 +25,7 @@ const { validate } = useValidator();
const { notify } = useNotify();
const router = useRouter();
const { t } = useI18n();
-const canEditZone = useAcl().hasAny([
- { model: 'Ticket', props: 'editZone', accessType: 'WRITE' },
-]);
+const canEditZone = useAcl().hasAcl('Ticket', 'editZone', 'WRITE');
const agencyFetchRef = ref();
const warehousesOptions = ref([]);
diff --git a/src/pages/Ticket/Card/TicketSale.vue b/src/pages/Ticket/Card/TicketSale.vue
index 3960243aa..c5f7d5856 100644
--- a/src/pages/Ticket/Card/TicketSale.vue
+++ b/src/pages/Ticket/Card/TicketSale.vue
@@ -187,7 +187,9 @@ const getRowUpdateInputEvents = (sale) => {
const resetChanges = async () => {
arrayData.fetch({ append: false });
- tableRef.value.reload();
+ tableRef.value.CrudModelRef.hasChanges = false;
+ await tableRef.value.reload();
+
selectedRows.value = [];
};
const changeQuantity = async (sale) => {
@@ -392,7 +394,7 @@ const changeTicketState = async (val) => {
const params = { ticketFk: route.params.id, code: val };
await axios.post('Tickets/state', params);
notify('globals.dataSaved', 'positive');
- await resetChanges();
+ resetChanges();
};
const removeSelectedSales = () => {
diff --git a/src/pages/Ticket/Card/TicketSaleMoreActions.vue b/src/pages/Ticket/Card/TicketSaleMoreActions.vue
index 773b0807f..37441b44f 100644
--- a/src/pages/Ticket/Card/TicketSaleMoreActions.vue
+++ b/src/pages/Ticket/Card/TicketSaleMoreActions.vue
@@ -55,13 +55,12 @@ const isClaimable = computed(() => {
if (ticket.value) {
const landedPlusWeek = new Date(ticket.value.landed);
landedPlusWeek.setDate(landedPlusWeek.getDate() + 7);
- const createAfterDeadline = acl.hasAny([
- { model: 'Claim', props: 'createAfterDeadline', accessType: 'WRITE' },
- ]);
+ const createAfterDeadline = acl.hasAcl('Claim', 'createAfterDeadline', 'WRITE');
return landedPlusWeek >= Date.vnNew() || createAfterDeadline;
}
return false;
});
+
const sendSms = async (params) => {
await axios.post(`Tickets/${ticket.value.id}/sendSms`, params);
notify(t('SMS sent'), 'positive');
@@ -230,18 +229,6 @@ const createRefund = async (withWarehouse) => {
{{ t('Add claim') }}
-
-
- {{ t('Mark as reserved') }}
-
-
{{ t('Refund') }}
@@ -287,8 +274,6 @@ es:
Recalculate price: Recalcular precio
Update discount: Actualizar descuento
Add claim: Crear reclamación
- Mark as reserved: Marcar como reservado
- Unmark as reserved: Desmarcar como reservado
Refund: Abono
with warehouse: con almacén
without warehouse: sin almacén
diff --git a/src/pages/Ticket/TicketFilter.vue b/src/pages/Ticket/TicketFilter.vue
index b763ef970..d84d1c082 100644
--- a/src/pages/Ticket/TicketFilter.vue
+++ b/src/pages/Ticket/TicketFilter.vue
@@ -22,16 +22,6 @@ const states = ref([]);
const agencies = ref([]);
const warehouses = ref([]);
const groupedStates = ref([]);
-
-const getGroupedStates = (data) => {
- for (const state of data) {
- groupedStates.value.push({
- id: state.id,
- name: t(`${state.code}`),
- code: state.code,
- });
- }
-};
@@ -39,12 +29,11 @@ const getGroupedStates = (data) => {
(states = data)" auto-load />
{
- getGroupedStates(data);
- }
- "
auto-load
+ @on-fetch="
+ (data) =>
+ (groupedStates = data.map((x) => Object.assign(x, { code: t(x.code) })))
+ "
/>
{
diff --git a/src/pages/Travel/Card/TravelCard.vue b/src/pages/Travel/Card/TravelCard.vue
index 479b47fb9..d452f5287 100644
--- a/src/pages/Travel/Card/TravelCard.vue
+++ b/src/pages/Travel/Card/TravelCard.vue
@@ -8,6 +8,6 @@ import filter from './TravelFilter.js';
data-key="Travel"
url="Travels"
:descriptor="TravelDescriptor"
- :filter="filter"
+ :filter="{ ...filter, where: { id: $route.params.id } }"
/>
diff --git a/src/pages/Travel/Card/TravelDescriptorMenuItems.vue b/src/pages/Travel/Card/TravelDescriptorMenuItems.vue
index 14d824b86..f8828bffe 100644
--- a/src/pages/Travel/Card/TravelDescriptorMenuItems.vue
+++ b/src/pages/Travel/Card/TravelDescriptorMenuItems.vue
@@ -37,7 +37,7 @@ const cloneTravelWithEntries = async () => {
router.push({ name: 'TravelBasicData', params: { id: data.id } });
};
-const canDelete = computed(() => useAcl().hasAny('Travel', '*', 'WRITE'));
+const canDelete = computed(() => useAcl().hasAcl('Travel', '*', 'WRITE'));
const openDeleteEntryDialog = (id) => {
quasar
diff --git a/src/pages/Travel/Card/TravelSummary.vue b/src/pages/Travel/Card/TravelSummary.vue
index dc3f6f8c0..22e2cff86 100644
--- a/src/pages/Travel/Card/TravelSummary.vue
+++ b/src/pages/Travel/Card/TravelSummary.vue
@@ -410,18 +410,18 @@ onMounted(async () => {
-
-
+ (warehouses = data)"
+ auto-load
+ />
+
- acl.hasAny([{ model: 'Worker', props: '__get__business', accessType: 'READ' }]),
-);
+const canSeeNotes = computed(() => acl.hasAcl('Worker', '__get__business', 'READ'));
const workerIsFreelance = ref();
const WorkerFreelanceRef = ref();
const workerCalendarFilterRef = ref(null);
diff --git a/src/pages/Worker/Card/WorkerLocker.vue b/src/pages/Worker/Card/WorkerLocker.vue
index 015bced35..62891070d 100644
--- a/src/pages/Worker/Card/WorkerLocker.vue
+++ b/src/pages/Worker/Card/WorkerLocker.vue
@@ -9,7 +9,7 @@ import VnSelect from 'src/components/common/VnSelect.vue';
import { useArrayData } from 'src/composables/useArrayData';
import FetchData from 'components/FetchData.vue';
-const { hasAny } = useAcl();
+const { hasAcl } = useAcl();
const { t } = useI18n();
const fetchData = ref();
const originaLockerId = ref();
@@ -58,11 +58,7 @@ const init = async (data) => {
option-label="code"
option-value="id"
hide-selected
- :readonly="
- !hasAny([
- { model: 'Worker', props: '__get__locker', accessType: 'READ' },
- ])
- "
+ :readonly="!hasAcl('Worker', '__get__locker', 'READ')"
/>
diff --git a/src/pages/Worker/Card/WorkerTimeControl.vue b/src/pages/Worker/Card/WorkerTimeControl.vue
index 9c0fa6758..b64166c7d 100644
--- a/src/pages/Worker/Card/WorkerTimeControl.vue
+++ b/src/pages/Worker/Card/WorkerTimeControl.vue
@@ -68,13 +68,9 @@ const arrayData = useArrayData('Worker');
const acl = useAcl();
const selectedDateYear = computed(() => moment(selectedDate.value).isoWeekYear());
const worker = computed(() => arrayData.store?.data);
-const canSend = computed(() =>
- acl.hasAny([{ model: 'WorkerTimeControl', props: 'sendMail', accessType: 'WRITE' }]),
-);
+const canSend = computed(() => acl.hasAcl('WorkerTimeControl', 'sendMail', 'WRITE'));
const canUpdate = computed(() =>
- acl.hasAny([
- { model: 'WorkerTimeControl', props: 'updateMailState', accessType: 'WRITE' },
- ]),
+ acl.hasAcl('WorkerTimeControl', 'updateMailState', 'WRITE'),
);
const isHimself = computed(() => user.value.id === Number(route.params.id));
diff --git a/src/pages/Worker/WorkerFilter.vue b/src/pages/Worker/WorkerFilter.vue
index 44dfd32b4..c40afe57e 100644
--- a/src/pages/Worker/WorkerFilter.vue
+++ b/src/pages/Worker/WorkerFilter.vue
@@ -102,8 +102,11 @@ en:
lastName: Last name
userName: User
extension: Extension
+ departmentFk: Department
es:
+
params:
+ departmentFk: Departamento
search: Contiene
firstName: Nombre
lastName: Apellidos
diff --git a/src/router/modules/route.js b/src/router/modules/route.js
index 11133c50a..0dd41c86e 100644
--- a/src/router/modules/route.js
+++ b/src/router/modules/route.js
@@ -238,6 +238,7 @@ export default {
title: 'list',
icon: 'view_list',
},
+ component: () => import('src/pages/Route/RouteList.vue'),
},
routeCard,
],
@@ -286,6 +287,7 @@ export default {
title: 'list',
icon: 'view_list',
},
+ component: () => import('src/pages/Route/RouteRoadmap.vue'),
},
roadmapCard,
],
@@ -316,6 +318,8 @@ export default {
title: 'list',
icon: 'view_list',
},
+ component: () =>
+ import('src/pages/Route/Agency/AgencyList.vue'),
},
agencyCard,
],
@@ -337,6 +341,8 @@ export default {
title: 'vehicleList',
icon: 'directions_car',
},
+ component: () =>
+ import('src/pages/Route/Vehicle/VehicleList.vue'),
},
vehicleCard,
],
diff --git a/test/cypress/integration/account/accountDescriptorMenu.spec.js b/test/cypress/integration/account/accountDescriptorMenu.spec.js
index 67a7d8ef6..04fc57040 100644
--- a/test/cypress/integration/account/accountDescriptorMenu.spec.js
+++ b/test/cypress/integration/account/accountDescriptorMenu.spec.js
@@ -1,4 +1,4 @@
-describe('ClaimNotes', () => {
+describe('Account descriptor', () => {
const descriptorOptions = '[data-cy="descriptor-more-opts-menu"] > .q-list';
const url = '/#/account/1/summary';
@@ -7,6 +7,9 @@ describe('ClaimNotes', () => {
cy.visit(url);
cy.dataCy('descriptor-more-opts').click();
cy.get(descriptorOptions)
+ .should('exist')
+ .should('be.visible')
+
.find('.q-item')
.its('length')
.then((count) => {
diff --git a/test/cypress/integration/invoiceIn/invoiceInDescriptor.spec.js b/test/cypress/integration/invoiceIn/invoiceInDescriptor.spec.js
index 7058e154c..fdaa01876 100644
--- a/test/cypress/integration/invoiceIn/invoiceInDescriptor.spec.js
+++ b/test/cypress/integration/invoiceIn/invoiceInDescriptor.spec.js
@@ -13,7 +13,7 @@ describe('InvoiceInDescriptor', () => {
cy.validateCheckbox(checkbox, false);
});
- it('should delete the invoice properly', () => {
+ it.skip('should delete the invoice properly', () => {
cy.visit('/#/invoice-in/2/summary');
cy.selectDescriptorOption(2);
cy.clickConfirm();
diff --git a/test/cypress/integration/order/orderList.spec.js b/test/cypress/integration/order/orderList.spec.js
index 34cd2bffc..ee011ea05 100644
--- a/test/cypress/integration/order/orderList.spec.js
+++ b/test/cypress/integration/order/orderList.spec.js
@@ -30,9 +30,11 @@ describe('OrderList', () => {
cy.url().should('include', `/order`);
});
- it.skip('filter list and create order', () => {
+ it('filter list and create order', () => {
cy.dataCy('Customer ID_input').type('1101{enter}');
+ cy.intercept('GET', /\/api\/Clients/).as('clientFilter');
cy.dataCy('vnTableCreateBtn').click();
+ cy.wait('@clientFilter');
cy.dataCy('landedDate').find('input').type('06/01/2001');
cy.selectOption(agencyCreateSelect, 1);
diff --git a/test/cypress/integration/route/agency/agencyModes.spec.js b/test/cypress/integration/route/agency/agencyModes.spec.js
new file mode 100644
index 000000000..3f5784997
--- /dev/null
+++ b/test/cypress/integration/route/agency/agencyModes.spec.js
@@ -0,0 +1,15 @@
+describe('Agency modes', () => {
+ const name = 'inhouse pickup';
+
+ beforeEach(() => {
+ cy.viewport(1920, 1080);
+ cy.login('developer');
+ cy.visit(`/#/route/agency/1/modes`);
+ });
+
+ it('should display the agency modes page', () => {
+ cy.get('.flex > .title').should('have.text', name);
+ cy.get('.flex > .q-chip > .q-chip__content').should('have.text', 'ID: 1');
+ cy.get('.list-items > :nth-child(1) > .value').should('have.text', name);
+ });
+});
diff --git a/test/cypress/integration/route/routeAutonomous.spec.js b/test/cypress/integration/route/routeAutonomous.spec.js
index 08fd7d7ea..d77584c04 100644
--- a/test/cypress/integration/route/routeAutonomous.spec.js
+++ b/test/cypress/integration/route/routeAutonomous.spec.js
@@ -49,12 +49,12 @@ describe.skip('RouteAutonomous', () => {
cy.get(selectors.firstRowCheckbox).click();
cy.get(selectors.createInvoiceBtn).click();
cy.dataCy(selectors.reference).type(data.reference);
+ cy.dataCy('attachFile').click();
cy.get('.q-file').selectFile('test/cypress/fixtures/image.jpg', {
force: true,
});
- cy.dataCy(selectors.saveFormBtn).click();
+ cy.dataCy(selectors.saveFormBtn).should('be.visible').click();
cy.checkNotification(dataSaved);
- cy.typeSearchbar('{enter}');
});
it('Should display the total price of the selected rows', () => {
diff --git a/test/cypress/integration/route/routeExtendedList.spec.js b/test/cypress/integration/route/routeExtendedList.spec.js
index a183c08cb..e6c873d5e 100644
--- a/test/cypress/integration/route/routeExtendedList.spec.js
+++ b/test/cypress/integration/route/routeExtendedList.spec.js
@@ -53,17 +53,20 @@ describe('Route extended list', () => {
function fillField(selector, type, value) {
switch (type) {
case 'select':
- cy.get(selector).should('be.visible').click();
- cy.dataCy('null_select').clear().type(value);
+ cy.get(selector).should('be.visible').click().clear().type(value);
cy.get('.q-item').contains(value).click();
break;
case 'input':
- cy.get(selector).should('be.visible').click();
- cy.dataCy('null_input').clear().type(`${value}`);
+ cy.get(selector)
+ .should('be.visible')
+ .click()
+ .type(`{selectall}{backspace}${value}`);
break;
case 'date':
- cy.get(selector).should('be.visible').click();
- cy.dataCy('null_inputDate').clear().type(`${value}`);
+ cy.get(selector)
+ .should('be.visible')
+ .click()
+ .type(`{selectall}{backspace}${value}`);
break;
case 'checkbox':
cy.get(selector).should('be.visible').click().click();
@@ -103,8 +106,8 @@ describe('Route extended list', () => {
cy.fillInForm(data);
cy.dataCy(selectors.saveFormBtn).click();
- cy.checkNotification(dataCreated);
cy.url().should('include', '/summary');
+ cy.checkNotification(dataCreated);
});
it('Should reset changed values when click reset button', () => {
@@ -140,7 +143,7 @@ describe('Route extended list', () => {
const downloadsFolder = Cypress.config('downloadsFolder');
cy.get(selectors.lastRowSelectCheckBox).click();
cy.get(selectors.downloadBtn).click();
- cy.wait(5000);
+ cy.wait(3000);
const fileName = 'download.zip';
cy.readFile(`${downloadsFolder}/${fileName}`).should('exist');
@@ -177,7 +180,7 @@ describe('Route extended list', () => {
const [month, day, year] = value.split('/');
value = `${day}/${month}/${year}`;
}
- cy.validateContent(selector, value);
+ cy.get(selector).should('contain', value);
});
});
diff --git a/test/cypress/integration/vnComponent/VnAccountNumber.spec.js b/test/cypress/integration/vnComponent/VnAccountNumber.spec.js
deleted file mode 100644
index 053902f35..000000000
--- a/test/cypress/integration/vnComponent/VnAccountNumber.spec.js
+++ /dev/null
@@ -1,37 +0,0 @@
-describe('VnAccountNumber', () => {
- const accountInput = 'input[data-cy="supplierFiscalDataAccount_input"]';
- beforeEach(() => {
- cy.login('developer');
- cy.viewport(1920, 1080);
- cy.visit('/#/supplier/1/fiscal-data');
- });
-
- describe('VnInput handleInsertMode()', () => {
- it('should replace character at cursor position in insert mode', () => {
- cy.get(accountInput).type('{selectall}4100000001');
- cy.get(accountInput).type('{movetostart}');
- cy.get(accountInput).type('999');
- cy.get(accountInput).should('have.value', '9990000001');
- });
-
- it('should replace character at cursor position in insert mode', () => {
- cy.get(accountInput).clear();
- cy.get(accountInput).type('4100000001');
- cy.get(accountInput).type('{movetostart}');
- cy.get(accountInput).type('999');
- cy.get(accountInput).should('have.value', '9990000001');
- });
-
- it('should respect maxlength prop', () => {
- cy.get(accountInput).clear();
- cy.get(accountInput).type('123456789012345');
- cy.get(accountInput).should('have.value', '1234567890');
- });
- });
-
- it('should convert short account number to standard format', () => {
- cy.get(accountInput).clear();
- cy.get(accountInput).type('123.');
- cy.get(accountInput).should('have.value', '1230000000');
- });
-});
diff --git a/test/cypress/integration/vnComponent/VnShortcut.spec.js b/test/cypress/integration/vnComponent/VnShortcut.spec.js
index e08c44635..fa05e2e3d 100644
--- a/test/cypress/integration/vnComponent/VnShortcut.spec.js
+++ b/test/cypress/integration/vnComponent/VnShortcut.spec.js
@@ -27,12 +27,15 @@ describe('VnShortcuts', () => {
code: `Key${shortcut.toUpperCase()}`,
});
+ cy.waitSpinner();
cy.url().should('include', module);
if (['monitor', 'claim'].includes(module)) {
return;
}
cy.waitForElement('.q-page').should('exist');
cy.dataCy('vnTableCreateBtn').should('exist');
+ cy.waitSpinner();
+
cy.get('.q-page').trigger('keydown', {
ctrlKey: true,
altKey: true,