81 lines
3.3 KiB
TypeScript
81 lines
3.3 KiB
TypeScript
import assert from 'node:assert/strict'
|
|
import {
|
|
filterManualReturnAssetCandidates,
|
|
findPreferredManualReturnAssetCandidate,
|
|
isManualReturnAssetCandidate
|
|
} from '../src/views/borrow/manualReturnSearch.ts'
|
|
|
|
const sampleList = [
|
|
{
|
|
equipment_id: 11,
|
|
equipment_code: 'JS-PC-1883',
|
|
equipment_name: '品牌显示器',
|
|
equipment_model: 'U2723QE',
|
|
equipment_type: '显示器',
|
|
active_borrow_count: 1,
|
|
borrower_names: ['凤求凰 · 王静宁'],
|
|
borrower_identifiers: ['513701199912094029'],
|
|
borrower_departments: ['品牌策划中心'],
|
|
search_state: 'returnable',
|
|
can_return: true,
|
|
storageLocation: { name: '常州-天安' }
|
|
},
|
|
{
|
|
equipment_id: 12,
|
|
equipment_code: 'JS-PC-2094',
|
|
equipment_name: '常州办公显示器',
|
|
equipment_model: 'AOC-34',
|
|
equipment_type: '显示器',
|
|
active_borrow_count: 0,
|
|
search_state: 'borrow_record_missing',
|
|
can_return: false,
|
|
storageLocation: { name: '常州-天安' }
|
|
},
|
|
{
|
|
equipment_id: 13,
|
|
equipment_code: 'JS-MEM-2001',
|
|
equipment_name: '内存条',
|
|
equipment_model: '32G DDR5',
|
|
equipment_type: '内存条',
|
|
active_borrow_count: 0,
|
|
storageLocation: { name: '仓库' }
|
|
}
|
|
]
|
|
|
|
assert.equal(isManualReturnAssetCandidate(sampleList[0]), true, '存在未归还记录的资产应允许出现在归还搜索中')
|
|
assert.equal(isManualReturnAssetCandidate(sampleList[1]), true, '借用单缺失但状态仍为已借出的资产也应允许被搜到')
|
|
assert.equal(isManualReturnAssetCandidate(sampleList[2]), false, '没有未归还记录的资产不应出现在归还搜索中')
|
|
|
|
const byCode = filterManualReturnAssetCandidates(sampleList, 'JS-PC-1883')
|
|
assert.equal(byCode.length, 1, '按准确编码搜索应只返回对应资产')
|
|
assert.equal(byCode[0].equipment_id, 11, '准确编码搜索结果不正确')
|
|
|
|
const byName = filterManualReturnAssetCandidates(sampleList, '显示器')
|
|
assert.equal(byName.length, 2, '按名称搜索应命中对应的借出资产')
|
|
|
|
const byModel = filterManualReturnAssetCandidates(sampleList, 'AOC')
|
|
assert.equal(byModel[0].equipment_id, 12, '型号搜索应支持辅助定位')
|
|
|
|
const byLocation = filterManualReturnAssetCandidates(sampleList, '天安')
|
|
assert.equal(byLocation.length, 2, '地址搜索应支持辅助定位')
|
|
|
|
const byCodeSuffix = filterManualReturnAssetCandidates(sampleList, '2094')
|
|
assert.equal(byCodeSuffix.length, 1, '按资产编码片段搜索时,不应被借用人身份证号误导')
|
|
assert.equal(byCodeSuffix[0].equipment_code, 'JS-PC-2094', '资产编码片段搜索应优先命中实际资产')
|
|
assert.equal(byCodeSuffix[0].search_state, 'borrow_record_missing', '借用单缺失资产应保留异常标记')
|
|
|
|
const preferredExact = findPreferredManualReturnAssetCandidate(byCode, 'js-pc-1883')
|
|
assert.equal(preferredExact?.equipment_id, 11, '准确编码时应优先自动选中')
|
|
|
|
const preferredSingle = findPreferredManualReturnAssetCandidate(byCodeSuffix, 'js-pc-2094')
|
|
assert.equal(preferredSingle?.equipment_id, 12, '只有一条结果时应允许直接选中')
|
|
|
|
const multiResults = filterManualReturnAssetCandidates(sampleList, 'JS-')
|
|
assert.equal(
|
|
findPreferredManualReturnAssetCandidate(multiResults, 'JS-'),
|
|
null,
|
|
'多条结果时不应擅自自动选中'
|
|
)
|
|
|
|
console.log('return manual asset search tests: ok')
|