car_mms/app/lib/__tests__/form-validation.test.ts
2025-09-11 14:22:27 +03:00

201 lines
6.3 KiB
TypeScript

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('فئة المصروف مطلوبة');
});
});
});