uup
This commit is contained in:
201
app/lib/__tests__/form-validation.test.ts
Normal file
201
app/lib/__tests__/form-validation.test.ts
Normal file
@@ -0,0 +1,201 @@
|
||||
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('فئة المصروف مطلوبة');
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user