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