'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); });