86 lines
2.6 KiB
PHP
86 lines
2.6 KiB
PHP
<?php
|
|
|
|
use App\Models\User;
|
|
use App\Models\Employee;
|
|
use App\Models\LeaveType;
|
|
use App\Models\LeavePolicy;
|
|
use App\Models\LeaveBalance;
|
|
use App\Models\LeaveApplication;
|
|
|
|
test('manual adjustments and carried forward leaves are correctly preserved when leave applications are approved', function () {
|
|
// 1. Create Company user
|
|
$company = User::create([
|
|
'name' => 'Test Company',
|
|
'email' => 'company_' . rand(1000, 9999) . '@test.com',
|
|
'password' => bcrypt('password'),
|
|
'type' => 'company',
|
|
]);
|
|
|
|
// 2. Create Employee user
|
|
$employeeUser = User::create([
|
|
'name' => 'Test Employee',
|
|
'email' => 'employee_' . rand(1000, 9999) . '@test.com',
|
|
'password' => bcrypt('password'),
|
|
'type' => 'employee',
|
|
]);
|
|
|
|
$employee = Employee::create([
|
|
'user_id' => $employeeUser->id,
|
|
'employee_id' => 'EMP-' . rand(1000, 9999),
|
|
'date_of_joining' => '2026-01-01',
|
|
'employee_status' => 'active',
|
|
'created_by' => $company->id,
|
|
]);
|
|
|
|
// 3. Create Leave Type
|
|
$leaveType = LeaveType::create([
|
|
'name' => 'Sick Leave',
|
|
'status' => 'active',
|
|
'created_by' => $company->id,
|
|
]);
|
|
|
|
// 4. Create Leave Policy
|
|
$leavePolicy = LeavePolicy::create([
|
|
'name' => 'Sick Leave Policy',
|
|
'leave_type_id' => $leaveType->id,
|
|
'status' => 'active',
|
|
'created_by' => $company->id,
|
|
]);
|
|
|
|
// 5. Create Leave Balance with a manual adjustment of -3.00 days
|
|
$leaveBalance = LeaveBalance::create([
|
|
'employee_id' => $employeeUser->id,
|
|
'leave_type_id' => $leaveType->id,
|
|
'leave_policy_id' => $leavePolicy->id,
|
|
'year' => 2026,
|
|
'allocated_days' => 5.00,
|
|
'carried_forward' => 0.00,
|
|
'manual_adjustment' => -3.00,
|
|
'used_days' => 0.00,
|
|
'remaining_days' => 2.00,
|
|
'created_by' => $company->id,
|
|
]);
|
|
|
|
// 6. Create approved Leave Application for 2 days
|
|
$leaveApplication = LeaveApplication::create([
|
|
'employee_id' => $employeeUser->id,
|
|
'leave_type_id' => $leaveType->id,
|
|
'leave_policy_id' => $leavePolicy->id,
|
|
'start_date' => '2026-06-01',
|
|
'end_date' => '2026-06-02',
|
|
'total_days' => 2.00,
|
|
'reason' => 'Feeling sick',
|
|
'status' => 'approved',
|
|
'created_by' => $company->id,
|
|
]);
|
|
|
|
// 7. Update leave balance
|
|
$leaveApplication->updateLeaveBalance();
|
|
|
|
// 8. Assert
|
|
$freshBalance = $leaveBalance->fresh();
|
|
expect((float)$freshBalance->used_days)->toBe(2.00);
|
|
// (5.00 + 0.00 - 3.00) - 2.00 = 0.00
|
|
expect((float)$freshBalance->remaining_days)->toBe(0.00);
|
|
});
|