56 lines
2.9 KiB
TypeScript
56 lines
2.9 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
import { readFileSync } from 'node:fs'
|
|
import { resolve } from 'node:path'
|
|
|
|
const source = readFileSync(resolve(process.cwd(), 'src/modules/loading-lists/pages/PreloadPlanDetailView.vue'), 'utf8')
|
|
|
|
describe('PreloadPlanDetailView prototype contract', () => {
|
|
it('is a formal responsive detail page with a return action', () => {
|
|
expect(source).toContain('<AdminPage>')
|
|
expect(source).toContain('返回列表')
|
|
expect(source).toContain('<ArrowLeft')
|
|
expect(source).toContain("router.push({ name: 'loading-plans' })")
|
|
expect(source).toContain('@media (min-width: 1920px) { .preload-detail-page { width: 100%; max-width: none; gap: 12px; } }')
|
|
expect(source).not.toContain('AppDrawer')
|
|
})
|
|
|
|
it('requires the real warehouse context and preserves status boundaries', () => {
|
|
expect(source).toContain('MISSING_WAREHOUSE_CONTEXT')
|
|
expect(source).toContain("['EDITING', 'LOADING'].includes(result.summary.status)")
|
|
expect(source).toContain('MODE_STATUS_MISMATCH')
|
|
})
|
|
|
|
it('uses the real optimistic-lock transport endpoint without inventing note writes', () => {
|
|
expect(source).toContain('updatePreloadTransport')
|
|
expect(source).toContain('expectedVersion: detail.value.summary.version')
|
|
expect(source).toContain('width="min(620px, calc(100vw - 28px))"')
|
|
expect(source).not.toContain('saveMfNote')
|
|
})
|
|
|
|
it('is the formal container-number entry and does not imply that preload directly opens PDA', () => {
|
|
expect(source).toContain("{ required: true, message: '请输入集装箱号'")
|
|
expect(source).toContain("detail.value?.summary.containerNo ? '修改集装箱号 / 航次' : '录入集装箱号'")
|
|
expect(source).toContain('预装清单不会直接开放 PDA')
|
|
expect(source).toContain('订舱关联与放舱、预装确认后')
|
|
})
|
|
|
|
it('confirms the whole plan through readiness with stable idempotency and refreshes the detail', () => {
|
|
expect(source).toContain('confirmPreloadPlan(summary.planId, summary.version, confirmOperationId.value)')
|
|
expect(source).toContain('summary?.readiness.canConfirm')
|
|
expect(source).toContain('confirmSaving.value')
|
|
expect(source).toContain('await loadDetail()')
|
|
expect(source).toContain('本操作将确认整份预装计划')
|
|
expect(source).toContain('全部入库预装票据')
|
|
expect(source).toContain('当前页面不会伪造 PDA 成功')
|
|
expect(source).not.toContain('/inbounds/')
|
|
})
|
|
|
|
it('keeps backend confirmation errors visible and supports narrow dialogs', () => {
|
|
expect(source).toContain("confirmError.value = getApiErrorDetails(cause, '确认预装失败,请稍后重试')")
|
|
expect(source).toContain(':message="confirmError.message"')
|
|
expect(source).toContain('width="min(520px, calc(100vw - 28px))"')
|
|
expect(source).toContain("label=\"柜次号\"")
|
|
expect(source).toContain("label=\"集装箱号\"")
|
|
})
|
|
})
|