Files
BYW-VoiceHub/tests/server/password-policy.test.ts
T

49 lines
1.9 KiB
TypeScript

import test from 'node:test'
import assert from 'node:assert/strict'
import {
getInitialPasswordPolicyViolation,
validateInitialPasswordPolicy,
validatePasswordPolicy
} from '../../app/utils/password-policy.ts'
test('密码策略接受包含三类字符的安全密码', () => {
assert.equal(validatePasswordPolicy('StrongPass123'), null)
assert.equal(validatePasswordPolicy('安全Pass123!'), null)
})
test('密码策略允许6位以上的安全密码', () => {
assert.equal(validatePasswordPolicy('Pass12'), null)
})
test('密码策略拒绝少于6位的密码', () => {
assert.match(validatePasswordPolicy('Pas12') || '', /长度至少为6位/)
})
test('密码策略拒绝常见弱口令和字符类型不足的密码', () => {
assert.match(validatePasswordPolicy('12345678') || '', /过于常见/)
assert.match(validatePasswordPolicy('abcdefgh') || '', /三类/)
})
test('密码策略拒绝超过 bcrypt 有效字节长度的密码', () => {
assert.match(validatePasswordPolicy('Aa1' + '!'.repeat(70)) || '', /72字节/)
})
test('初始密码策略接受6位以上且包含两类字符的密码', () => {
assert.equal(validateInitialPasswordPolicy('abcdef7'), null)
assert.equal(validateInitialPasswordPolicy('ABCDEF1'), null)
assert.equal(validateInitialPasswordPolicy('abcdefg!'), null)
assert.equal(validateInitialPasswordPolicy('abcde1'), null)
})
test('初始密码策略拒绝不足6位的密码', () => {
const violation = getInitialPasswordPolicyViolation('Pas12')
assert.equal(violation?.code, 'AUTH_PASSWORD_TOO_SHORT')
assert.match(violation?.message || '', /至少为6位/)
})
test('初始密码策略拒绝仅包含一类字符的密码', () => {
const violation = getInitialPasswordPolicyViolation('abcdefg')
assert.equal(violation?.code, 'AUTH_INITIAL_PASSWORD_COMPLEXITY_REQUIRED')
assert.match(violation?.message || '', /两类/)
})