test: improve test
gitea/salix-front/pipeline/pr-master This commit looks good Details

This commit is contained in:
Javier Segarra 2025-02-19 23:42:10 +01:00
parent 874fbb48f5
commit b2184635d3
3 changed files with 213 additions and 116 deletions

View File

@ -46,7 +46,7 @@ defineExpose({ save });
</script>
<template>
<QPopupProxy ref="QPopupProxyRef">
<QPopupProxy ref="QPopupProxyRef" data-cy="ticketEditManaProxy">
<div class="container">
<QSpinner v-if="!mana" color="primary" size="md" />
<div v-else>

View File

@ -325,7 +325,11 @@ const changeDiscount = async (sale) => {
};
const updateDiscounts = async (sales, newDiscount = null) => {
const someSaleIsPrepared = await sales.some(isSalePrepared);
const salesTracking = await fetchSalesTracking();
const someSaleIsPrepared = salesTracking.some((sale) =>
matchSale(salesTracking, sale),
);
if (someSaleIsPrepared) await confirmUpdate(() => updateDiscount(sales, newDiscount));
else updateDiscount(sales, newDiscount);
};
@ -484,7 +488,7 @@ const endNewRow = (row) => {
};
async function confirmUpdate(cb) {
quasar
await quasar
.dialog({
component: VnConfirm,
componentProps: {
@ -494,8 +498,7 @@ async function confirmUpdate(cb) {
})
.onOk(cb);
}
async function isSalePrepared(sale) {
async function fetchSalesTracking() {
const filter = {
params: {
where: { ticketFk: route.params.id },
@ -507,12 +510,23 @@ async function isSalePrepared(sale) {
filter: JSON.stringify(filter),
},
});
return data;
}
async function isSalePrepared(sale) {
const data = await fetchSalesTracking();
return matchSale(data, sale);
}
function matchSale(data, sale) {
const matchingSale = data.find(({ itemFk }) => itemFk === sale.itemFk);
if (!matchingSale) {
return false;
}
return isPrepared(matchingSale);
}
function isPrepared(sale) {
const flagsToCheck = [
'hasSaleGroupDetail',
'isControled',
@ -520,12 +534,8 @@ async function isSalePrepared(sale) {
'isPrevious',
'isPreviousSelected',
];
if (flagsToCheck.some((flag) => matchingSale[flag] === 1)) {
return true;
return flagsToCheck.some((flag) => sale[flag] === 1);
}
return false;
}
watch(
() => newRow.value.itemFk,
(newItemFk) => {
@ -802,6 +812,7 @@ watch(
</template>
<template #column-quantity="{ row }">
<VnInput
data-cy="ticketSaleQuantityInput"
v-if="row.isNew || isTicketEditable"
type="number"
v-model.number="row.quantity"

View File

@ -1,6 +1,7 @@
/// <reference types="cypress" />
describe('TicketSale', () => {
describe('Free ticket #31', () => {
beforeEach(() => {
cy.login('developer');
cy.viewport(1920, 1080);
@ -120,3 +121,88 @@ describe('TicketSale', () => {
cy.url().should('match', /\/ticket\/31\/log/);
});
});
describe.only('Ticket prepared #23', () => {
beforeEach(() => {
cy.login('developer');
cy.viewport(1920, 1080);
cy.visit('/#/ticket/23/sale');
});
const firstRow = 'tbody > :nth-child(1)';
const selectFirstRow = () => {
cy.waitForElement(firstRow);
cy.get(firstRow).find('.q-checkbox__inner').click();
};
it('update price', () => {
const price = Number((Math.random() * 99 + 1).toFixed(2));
cy.waitForElement(firstRow);
cy.get(':nth-child(10) > .q-btn').click();
cy.waitForElement('[data-cy="ticketEditManaProxy"]');
cy.dataCy('ticketEditManaProxy').should('exist');
cy.waitForElement('[data-cy="Price_input"]');
cy.dataCy('Price_input').clear();
cy.dataCy('Price_input').type(price);
cy.dataCy('saveManaBtn').click();
handleVnConfirm();
cy.get(':nth-child(10) > .q-btn > .q-btn__content').should(
'have.text',
`${price}`,
);
});
it('update dicount', () => {
const discount = Math.floor(Math.random() * 100) + 1;
selectFirstRow();
cy.get(':nth-child(11) > .q-btn').click();
cy.waitForElement('[data-cy="ticketEditManaProxy"]');
cy.dataCy('ticketEditManaProxy').should('exist');
cy.waitForElement('[data-cy="Disc_input"]');
cy.dataCy('Disc_input').clear();
cy.dataCy('Disc_input').type(discount);
cy.dataCy('saveManaBtn').click();
handleVnConfirm();
cy.get(':nth-child(11) > .q-btn > .q-btn__content').should(
'have.text',
`${discount}.00%`,
);
});
it('change concept', () => {
const quantity = Math.floor(Math.random() * 100) + 1;
cy.waitForElement(firstRow);
cy.get(':nth-child(8) > .row').click();
cy.get(
'.q-menu > [data-v-ca3f07a4=""] > .q-field > .q-field__inner > .q-field__control > .q-field__control-container > [data-cy="undefined_input"]',
)
.type(quantity)
.type('{enter}');
handleVnConfirm();
cy.get(':nth-child(8) >.row').should('contain.text', `${quantity}`);
});
it('changequantity ', () => {
const quantity = Math.floor(Math.random() * 100) + 1;
cy.waitForElement(firstRow);
cy.dataCy('ticketSaleQuantityInput').clear();
cy.dataCy('ticketSaleQuantityInput').type(quantity).trigger('tab');
cy.get('.q-page > :nth-child(6)').click();
handleVnConfirm();
cy.get('[data-cy="ticketSaleQuantityInput"]')
.find('[data-cy="undefined_input"]')
.should('have.value', `${quantity}`);
});
});
});
function handleVnConfirm() {
cy.get('[data-cy="VnConfirm_confirm"] > .q-btn__content > .block').click();
cy.waitForElement('.q-notification__message');
cy.get('.q-notification__message').should('be.visible');
cy.checkNotification('Data saved');
}