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