This commit is contained in:
2026-11-04 10:39:15 +08:00
parent 01d0a81603
commit 84dd9dcbb4
9 changed files with 34 additions and 12 deletions
@@ -5,6 +5,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
import { useAuthStore } from '@/core/auth/auth'
import { useAccessPreviewStore } from '@/core/access/accessPreview'
import RowActions from '@/shared/components/RowActions.vue'
import QueryToolbar from '@/shared/components/QueryToolbar.vue'
import type { DataTableColumn } from '@/shared/components/DataTable.vue'
import { listLocalLooseboardOrders, listUsTruckOrders } from '../api/platformOverseasBusiness'
import { overseasBusinessPermissions as permissions } from '../permissions'
@@ -31,7 +32,7 @@ function mountList(domain: 'truck' | 'looseboard', edit = false) {
auth.permissions = [permissions.truckList, permissions.looseboardList, ...(edit ? [permissions.looseboardEdit] : [])]
useAccessPreviewStore().initializeAfterLogin()
return mount(TransportOrdersView, { props: { domain }, global: { plugins: [pinia, ElementPlus], stubs: {
DataTable: { name: 'DataTable', props: ['data', 'columns'], template: '<div><div v-for="row in data" :key="row.id"><span v-for="column in columns" :key="column.key" :data-column="column.key">{{ column.prop ? row[column.prop] : \'\' }}</span><slot name="actions" :row="row" /></div></div>' },
DataTable: { name: 'DataTable', props: ['data', 'columns'], template: '<div><slot name="filters" /><div v-for="row in data" :key="row.id"><span v-for="column in columns" :key="column.key" :data-column="column.key">{{ column.prop ? row[column.prop] : \'\' }}</span><slot name="actions" :row="row" /></div></div>' },
AppDialog: true,
} } })
}
@@ -44,6 +45,15 @@ beforeEach(() => {
})
describe('transport document entry', () => {
it.each(['truck', 'looseboard'] as const)('limits retired status filters only in truck mode (%s)', async domain => {
const wrapper = mountList(domain); await flushPromises()
const status = wrapper.findComponent(QueryToolbar).props('fields').find(field => field.key === 'status')!
const values = status.options!.map(option => option.value)
expect(values.includes('WAITING_CONSOLIDATION')).toBe(domain === 'looseboard')
if (domain === 'truck') for (const value of ['WAITING_INBOUND', 'RECEIVING', 'PALLET_OVERAGE_REVIEW', 'PARTIALLY_ALLOCATED', 'ALLOCATED', 'PENDING_DISPATCH']) expect(values).not.toContain(value)
else expect(values).toContain('WAITING_INBOUND')
expect(status.options!.find(option => option.value === 'IN_TRANSIT')?.label).toBe('派送中')
})
it('lets list-only users open looseboard details without edit permission', async () => {
const wrapper = mountList('looseboard'); await flushPromises()
const actions = wrapper.findComponent(RowActions)