50 lines
3.8 KiB
JavaScript
50 lines
3.8 KiB
JavaScript
import assert from 'node:assert/strict'
|
|
import { readFileSync } from 'node:fs'
|
|
import test from 'node:test'
|
|
|
|
const view = readFileSync(new URL('./WarehouseServiceView.vue', import.meta.url), 'utf8')
|
|
|
|
test('货物废弃先选择海外操作仓,再加载并选择该仓入库单', () => {
|
|
assert.match(view, /props\.service === 'disposal'.*操作仓.*v-model="form\.warehouse".*请选择海外仓.*@change="selectDiscardWarehouse"/s)
|
|
assert.match(view, /props\.service === 'disposal'.*选择入库单.*:disabled="!form\.warehouse".*请先选择操作仓/s)
|
|
assert.match(view, /async function selectDiscardWarehouse\(\).*selectedDiscardOrderId\.value = ''.*cargoRows\.value = \[\].*listDiscardCandidates\(\)/s)
|
|
assert.match(view, /\|\| !primaryWarehouse \|\| invalidCargo/)
|
|
})
|
|
|
|
|
|
test('废弃来源包含通用仓位,选择后带出全部库存且不把选择键提交为订单ID', () => {
|
|
const body = view.match(/function selectDiscardInbound\(orderId: string\) \{([\s\S]*?)\n\}/)[1]
|
|
const select = new Function('discardSelectedBoxKeys', 'discardBoxSearch', 'selectAllDiscardBoxes', 'discardCandidates', 'cargoRows', 'form', 'cargoSequence', 'orderId', body)
|
|
const cargoRows = { value: [] }; const form = {}
|
|
select({ value: [] }, { value: '' }, () => {}, { value: [{ orderId: 'inventory:42', sourceType: 'INVENTORY', inventoryPositionId: '42', overseasWarehouseId: '99', inboundCode: 'WT-1', skus: [{ skuCode: 'A', productName: '商品', availablePackages: 100 }] }] }, cargoRows, form, 0, 'inventory:42')
|
|
assert.equal(cargoRows.value[0].quantity, 100)
|
|
assert.equal(cargoRows.value[0].sourceInventoryPositionId, '42')
|
|
assert.equal(form.inboundNo, 'WT-1')
|
|
assert.match(view, /orderId: item.sourceType === 'DROPSHIP' \? item.sourceOrderId : undefined/)
|
|
assert.match(view, /inventoryPositionId: item.sourceType === 'INVENTORY'/)
|
|
})
|
|
|
|
function selectionRows(boxes, selectedKeys) {
|
|
const body = view.match(/function syncDiscardSelection\(\) \{([\s\S]*?)\n\}/)[1].replace('new Map<string, CargoRow>()', 'new Map()')
|
|
const rows = { value: [] }
|
|
new Function('discardSelectableBoxes', 'discardSelectedBoxKeys', 'cargoRows', 'createCargoRow', body)({ value: boxes }, { value: selectedKeys }, rows, () => ({}))
|
|
return rows.value
|
|
}
|
|
test('部分废弃只提交勾选的箱子,数量由箱子汇总,清空后无明细', () => {
|
|
const source = { orderId: 'inventory:42', inventoryPositionId: '42', sourceType: 'INVENTORY', availablePackages: 3, skus: [{ skuCode: 'SKU', productName: '商品' }] }
|
|
const boxes = ['1', '2', '3'].map(id => ({ key: `INVENTORY:${id}`, cartonId: id, cartonMark: `BOX-${id}`, source, skus: source.skus }))
|
|
const rows = selectionRows(boxes, ['INVENTORY:2'])
|
|
assert.equal(rows.length, 1); assert.equal(rows[0].quantity, 1)
|
|
assert.deepEqual(rows[0].discardCartonIds, ['2']); assert.equal(rows[0].sourceInventoryPositionId, '42')
|
|
assert.equal(selectionRows(boxes, []).length, 0)
|
|
})
|
|
test('混合SKU箱按实物箱只计一次,退货箱仍整箱携带全部SKU', () => {
|
|
const skus = [{ skuCode: 'A', availablePackages: 2 }, { skuCode: 'B', availablePackages: 3 }]
|
|
const dropship = { orderId: '42', sourceType: 'DROPSHIP', availablePackages: 1, skus }
|
|
const rows = selectionRows([{ key: 'DROPSHIP:1', cartonId: '1', source: dropship, skus }], ['DROPSHIP:1'])
|
|
assert.equal(rows.length, 1); assert.equal(rows[0].quantity, 1); assert.deepEqual(rows[0].discardCartonIds, ['1'])
|
|
const returned = { orderId: 'return:2', returnCartonId: '2', sourceType: 'RETURN_CARTON', availablePackages: 5, skus }
|
|
const returnRows = selectionRows([{ key: 'RETURN_CARTON:2', cartonId: '2', source: returned, skus }], ['RETURN_CARTON:2'])
|
|
assert.deepEqual(returnRows.map(row => row.quantity), [2, 3]); assert.ok(returnRows.every(row => row.returnCartonId === '2' && row.discardCartonIds === undefined))
|
|
})
|