/** * Email Value Object Unit Tests */ import { Email } from './email.vo'; describe('Email Value Object', () => { describe('create', () => { it('should create email with valid format', () => { const email = Email.create('user@example.com'); expect(email.getValue()).toBe('user@example.com'); }); it('should normalize email to lowercase', () => { const email = Email.create('User@Example.COM'); expect(email.getValue()).toBe('user@example.com'); }); it('should trim whitespace', () => { const email = Email.create(' user@example.com '); expect(email.getValue()).toBe('user@example.com'); }); it('should throw error for empty email', () => { expect(() => Email.create('')).toThrow('Email cannot be empty.'); }); it('should throw error for invalid format', () => { expect(() => Email.create('invalid-email')).toThrow('Invalid email format'); expect(() => Email.create('@example.com')).toThrow('Invalid email format'); expect(() => Email.create('user@')).toThrow('Invalid email format'); expect(() => Email.create('user@.com')).toThrow('Invalid email format'); }); }); describe('getDomain', () => { it('should return email domain', () => { const email = Email.create('user@example.com'); expect(email.getDomain()).toBe('example.com'); }); }); describe('getLocalPart', () => { it('should return email local part', () => { const email = Email.create('user@example.com'); expect(email.getLocalPart()).toBe('user'); }); }); describe('equals', () => { it('should return true for same email', () => { const email1 = Email.create('user@example.com'); const email2 = Email.create('user@example.com'); expect(email1.equals(email2)).toBe(true); }); it('should return false for different emails', () => { const email1 = Email.create('user1@example.com'); const email2 = Email.create('user2@example.com'); expect(email1.equals(email2)).toBe(false); }); }); describe('toString', () => { it('should return email as string', () => { const email = Email.create('user@example.com'); expect(email.toString()).toBe('user@example.com'); }); }); });