import { describe, it, expect } from 'vitest'; import { validateCustomer } from '../validation'; describe('Customer Validation', () => { describe('validateCustomer', () => { it('should validate required name field', () => { const result = validateCustomer({ name: '' }); expect(result.isValid).toBe(false); expect(result.errors.name).toBe('اسم العميل مطلوب'); }); it('should validate name length', () => { const longName = 'أ'.repeat(101); const result = validateCustomer({ name: longName }); expect(result.isValid).toBe(false); expect(result.errors.name).toBe('الاسم يجب أن يكون أقل من 100 حرف'); }); it('should validate phone format', () => { const result = validateCustomer({ name: 'أحمد محمد', phone: 'invalid-phone' }); expect(result.isValid).toBe(false); expect(result.errors.phone).toBe('رقم الهاتف غير صحيح'); }); it('should accept valid phone formats', () => { const validPhones = [ '0501234567', '+966501234567', '050 123 4567', '050-123-4567', '(050) 123-4567', ]; validPhones.forEach(phone => { const result = validateCustomer({ name: 'أحمد محمد', phone }); expect(result.isValid).toBe(true); expect(result.errors.phone).toBeUndefined(); }); }); it('should validate email format', () => { const result = validateCustomer({ name: 'أحمد محمد', email: 'invalid-email' }); expect(result.isValid).toBe(false); expect(result.errors.email).toBe('البريد الإلكتروني غير صحيح'); }); it('should accept valid email format', () => { const result = validateCustomer({ name: 'أحمد محمد', email: 'ahmed@example.com' }); expect(result.isValid).toBe(true); expect(result.errors.email).toBeUndefined(); }); it('should allow empty optional fields', () => { const result = validateCustomer({ name: 'أحمد محمد', phone: '', email: '', address: '' }); expect(result.isValid).toBe(true); expect(Object.keys(result.errors)).toHaveLength(0); }); it('should validate complete customer data', () => { const result = validateCustomer({ name: 'أحمد محمد', phone: '0501234567', email: 'ahmed@example.com', address: 'الرياض، المملكة العربية السعودية' }); expect(result.isValid).toBe(true); expect(Object.keys(result.errors)).toHaveLength(0); }); it('should handle undefined fields gracefully', () => { const result = validateCustomer({ name: 'أحمد محمد', phone: undefined, email: undefined, address: undefined }); expect(result.isValid).toBe(true); expect(Object.keys(result.errors)).toHaveLength(0); }); it('should trim whitespace from name', () => { const result = validateCustomer({ name: ' أحمد محمد ' }); expect(result.isValid).toBe(true); }); it('should reject name with only whitespace', () => { const result = validateCustomer({ name: ' ' }); expect(result.isValid).toBe(false); expect(result.errors.name).toBe('اسم العميل مطلوب'); }); }); });