GuDingZiChan/frontend/scripts/test-return-manual-search.ts
WuYongJie 0dc3c09315 feat(资产与打印): 提交近期借还盘点与打印助手源码
- 提交借用单缺失异常处理、扫码借还搜索与站内消息快捷处理源码
- 提交盘点范围、多终端打印、组织同步与认证模式相关源码
- 提交 .NET/Node 打印助手及版本清单源码
2026-03-27 20:18:31 +08:00

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')