91 lines
2.5 KiB
TypeScript
91 lines
2.5 KiB
TypeScript
import { PhoneNumber } from './index';
|
|
import { DomainError } from '@/shared/exceptions/domain.exception';
|
|
|
|
describe('PhoneNumber ValueObject', () => {
|
|
describe('create', () => {
|
|
it('应该接受有效的中国手机号', () => {
|
|
const validPhones = [
|
|
'13800138000',
|
|
'13912345678',
|
|
'15800001111',
|
|
'18600002222',
|
|
'19900003333',
|
|
];
|
|
|
|
validPhones.forEach(phone => {
|
|
const phoneNumber = PhoneNumber.create(phone);
|
|
expect(phoneNumber.value).toBe(phone);
|
|
});
|
|
});
|
|
|
|
it('应该拒绝无效的手机号格式', () => {
|
|
const invalidPhones = [
|
|
'12800138000', // 不是1开头
|
|
'1380013800', // 少于11位
|
|
'138001380000', // 多于11位
|
|
'10800138000', // 第二位不是3-9
|
|
'abcdefghijk', // 非数字
|
|
'', // 空字符串
|
|
];
|
|
|
|
invalidPhones.forEach(phone => {
|
|
expect(() => {
|
|
PhoneNumber.create(phone);
|
|
}).toThrow(DomainError);
|
|
});
|
|
});
|
|
|
|
it('应该拒绝包含特殊字符的手机号', () => {
|
|
const invalidPhones = [
|
|
'138-0013-8000',
|
|
'138 0013 8000',
|
|
'+8613800138000',
|
|
];
|
|
|
|
invalidPhones.forEach(phone => {
|
|
expect(() => {
|
|
PhoneNumber.create(phone);
|
|
}).toThrow(DomainError);
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('masked', () => {
|
|
it('应该正确掩码手机号', () => {
|
|
const phoneNumber = PhoneNumber.create('13800138000');
|
|
const masked = phoneNumber.masked();
|
|
|
|
expect(masked).toBe('138****8000');
|
|
});
|
|
|
|
it('掩码后应该隐藏中间4位', () => {
|
|
const testCases = [
|
|
{ input: '13912345678', expected: '139****5678' },
|
|
{ input: '15800001111', expected: '158****1111' },
|
|
{ input: '18600002222', expected: '186****2222' },
|
|
];
|
|
|
|
testCases.forEach(({ input, expected }) => {
|
|
const phoneNumber = PhoneNumber.create(input);
|
|
expect(phoneNumber.masked()).toBe(expected);
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('equals', () => {
|
|
it('相同的手机号应该相等', () => {
|
|
const phone1 = PhoneNumber.create('13800138000');
|
|
const phone2 = PhoneNumber.create('13800138000');
|
|
|
|
expect(phone1.equals(phone2)).toBe(true);
|
|
});
|
|
|
|
it('不同的手机号应该不相等', () => {
|
|
const phone1 = PhoneNumber.create('13800138000');
|
|
const phone2 = PhoneNumber.create('13912345678');
|
|
|
|
expect(phone1.equals(phone2)).toBe(false);
|
|
});
|
|
});
|
|
});
|