'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 Payroll Runs $payrollRun1 = PayrollRun::create([ 'title' => 'June 1-15 2026', 'payroll_frequency' => 'semi-monthly', 'pay_period_start' => '2026-06-01', 'pay_period_end' => '2026-06-15', 'pay_date' => '2026-06-30', 'status' => 'draft', 'created_by' => $company->id, ]); $payrollRun2 = PayrollRun::create([ 'title' => 'June 16-30 2026', 'payroll_frequency' => 'semi-monthly', 'pay_period_start' => '2026-06-16', 'pay_period_end' => '2026-06-30', 'pay_date' => '2026-06-30', 'status' => 'draft', 'created_by' => $company->id, ]); // 4. Create Payroll Entries $payrollEntry1 = PayrollEntry::create([ 'payroll_run_id' => $payrollRun1->id, 'employee_id' => $employeeUser->id, 'basic_salary' => 10000, 'created_by' => $company->id, ]); $payrollEntry2 = PayrollEntry::create([ 'payroll_run_id' => $payrollRun2->id, 'employee_id' => $employeeUser->id, 'basic_salary' => 10000, 'created_by' => $company->id, ]); $employeeIdForNumber = $employee->employee_id; // Will pad to 4 digits if numeric, or keep as string $payDate = '2026-06-30'; // Step 5: Generate first payslip number $num1 = Payslip::generatePayslipNumber($employeeUser->id, $payDate); // Create a payslip with this number $payslip1 = Payslip::create([ 'payroll_entry_id' => $payrollEntry1->id, 'employee_id' => $employeeUser->id, 'payslip_number' => $num1, 'pay_period_start' => '2026-06-01', 'pay_period_end' => '2026-06-15', 'pay_date' => $payDate, 'status' => 'generated', 'created_by' => $company->id, ]); // Step 6: Generate second payslip number for the same employee/date $num2 = Payslip::generatePayslipNumber($employeeUser->id, $payDate); expect($num2)->toBe($num1 . '-1'); // Create a payslip with this second number $payslip2 = Payslip::create([ 'payroll_entry_id' => $payrollEntry2->id, 'employee_id' => $employeeUser->id, 'payslip_number' => $num2, 'pay_period_start' => '2026-06-16', 'pay_period_end' => '2026-06-30', 'pay_date' => $payDate, 'status' => 'generated', 'created_by' => $company->id, ]); // Step 7: Generate third payslip number $num3 = Payslip::generatePayslipNumber($employeeUser->id, $payDate); expect($num3)->toBe($num1 . '-2'); });