34 lines
1.1 KiB
TypeScript
34 lines
1.1 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
|
|
import { validateEmail, isDisposableEmail } from '@gridpilot/identity/domain/value-objects/EmailAddress';
|
|
|
|
describe('identity-domain email validation', () => {
|
|
it('accepts a valid email and normalizes it', () => {
|
|
const result = validateEmail(' USER@example.com ');
|
|
|
|
expect(result.success).toBe(true);
|
|
expect(result.email).toBe('user@example.com');
|
|
expect(result.error).toBeUndefined();
|
|
});
|
|
|
|
it('rejects an invalid email format', () => {
|
|
const result = validateEmail('not-an-email');
|
|
|
|
expect(result.success).toBe(false);
|
|
expect(result.email).toBeUndefined();
|
|
expect(result.error).toBeTypeOf('string');
|
|
});
|
|
|
|
it('rejects an email that is too short', () => {
|
|
const result = validateEmail('a@b');
|
|
|
|
expect(result.success).toBe(false);
|
|
expect(result.error).toContain('too short');
|
|
});
|
|
|
|
it('detects disposable email domains', () => {
|
|
expect(isDisposableEmail('foo@tempmail.com')).toBe(true);
|
|
expect(isDisposableEmail('bar@mailinator.com')).toBe(true);
|
|
expect(isDisposableEmail('user@example.com')).toBe(false);
|
|
});
|
|
}); |