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
|
||||
>
|
||||
<template #column-itemFk="{ row }">
|
||||
<span class="link">
|
||||
<span class="link" @click.stop>
|
||||
{{ row.itemFk }}
|
||||
<ItemDescriptorProxy :id="row.itemFk" />
|
||||
</span>
|
||||
</template>
|
||||
<template #column-ticketFk="{ row }">
|
||||
<span class="link">
|
||||
<span class="link" @click.stop>
|
||||
{{ row.ticketFk }}
|
||||
<TicketDescriptorProxy :id="row.ticketFk" />
|
||||
</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>
|
||||
import { ref, computed, watch, reactive } from 'vue';
|
||||
import { ref, reactive } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { useRoute } from 'vue-router';
|
||||
|
||||
import WorkerDescriptorProxy from 'src/pages/Worker/Card/WorkerDescriptorProxy.vue';
|
||||
import TicketCreateTracking from './TicketCreateTracking.vue';
|
||||
import VnPaginate from 'components/ui/VnPaginate.vue';
|
||||
import VnSelect from 'src/components/common/VnSelect.vue';
|
||||
import VnSelectWorker from 'src/components/common/VnSelectWorker.vue';
|
||||
import { useState } from 'src/composables/useState';
|
||||
|
||||
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 { t } = useI18n();
|
||||
const createTrackingDialogRef = ref(null);
|
||||
const paginateRef = ref(null);
|
||||
|
||||
watch(
|
||||
() => route.params.id,
|
||||
async (val) => {
|
||||
paginateFilter.where.ticketFk = val;
|
||||
paginateRef.value.fetch();
|
||||
},
|
||||
);
|
||||
const tableRef = ref(null);
|
||||
|
||||
// watch(
|
||||
// () => route.params.id,
|
||||
// async (val) => {
|
||||
// paginateFilter.where.ticketFk = val;
|
||||
// paginateRef.value.fetch();
|
||||
// },
|
||||
// );
|
||||
const onStateFkChange = (formData) => (formData.userFk = user.value.id);
|
||||
const paginateFilter = reactive({
|
||||
include: [
|
||||
{
|
||||
|
@ -50,81 +54,74 @@ const paginateFilter = reactive({
|
|||
},
|
||||
});
|
||||
|
||||
const columns = computed(() => [
|
||||
const columns = [
|
||||
{
|
||||
label: t('ticketList.state'),
|
||||
name: 'state',
|
||||
field: 'state',
|
||||
align: 'left',
|
||||
format: (val) => val.name,
|
||||
format: (row) => row.state?.name,
|
||||
},
|
||||
{
|
||||
label: t('expedition.worker'),
|
||||
name: 'worker',
|
||||
align: 'left',
|
||||
field: 'user',
|
||||
},
|
||||
{
|
||||
label: t('expedition.created'),
|
||||
name: 'created',
|
||||
field: 'created',
|
||||
align: 'left',
|
||||
format: (val) => toDateTimeFormat(val),
|
||||
format: (row) => toDateTimeFormat(row.created),
|
||||
},
|
||||
]);
|
||||
|
||||
const openCreateModal = () => createTrackingDialogRef.value.show();
|
||||
];
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<QPage class="column items-center q-pa-md">
|
||||
<VnPaginate
|
||||
ref="paginateRef"
|
||||
data-key="TicketTracking"
|
||||
:user-filter="paginateFilter"
|
||||
search-url="table"
|
||||
url="TicketTrackings"
|
||||
auto-load
|
||||
order="created DESC"
|
||||
:limit="0"
|
||||
>
|
||||
<template #body="{ rows }">
|
||||
<QTable
|
||||
:rows="rows"
|
||||
:columns="columns"
|
||||
row-key="id"
|
||||
:pagination="{ rowsPerPage: 0 }"
|
||||
class="full-width q-mt-md"
|
||||
:no-data-label="t('globals.noResults')"
|
||||
>
|
||||
<template #body-cell-worker="{ row }">
|
||||
<QTd>
|
||||
<QBtn flat class="link" @click.stop>
|
||||
{{ row.user?.name }}
|
||||
<WorkerDescriptorProxy :id="row.user?.worker?.id" />
|
||||
</QBtn>
|
||||
</QTd>
|
||||
</template>
|
||||
</QTable>
|
||||
</template>
|
||||
</VnPaginate>
|
||||
<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="'+'"
|
||||
<VnTable
|
||||
ref="tableRef"
|
||||
:right-search="false"
|
||||
:column-search="false"
|
||||
:disable-option="{ card: true, table: true }"
|
||||
:search-url="false"
|
||||
:columns="columns"
|
||||
data-key="TicketTracking"
|
||||
:user-filter="paginateFilter"
|
||||
url="TicketTrackings"
|
||||
auto-load
|
||||
order="created DESC"
|
||||
:limit="0"
|
||||
:without-header="true"
|
||||
:create="{
|
||||
urlCreate: 'Tickets/state',
|
||||
title: t('Create tracking'),
|
||||
onDataSaved: () => tableRef.reload(),
|
||||
formInitialData: {
|
||||
ticketFk: route.params.id,
|
||||
},
|
||||
}"
|
||||
>
|
||||
<template #more-create-dialog="{ data }">
|
||||
<VnSelect
|
||||
url="States"
|
||||
v-model="data.stateFk"
|
||||
:label="t('ticketList.state')"
|
||||
auto-load
|
||||
@update:model-value="onStateFkChange(data)"
|
||||
hide-selected
|
||||
/>
|
||||
<QTooltip class="text-no-wrap">
|
||||
{{ t('tracking.addState') }}
|
||||
</QTooltip>
|
||||
</QPageSticky>
|
||||
</QPage>
|
||||
<VnSelectWorker v-model="data.userFk" :fields="['id', 'name']" />
|
||||
</template>
|
||||
<template #column-worker="{ row }">
|
||||
<span class="link" @click.stop>
|
||||
{{ row.user.name }}
|
||||
<WorkerDescriptorProxy :id="row.user?.worker?.id" />
|
||||
</span>
|
||||
</template>
|
||||
</VnTable>
|
||||
</template>
|
||||
<i18n>
|
||||
es:
|
||||
Create tracking: Crear estado
|
||||
</i18n>
|
||||
|
|
|
@ -11,7 +11,7 @@ const $props = defineProps({
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<QPopupProxy>
|
||||
<QPopupProxy data-cy="WorkerDescriptor">
|
||||
<WorkerDescriptor
|
||||
v-if="$props.id"
|
||||
:id="$props.id"
|
||||
|
|
|
@ -1,12 +1,25 @@
|
|||
/// <reference types="cypress" />
|
||||
describe('TicketRequest', () => {
|
||||
describe('Ticket tracking', () => {
|
||||
beforeEach(() => {
|
||||
cy.login('developer');
|
||||
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.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 moment from 'moment';
|
||||
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('resetDB', () => {
|
||||
|
|
Loading…
Reference in New Issue