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

104 lines
3.3 KiB
TypeScript

import assert from 'node:assert/strict'
import {
buildManualBorrowPersonDisplay,
filterManualBorrowPersons,
findPreferredManualBorrowPerson,
isManualBorrowSelectedPersonKeyword,
shouldShowManualBorrowPersonResults
} from '../src/views/borrow/manualBorrowPersonSearch.ts'
const samplePersons = [
{
id: 1,
nickname: '阿杰',
real_name: '王杰',
id_number: 'A1001',
department: '设计中心',
department_names: ['设计中心', '品牌设计部'],
phone: '13800000001',
status: 'active'
},
{
id: 2,
nickname: '小周',
real_name: '周晴',
id_number: 'A1002',
department: '行政部',
department_names: ['行政部'],
phone: '13800000002',
status: 'active'
},
{
id: 3,
nickname: '离职张',
real_name: '张离',
id_number: 'A1003',
department: '设计中心',
department_names: ['设计中心'],
phone: '13800000003',
status: 'inactive'
}
]
const byNickname = filterManualBorrowPersons(samplePersons as any, '阿杰')
assert.equal(byNickname.length, 1, '花名精确匹配应只返回一个人')
assert.equal(byNickname[0].id, 1, '花名匹配应返回正确人员')
const byRealName = filterManualBorrowPersons(samplePersons as any, '周晴')
assert.equal(byRealName.length, 1, '姓名搜索应返回正确人员')
assert.equal(byRealName[0].id, 2, '姓名匹配结果不正确')
const byIdNumber = filterManualBorrowPersons(samplePersons as any, 'A1001')
assert.equal(byIdNumber[0].id, 1, '工号搜索应支持')
const byDepartment = filterManualBorrowPersons(samplePersons as any, '设计')
assert.equal(byDepartment.length, 1, '搜索部门时应排除已停用人员')
assert.equal(byDepartment[0].id, 1, '部门搜索结果不正确')
const byPhone = filterManualBorrowPersons(samplePersons as any, '0002')
assert.equal(byPhone[0].id, 2, '手机号搜索应支持辅助定位')
const preferredExact = findPreferredManualBorrowPerson(byNickname as any, '阿杰')
assert.equal(preferredExact?.id, 1, '精确匹配时应支持直接选中')
const preferredSingle = findPreferredManualBorrowPerson(byDepartment as any, '设计')
assert.equal(preferredSingle?.id, 1, '只有一条结果时应支持直接选中')
const selectedDisplay = buildManualBorrowPersonDisplay(samplePersons[0] as any)
assert.equal(selectedDisplay, '阿杰 王杰', '选中后输入框应回填花名和姓名')
assert.equal(
isManualBorrowSelectedPersonKeyword(samplePersons[0] as any, selectedDisplay),
true,
'选中人员后,回填文案不应被当成新的搜索条件清掉'
)
assert.equal(
shouldShowManualBorrowPersonResults(samplePersons[0] as any, selectedDisplay),
false,
'选中人员后不应继续显示搜索结果框'
)
assert.equal(
shouldShowManualBorrowPersonResults(samplePersons[0] as any, '行政'),
true,
'改了关键词后应继续展示新搜索结果'
)
const multiResults = filterManualBorrowPersons(
[
...samplePersons,
{
id: 4,
nickname: '阿杰2',
real_name: '王杰同名',
id_number: 'A1004',
department: '设计中心',
department_names: ['设计中心'],
phone: '13800000004',
status: 'active'
}
] as any,
'王'
)
assert.equal(findPreferredManualBorrowPerson(multiResults as any, '王'), null, '多条结果时不应自动选中')
console.log('borrow person search tests: ok')