104 lines
3.3 KiB
TypeScript
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')
|