31 lines
1.3 KiB
JavaScript
31 lines
1.3 KiB
JavaScript
|
|
const { test } = require('node:test')
|
||
|
|
const assert = require('node:assert/strict')
|
||
|
|
const fs = require('node:fs')
|
||
|
|
const path = require('node:path')
|
||
|
|
const vm = require('node:vm')
|
||
|
|
const { createRequire } = require('node:module')
|
||
|
|
const esbuild = createRequire(require.resolve('vite'))('esbuild')
|
||
|
|
const result = { exports: {} }
|
||
|
|
vm.runInNewContext(
|
||
|
|
esbuild.transformSync(
|
||
|
|
fs.readFileSync(path.join(__dirname, '../src/utils/healthPrivacy.ts'), 'utf8'),
|
||
|
|
{ loader: 'ts', format: 'cjs' }
|
||
|
|
).code,
|
||
|
|
{ module: result, exports: result.exports }
|
||
|
|
)
|
||
|
|
const { maskHealthPhone, maskHealthIdCard, maskHealthInsurance } = result.exports
|
||
|
|
|
||
|
|
test('normal identity and phone displays reveal only limited prefix and suffix', () => {
|
||
|
|
assert.equal(maskHealthPhone('13800000001'), '138****0001')
|
||
|
|
assert.equal(maskHealthIdCard('11010519491231002X'), '110***********002X')
|
||
|
|
assert.equal(maskHealthInsurance('synthetic-insurance'), '***************ance')
|
||
|
|
})
|
||
|
|
test('malformed and short values never fall back to their full sensitive input', () => {
|
||
|
|
for (const value of ['abc', '1234567', '1234567890']) {
|
||
|
|
assert.notEqual(maskHealthIdCard(value), value)
|
||
|
|
assert.notEqual(maskHealthPhone(value), value)
|
||
|
|
}
|
||
|
|
assert.equal(maskHealthPhone(null), '未填写手机号')
|
||
|
|
assert.equal(maskHealthInsurance('1234'), '****')
|
||
|
|
})
|