import { describe, it, expect } from 'vitest'; import { validateUserData, validateCustomerData, validateVehicleData, validateMaintenanceVisitData, validateExpenseData } from '../form-validation'; describe('Form Validation', () => { describe('validateUserData', () => { it('should validate valid user data', () => { const validData = { name: 'أحمد محمد', username: 'ahmed123', email: 'ahmed@example.com', password: 'password123', authLevel: 3, status: 'active', }; const result = validateUserData(validData); expect(result.success).toBe(true); expect(result.errors).toEqual({}); }); it('should return errors for invalid user data', () => { const invalidData = { name: '', username: 'ab', email: 'invalid-email', password: '123', authLevel: 5, status: 'invalid', }; const result = validateUserData(invalidData); expect(result.success).toBe(false); expect(result.errors.name).toBe('الاسم مطلوب'); expect(result.errors.username).toBe('اسم المستخدم يجب أن يكون على الأقل 3 أحرف'); expect(result.errors.email).toBe('البريد الإلكتروني غير صحيح'); expect(result.errors.password).toBe('كلمة المرور يجب أن تكون على الأقل 6 أحرف'); }); }); describe('validateCustomerData', () => { it('should validate valid customer data', () => { const validData = { name: 'محمد أحمد', phone: '+966501234567', email: 'mohammed@example.com', address: 'الرياض، المملكة العربية السعودية', }; const result = validateCustomerData(validData); expect(result.success).toBe(true); expect(result.errors).toEqual({}); }); it('should validate customer with minimal data', () => { const validData = { name: 'سارة علي', phone: '', email: '', address: '', }; const result = validateCustomerData(validData); expect(result.success).toBe(true); expect(result.errors).toEqual({}); }); it('should return errors for invalid customer data', () => { const invalidData = { name: '', phone: 'invalid-phone', email: 'invalid-email', address: 'Valid address', }; const result = validateCustomerData(invalidData); expect(result.success).toBe(false); expect(result.errors.name).toBe('اسم العميل مطلوب'); expect(result.errors.phone).toBe('رقم الهاتف غير صحيح'); expect(result.errors.email).toBe('البريد الإلكتروني غير صحيح'); }); }); describe('validateVehicleData', () => { it('should validate valid vehicle data', () => { const validData = { plateNumber: 'ABC-1234', bodyType: 'Sedan', manufacturer: 'Toyota', model: 'Camry', trim: 'LE', year: '2023', transmission: 'Automatic', fuel: 'Gasoline', cylinders: '4', engineDisplacement: '2.5', useType: 'personal', ownerId: '1', }; const result = validateVehicleData(validData); expect(result.success).toBe(true); expect(result.errors).toEqual({}); }); it('should return errors for invalid vehicle data', () => { const invalidData = { plateNumber: '', bodyType: '', manufacturer: '', model: '', year: '1800', transmission: 'invalid', fuel: 'invalid', cylinders: '20', engineDisplacement: '50', useType: 'invalid', ownerId: '0', }; const result = validateVehicleData(invalidData); expect(result.success).toBe(false); expect(result.errors.plateNumber).toBe('رقم اللوحة مطلوب'); expect(result.errors.bodyType).toBe('نوع الهيكل مطلوب'); expect(result.errors.manufacturer).toBe('الشركة المصنعة مطلوبة'); expect(result.errors.model).toBe('الموديل مطلوب'); expect(result.errors.ownerId).toBe('مالك المركبة مطلوب'); }); }); describe('validateMaintenanceVisitData', () => { it('should validate valid maintenance visit data', () => { const validData = { vehicleId: '1', customerId: '1', maintenanceType: 'تغيير زيت', description: 'تغيير زيت المحرك والفلتر', cost: '150.50', paymentStatus: 'paid', kilometers: '50000', nextVisitDelay: '3', }; const result = validateMaintenanceVisitData(validData); expect(result.success).toBe(true); expect(result.errors).toEqual({}); }); it('should return errors for invalid maintenance visit data', () => { const invalidData = { vehicleId: '0', customerId: '0', maintenanceType: '', description: '', cost: '-10', paymentStatus: 'invalid', kilometers: '-100', nextVisitDelay: '5', }; const result = validateMaintenanceVisitData(invalidData); expect(result.success).toBe(false); expect(result.errors.vehicleId).toBe('المركبة مطلوبة'); expect(result.errors.customerId).toBe('العميل مطلوب'); expect(result.errors.maintenanceType).toBe('نوع الصيانة مطلوب'); expect(result.errors.description).toBe('وصف الصيانة مطلوب'); }); }); describe('validateExpenseData', () => { it('should validate valid expense data', () => { const validData = { description: 'شراء قطع غيار', category: 'قطع غيار', amount: '250.75', }; const result = validateExpenseData(validData); expect(result.success).toBe(true); expect(result.errors).toEqual({}); }); it('should return errors for invalid expense data', () => { const invalidData = { description: '', category: '', amount: '0', }; const result = validateExpenseData(invalidData); expect(result.success).toBe(false); expect(result.errors.description).toBe('وصف المصروف مطلوب'); expect(result.errors.category).toBe('فئة المصروف مطلوبة'); }); }); });