115 lines
3.5 KiB
TypeScript
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);
|
|
});
|
|
});
|
|
});
|