test: refs #7356 update ticket tracking components and remove unused TicketCreateTracking.vue
This commit is contained in:
parent
69629147ad
commit
73740822a3
|
@ -88,13 +88,13 @@ const columns = [
|
||||||
auto-load
|
auto-load
|
||||||
>
|
>
|
||||||
<template #column-itemFk="{ row }">
|
<template #column-itemFk="{ row }">
|
||||||
<span class="link">
|
<span class="link" @click.stop>
|
||||||
{{ row.itemFk }}
|
{{ row.itemFk }}
|
||||||
<ItemDescriptorProxy :id="row.itemFk" />
|
<ItemDescriptorProxy :id="row.itemFk" />
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
<template #column-ticketFk="{ row }">
|
<template #column-ticketFk="{ row }">
|
||||||
<span class="link">
|
<span class="link" @click.stop>
|
||||||
{{ row.ticketFk }}
|
{{ row.ticketFk }}
|
||||||
<TicketDescriptorProxy :id="row.ticketFk" />
|
<TicketDescriptorProxy :id="row.ticketFk" />
|
||||||
</span>
|
</span>
|
||||||
|
|
|
@ -1,59 +0,0 @@
|
||||||
<script setup>
|
|
||||||
import { ref } from 'vue';
|
|
||||||
import { useRoute } from 'vue-router';
|
|
||||||
import { useI18n } from 'vue-i18n';
|
|
||||||
|
|
||||||
import FormModelPopup from 'components/FormModelPopup.vue';
|
|
||||||
import VnRow from 'components/ui/VnRow.vue';
|
|
||||||
import VnSelect from 'src/components/common/VnSelect.vue';
|
|
||||||
import FetchData from 'components/FetchData.vue';
|
|
||||||
|
|
||||||
import { useState } from 'src/composables/useState';
|
|
||||||
import VnSelectWorker from 'src/components/common/VnSelectWorker.vue';
|
|
||||||
|
|
||||||
const emit = defineEmits(['onRequestCreated']);
|
|
||||||
|
|
||||||
const route = useRoute();
|
|
||||||
const { t } = useI18n();
|
|
||||||
const state = useState();
|
|
||||||
const user = state.getUser();
|
|
||||||
const stateFetchDataRef = ref(null);
|
|
||||||
const statesOptions = ref([]);
|
|
||||||
|
|
||||||
const onStateFkChange = (formData) => (formData.userFk = user.value.id);
|
|
||||||
</script>
|
|
||||||
<template>
|
|
||||||
<FetchData
|
|
||||||
ref="stateFetchDataRef"
|
|
||||||
url="States"
|
|
||||||
auto-load
|
|
||||||
@on-fetch="(data) => (statesOptions = data)"
|
|
||||||
/>
|
|
||||||
<FormModelPopup
|
|
||||||
:title="t('Create tracking')"
|
|
||||||
url-create="Tickets/state"
|
|
||||||
model="CreateTicketTracking"
|
|
||||||
:form-initial-data="{ ticketFk: route.params.id }"
|
|
||||||
@on-data-saved="() => emit('onRequestCreated')"
|
|
||||||
>
|
|
||||||
<template #form-inputs="{ data }">
|
|
||||||
<VnRow>
|
|
||||||
<VnSelect
|
|
||||||
v-model="data.stateFk"
|
|
||||||
:label="t('ticketList.state')"
|
|
||||||
:options="statesOptions"
|
|
||||||
@update:model-value="onStateFkChange(data)"
|
|
||||||
hide-selected
|
|
||||||
option-label="name"
|
|
||||||
option-value="id"
|
|
||||||
/>
|
|
||||||
<VnSelectWorker v-model="data.userFk" :fields="['id', 'name']" />
|
|
||||||
</VnRow>
|
|
||||||
</template>
|
|
||||||
</FormModelPopup>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<i18n>
|
|
||||||
es:
|
|
||||||
Create tracking: Crear estado
|
|
||||||
</i18n>
|
|
|
@ -1,27 +1,31 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref, computed, watch, reactive } from 'vue';
|
import { ref, reactive } from 'vue';
|
||||||
import { useI18n } from 'vue-i18n';
|
import { useI18n } from 'vue-i18n';
|
||||||
import { useRoute } from 'vue-router';
|
import { useRoute } from 'vue-router';
|
||||||
|
|
||||||
import WorkerDescriptorProxy from 'src/pages/Worker/Card/WorkerDescriptorProxy.vue';
|
import WorkerDescriptorProxy from 'src/pages/Worker/Card/WorkerDescriptorProxy.vue';
|
||||||
import TicketCreateTracking from './TicketCreateTracking.vue';
|
import VnSelect from 'src/components/common/VnSelect.vue';
|
||||||
import VnPaginate from 'components/ui/VnPaginate.vue';
|
import VnSelectWorker from 'src/components/common/VnSelectWorker.vue';
|
||||||
|
import { useState } from 'src/composables/useState';
|
||||||
|
|
||||||
import { toDateTimeFormat } from 'src/filters/date.js';
|
import { toDateTimeFormat } from 'src/filters/date.js';
|
||||||
|
import VnTable from 'src/components/VnTable/VnTable.vue';
|
||||||
|
const state = useState();
|
||||||
|
|
||||||
|
const user = state.getUser();
|
||||||
|
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
const createTrackingDialogRef = ref(null);
|
const tableRef = ref(null);
|
||||||
const paginateRef = ref(null);
|
|
||||||
|
|
||||||
watch(
|
|
||||||
() => route.params.id,
|
|
||||||
async (val) => {
|
|
||||||
paginateFilter.where.ticketFk = val;
|
|
||||||
paginateRef.value.fetch();
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
|
// watch(
|
||||||
|
// () => route.params.id,
|
||||||
|
// async (val) => {
|
||||||
|
// paginateFilter.where.ticketFk = val;
|
||||||
|
// paginateRef.value.fetch();
|
||||||
|
// },
|
||||||
|
// );
|
||||||
|
const onStateFkChange = (formData) => (formData.userFk = user.value.id);
|
||||||
const paginateFilter = reactive({
|
const paginateFilter = reactive({
|
||||||
include: [
|
include: [
|
||||||
{
|
{
|
||||||
|
@ -50,81 +54,74 @@ const paginateFilter = reactive({
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const columns = computed(() => [
|
const columns = [
|
||||||
{
|
{
|
||||||
label: t('ticketList.state'),
|
label: t('ticketList.state'),
|
||||||
name: 'state',
|
name: 'state',
|
||||||
field: 'state',
|
field: 'state',
|
||||||
align: 'left',
|
align: 'left',
|
||||||
format: (val) => val.name,
|
format: (row) => row.state?.name,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: t('expedition.worker'),
|
label: t('expedition.worker'),
|
||||||
name: 'worker',
|
name: 'worker',
|
||||||
align: 'left',
|
align: 'left',
|
||||||
|
field: 'user',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: t('expedition.created'),
|
label: t('expedition.created'),
|
||||||
name: 'created',
|
name: 'created',
|
||||||
field: 'created',
|
field: 'created',
|
||||||
align: 'left',
|
align: 'left',
|
||||||
format: (val) => toDateTimeFormat(val),
|
format: (row) => toDateTimeFormat(row.created),
|
||||||
},
|
},
|
||||||
]);
|
];
|
||||||
|
|
||||||
const openCreateModal = () => createTrackingDialogRef.value.show();
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<QPage class="column items-center q-pa-md">
|
<VnTable
|
||||||
<VnPaginate
|
ref="tableRef"
|
||||||
ref="paginateRef"
|
:right-search="false"
|
||||||
data-key="TicketTracking"
|
:column-search="false"
|
||||||
:user-filter="paginateFilter"
|
:disable-option="{ card: true, table: true }"
|
||||||
search-url="table"
|
:search-url="false"
|
||||||
url="TicketTrackings"
|
:columns="columns"
|
||||||
auto-load
|
data-key="TicketTracking"
|
||||||
order="created DESC"
|
:user-filter="paginateFilter"
|
||||||
:limit="0"
|
url="TicketTrackings"
|
||||||
>
|
auto-load
|
||||||
<template #body="{ rows }">
|
order="created DESC"
|
||||||
<QTable
|
:limit="0"
|
||||||
:rows="rows"
|
:without-header="true"
|
||||||
:columns="columns"
|
:create="{
|
||||||
row-key="id"
|
urlCreate: 'Tickets/state',
|
||||||
:pagination="{ rowsPerPage: 0 }"
|
title: t('Create tracking'),
|
||||||
class="full-width q-mt-md"
|
onDataSaved: () => tableRef.reload(),
|
||||||
:no-data-label="t('globals.noResults')"
|
formInitialData: {
|
||||||
>
|
ticketFk: route.params.id,
|
||||||
<template #body-cell-worker="{ row }">
|
},
|
||||||
<QTd>
|
}"
|
||||||
<QBtn flat class="link" @click.stop>
|
>
|
||||||
{{ row.user?.name }}
|
<template #more-create-dialog="{ data }">
|
||||||
<WorkerDescriptorProxy :id="row.user?.worker?.id" />
|
<VnSelect
|
||||||
</QBtn>
|
url="States"
|
||||||
</QTd>
|
v-model="data.stateFk"
|
||||||
</template>
|
:label="t('ticketList.state')"
|
||||||
</QTable>
|
auto-load
|
||||||
</template>
|
@update:model-value="onStateFkChange(data)"
|
||||||
</VnPaginate>
|
hide-selected
|
||||||
<QDialog
|
|
||||||
ref="createTrackingDialogRef"
|
|
||||||
transition-show="scale"
|
|
||||||
transition-hide="scale"
|
|
||||||
>
|
|
||||||
<TicketCreateTracking @on-request-created="paginateRef.fetch()" />
|
|
||||||
</QDialog>
|
|
||||||
<QPageSticky :offset="[20, 20]">
|
|
||||||
<QBtn
|
|
||||||
@click="openCreateModal()"
|
|
||||||
color="primary"
|
|
||||||
fab
|
|
||||||
icon="add"
|
|
||||||
v-shortcut="'+'"
|
|
||||||
/>
|
/>
|
||||||
<QTooltip class="text-no-wrap">
|
<VnSelectWorker v-model="data.userFk" :fields="['id', 'name']" />
|
||||||
{{ t('tracking.addState') }}
|
</template>
|
||||||
</QTooltip>
|
<template #column-worker="{ row }">
|
||||||
</QPageSticky>
|
<span class="link" @click.stop>
|
||||||
</QPage>
|
{{ row.user.name }}
|
||||||
|
<WorkerDescriptorProxy :id="row.user?.worker?.id" />
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
</VnTable>
|
||||||
</template>
|
</template>
|
||||||
|
<i18n>
|
||||||
|
es:
|
||||||
|
Create tracking: Crear estado
|
||||||
|
</i18n>
|
||||||
|
|
|
@ -11,7 +11,7 @@ const $props = defineProps({
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<QPopupProxy>
|
<QPopupProxy data-cy="WorkerDescriptor">
|
||||||
<WorkerDescriptor
|
<WorkerDescriptor
|
||||||
v-if="$props.id"
|
v-if="$props.id"
|
||||||
:id="$props.id"
|
:id="$props.id"
|
||||||
|
|
|
@ -1,12 +1,25 @@
|
||||||
/// <reference types="cypress" />
|
/// <reference types="cypress" />
|
||||||
describe('TicketRequest', () => {
|
describe('Ticket tracking', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
cy.login('developer');
|
cy.login('developer');
|
||||||
cy.viewport(1920, 1080);
|
cy.viewport(1920, 1080);
|
||||||
cy.visit('/#/ticket/31/request');
|
cy.visit('/#/ticket/31/tracking');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Should load layout', () => {
|
it('Add new tracking', () => {
|
||||||
cy.get('.q-page').should('be.visible');
|
cy.get('.q-page').should('be.visible');
|
||||||
|
|
||||||
|
cy.firstRow('worker').find('span').should('have.class', 'link').click();
|
||||||
|
cy.dataCy('WorkerDescriptor').should('exist');
|
||||||
|
cy.get('[data-cy="vnTableCreateBtn"] > .q-btn__content > .q-icon').click();
|
||||||
|
cy.selectOption('.q-field--float [data-cy="State_select"]', 'OK').click();
|
||||||
|
cy.get('[data-cy="FormModelPopup_save"] > .q-btn__content > .block').click();
|
||||||
|
cy.get(
|
||||||
|
':last-child > [data-col-field="state"] > [data-cy="vnTableCell_state"]',
|
||||||
|
).should('have.text', 'OK');
|
||||||
|
cy.get(':last-child > [data-col-field="worker"]').should(
|
||||||
|
'have.text',
|
||||||
|
'developer ',
|
||||||
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
Cypress.Commands.add('clickOption', (index = 1) =>
|
||||||
|
cy.get(`.q-menu :nth-child(${index}) >.q-item__section`).click(),
|
||||||
|
);
|
|
@ -0,0 +1,3 @@
|
||||||
|
Cypress.Commands.add('firstRow', (field, index = 1) =>
|
||||||
|
cy.get(`:nth-child(${index}) > [data-col-field="${field}"]`),
|
||||||
|
);
|
|
@ -29,7 +29,12 @@
|
||||||
// import { registerCommands } from '@quasar/quasar-app-extension-testing-e2e-cypress';
|
// import { registerCommands } from '@quasar/quasar-app-extension-testing-e2e-cypress';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
import waitUntil from './waitUntil';
|
import waitUntil from './waitUntil';
|
||||||
|
// Importar dinámicamente todos los archivos con el sufijo .commands.js dentro de la carpeta src/test/cypress/integration
|
||||||
|
const requireCommands = require.context('../integration', true, /\.commands\.js$/);
|
||||||
|
// Iterar sobre cada archivo y requerirlo
|
||||||
|
requireCommands.keys().forEach(requireCommands);
|
||||||
|
|
||||||
|
// Common comma
|
||||||
Cypress.Commands.add('waitUntil', { prevSubject: 'optional' }, waitUntil);
|
Cypress.Commands.add('waitUntil', { prevSubject: 'optional' }, waitUntil);
|
||||||
|
|
||||||
Cypress.Commands.add('resetDB', () => {
|
Cypress.Commands.add('resetDB', () => {
|
||||||
|
|
Loading…
Reference in New Issue