79 lines
3.0 KiB
TypeScript
79 lines
3.0 KiB
TypeScript
import assert from 'node:assert/strict'
|
|
import {
|
|
filterManualBorrowCandidates,
|
|
findPreferredManualBorrowCandidate,
|
|
isManualBorrowCandidate
|
|
} from '../src/views/borrow/manualBorrowSearch.ts'
|
|
|
|
const sampleList = [
|
|
{
|
|
equipment_code: 'JS-PC-1001',
|
|
equipment_name: '设计部高配主机',
|
|
equipment_model: 'RTX4090-WORKSTATION',
|
|
equipment_type: '主机',
|
|
status: '可用',
|
|
remaining_quantity: 1,
|
|
parent_id: null,
|
|
storageLocation: { name: '设计中心-A区' }
|
|
},
|
|
{
|
|
equipment_code: 'JS-PC-1002',
|
|
equipment_name: '普通办公主机',
|
|
equipment_model: 'OFFICE-01',
|
|
equipment_type: '主机',
|
|
status: '可用',
|
|
remaining_quantity: 2,
|
|
parent_id: null,
|
|
storageLocation: { name: '行政办公室' }
|
|
},
|
|
{
|
|
equipment_code: 'JS-MEM-2001',
|
|
equipment_name: '内存条',
|
|
equipment_model: '32G DDR5',
|
|
equipment_type: '内存条',
|
|
status: '可用',
|
|
remaining_quantity: 1,
|
|
parent_id: 88,
|
|
storageLocation: { name: '设计中心-A区' }
|
|
},
|
|
{
|
|
equipment_code: 'JS-MON-3001',
|
|
equipment_name: '曲面显示器',
|
|
equipment_model: '34WQHD',
|
|
equipment_type: '显示器',
|
|
status: '已借出',
|
|
remaining_quantity: 0,
|
|
parent_id: null,
|
|
storageLocation: { name: '摄影棚' }
|
|
}
|
|
]
|
|
|
|
assert.equal(isManualBorrowCandidate(sampleList[0]), true, '独立且可用的资产应允许手动借出搜索')
|
|
assert.equal(isManualBorrowCandidate(sampleList[2]), false, '已挂载子资产不应出现在借出搜索中')
|
|
assert.equal(isManualBorrowCandidate(sampleList[3]), false, '已借出资产不应出现在借出搜索中')
|
|
|
|
const byCode = filterManualBorrowCandidates(sampleList, 'JS-PC-1002')
|
|
assert.equal(byCode.length, 1, '按准确编码搜索应只返回该资产')
|
|
assert.equal(byCode[0].equipment_code, 'JS-PC-1002', '准确编码搜索必须命中目标资产')
|
|
|
|
const byKeyword = filterManualBorrowCandidates(sampleList, '设计')
|
|
assert.equal(byKeyword.length, 1, '按名称关键词搜索应排除不可借资产')
|
|
assert.equal(byKeyword[0].equipment_code, 'JS-PC-1001', '名称关键词应返回正确资产')
|
|
|
|
const byModel = filterManualBorrowCandidates(sampleList, '4090')
|
|
assert.equal(byModel[0].equipment_code, 'JS-PC-1001', '型号关键词应支持搜索')
|
|
|
|
const byLocation = filterManualBorrowCandidates(sampleList, '行政')
|
|
assert.equal(byLocation[0].equipment_code, 'JS-PC-1002', '地址关键词应支持辅助定位')
|
|
|
|
const preferredExact = findPreferredManualBorrowCandidate(byCode, 'js-pc-1002')
|
|
assert.equal(preferredExact?.equipment_code, 'JS-PC-1002', '精确编码时应优先自动选中')
|
|
|
|
const preferredSingle = findPreferredManualBorrowCandidate(byKeyword, '设计')
|
|
assert.equal(preferredSingle?.equipment_code, 'JS-PC-1001', '只有一条结果时应允许直接读取')
|
|
|
|
const multipleResults = filterManualBorrowCandidates(sampleList, '主机')
|
|
assert.equal(findPreferredManualBorrowCandidate(multipleResults, '主机'), null, '多条结果时不应擅自自动选中')
|
|
|
|
console.log('borrow manual search tests: ok')
|