55 lines
3.6 KiB
TypeScript
55 lines
3.6 KiB
TypeScript
import { readFileSync } from 'node:fs'
|
|
import { resolve } from 'node:path'
|
|
import { describe, expect, it } from 'vitest'
|
|
|
|
const read = (path: string) => readFileSync(resolve(process.cwd(), `src/modules/overseas-business/${path}`), 'utf8')
|
|
|
|
describe('overseas business real contract pages', () => {
|
|
it('keeps operation columns first and renders no sample records', () => {
|
|
const purchase = read('pages/PurchaseOrdersView.vue'); const transport = read('pages/TransportOrdersView.vue')
|
|
const purchaseColumns = purchase.slice(purchase.indexOf('const columns')); const truckColumns = transport.slice(transport.indexOf('const truckColumns')); const looseboardColumns = transport.slice(transport.indexOf('const looseboardColumns'))
|
|
expect(purchaseColumns.indexOf("key: 'actions'")).toBeLessThan(purchaseColumns.indexOf("key: 'orderNo'"))
|
|
expect(truckColumns.indexOf("key: 'actions'")).toBeLessThan(truckColumns.indexOf("key: 'orderNo'"))
|
|
expect(looseboardColumns.indexOf("key: 'actions'")).toBeLessThan(looseboardColumns.indexOf("key: 'orderNo'"))
|
|
expect(`${purchase}${transport}`).not.toMatch(/OPO\d|TK\d|LB\d/)
|
|
})
|
|
|
|
it('keeps procurement general editing limited to internal remarks', () => {
|
|
const list = read('pages/PurchaseOrdersView.vue'); const detail = read('pages/PurchaseOrderDetailView.vue'); const edit = read('pages/PurchaseOrderEditView.vue')
|
|
expect(list).toContain('listOverseasPurchaseCustomerOptions')
|
|
expect(edit).toContain('getOverseasPurchaseEditor')
|
|
expect(detail).toContain('detail.reviewHistory')
|
|
expect(detail).not.toContain('outbounds')
|
|
expect(edit).toContain('remark: form.remark.trim() || null')
|
|
expect(edit).not.toMatch(/v-model="form\.(inboundQuantity|purchaseWarehouseId|outboundDetails|productName)/)
|
|
expect(edit).not.toContain('入库量不能小于 0')
|
|
expect(edit).not.toMatch(/payload[^\n]*(outboundQuantity|status):/)
|
|
})
|
|
|
|
it('uses only platform truck create/update and the stable looseboard subdomain', () => {
|
|
const api = read('api/platformOverseasBusiness.ts'); const list = read('pages/TransportOrdersView.vue'); const form = read('pages/TransportOrderFormView.vue')
|
|
expect(api).toContain("const looseboardBasePath = '/platform/v1/last-leg/local-looseboard-orders'")
|
|
expect(api).toContain('createUsTruckOrder')
|
|
expect(api).toContain('updateUsTruckOrder')
|
|
expect(api).toContain('createLocalLooseboardOrder')
|
|
expect(api).toContain('updateLocalLooseboardOrder')
|
|
expect(api).not.toMatch(/export async function createOverseasPurchase\s*\(/)
|
|
expect(api).not.toMatch(/\/merchant\/|receive-pallets|\/status/)
|
|
expect(list).toContain('listLocalLooseboardOrders')
|
|
expect(form).toContain('listPlatformTenants')
|
|
expect(form).not.toContain('ContractPendingNotice')
|
|
})
|
|
|
|
it('keeps state-constrained editing and unsaved-work protection', () => {
|
|
const purchaseEdit = read('pages/PurchaseOrderEditView.vue'); const transportList = read('pages/TransportOrdersView.vue'); const transportForm = read('pages/TransportOrderFormView.vue')
|
|
expect(purchaseEdit).toContain('useUnsavedWorkRegistration')
|
|
expect(transportForm).toContain('useUnsavedWorkRegistration')
|
|
expect(transportList).toContain("row.status === 'PENDING_ACCEPTANCE'")
|
|
expect(transportList).toContain("row.status === 'PENDING_REVIEW'")
|
|
expect(transportForm).toContain("form.status === 'PENDING_ACCEPTANCE'")
|
|
expect(transportForm).toContain("form.status === 'PENDING_REVIEW'")
|
|
expect(transportForm).toContain('idempotencyKey: form.idempotencyKey')
|
|
expect(transportForm.match(/idempotencyKey:\s*newIdempotencyKey\(\)/g)).toHaveLength(1)
|
|
})
|
|
})
|