rwadurian/backend/services/identity-service/src/domain/value-objects/mnemonic.vo.spec.ts

115 lines
3.5 KiB
TypeScript

import { Mnemonic } from './index';
import { DomainError } from '@/shared/exceptions/domain.exception';
describe('Mnemonic ValueObject', () => {
describe('generate', () => {
it('应该生成有效的12个单词助记词', () => {
const mnemonic = Mnemonic.generate();
expect(mnemonic).toBeDefined();
expect(mnemonic.value).toBeDefined();
const words = mnemonic.getWords();
expect(words).toHaveLength(12);
expect(words.every(word => word.length > 0)).toBe(true);
});
it('生成的助记词应该能转换为 seed', () => {
const mnemonic = Mnemonic.generate();
const seed = mnemonic.toSeed();
expect(seed).toBeDefined();
expect(seed).toBeInstanceOf(Uint8Array);
expect(seed.length).toBeGreaterThan(0);
});
it('每次生成的助记词应该不同', () => {
const mnemonic1 = Mnemonic.generate();
const mnemonic2 = Mnemonic.generate();
expect(mnemonic1.value).not.toBe(mnemonic2.value);
});
});
describe('create', () => {
it('应该接受有效的助记词字符串', () => {
const validMnemonic = 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about';
const mnemonic = Mnemonic.create(validMnemonic);
expect(mnemonic.value).toBe(validMnemonic);
});
it('应该拒绝无效的助记词', () => {
const invalidMnemonic = 'invalid invalid invalid';
expect(() => {
Mnemonic.create(invalidMnemonic);
}).toThrow(DomainError);
});
it('应该拒绝空字符串', () => {
expect(() => {
Mnemonic.create('');
}).toThrow(DomainError);
});
it('应该拒绝非英文单词', () => {
const invalidMnemonic = '中文 助记词 测试 中文 助记词 测试 中文 助记词 测试 中文 助记词';
expect(() => {
Mnemonic.create(invalidMnemonic);
}).toThrow(DomainError);
});
});
describe('getWords', () => {
it('应该返回单词数组', () => {
const mnemonic = Mnemonic.generate();
const words = mnemonic.getWords();
expect(Array.isArray(words)).toBe(true);
expect(words.length).toBe(12);
});
});
describe('toSeed', () => {
it('相同的助记词应该生成相同的 seed', () => {
const mnemonicStr = 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about';
const mnemonic1 = Mnemonic.create(mnemonicStr);
const mnemonic2 = Mnemonic.create(mnemonicStr);
const seed1 = mnemonic1.toSeed();
const seed2 = mnemonic2.toSeed();
expect(seed1).toEqual(seed2);
});
it('不同的助记词应该生成不同的 seed', () => {
const mnemonic1 = Mnemonic.generate();
const mnemonic2 = Mnemonic.generate();
const seed1 = mnemonic1.toSeed();
const seed2 = mnemonic2.toSeed();
expect(seed1).not.toEqual(seed2);
});
});
describe('equals', () => {
it('相同的助记词应该相等', () => {
const mnemonicStr = 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about';
const mnemonic1 = Mnemonic.create(mnemonicStr);
const mnemonic2 = Mnemonic.create(mnemonicStr);
expect(mnemonic1.equals(mnemonic2)).toBe(true);
});
it('不同的助记词应该不相等', () => {
const mnemonic1 = Mnemonic.generate();
const mnemonic2 = Mnemonic.generate();
expect(mnemonic1.equals(mnemonic2)).toBe(false);
});
});
});