94 lines
3.2 KiB
PHP
94 lines
3.2 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Tests\Unit\Infra\Adapters\Mappers;
|
|
|
|
use Domain\Models\Entities\Employee;
|
|
use Infra\Adapters\Mappers\EmployeeMapper;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
covers(EmployeeMapper::class);
|
|
|
|
uses(TestCase::class);
|
|
|
|
describe('EmployeeMapper', function (): void {
|
|
it('maps an array row to Employee entity with all fields', function (): void {
|
|
$row = [
|
|
'MATRICULE_FIC' => '01155902',
|
|
'NOM_FIC' => 'DOE',
|
|
'PRENOM_FIC' => 'John',
|
|
'DATE_DEB_FIC' => '2024-01-15',
|
|
'DATE_FIN_FIC' => null,
|
|
'DF_CARRIERE' => '2026-12-31',
|
|
'ETAB_FIC' => '01',
|
|
'SITE_FIC' => 'LDCSER',
|
|
'SERVICE_FIC' => '097',
|
|
'DAT_CRE' => '2024-01-15',
|
|
'DAT_MAJ' => '2024-06-20',
|
|
];
|
|
|
|
$employee = EmployeeMapper::toDomain($row);
|
|
|
|
expect($employee)->toBeInstanceOf(Employee::class)
|
|
->and((string) $employee->publicEmployeeNumber->value)->toBe('01155902')
|
|
->and($employee->lastName)->toBe('DOE')
|
|
->and($employee->firstName)->toBe('John')
|
|
->and($employee->establishment->value)->toBe('01')
|
|
->and($employee->site->value)->toBe('LDCSER')
|
|
->and($employee->service->value)->toBe('097')
|
|
->and($employee->plannedEndDate?->format('Y-m-d'))->toBe('2026-12-31');
|
|
});
|
|
|
|
it('pads matricule to 7 digits if shorter numeric', function (): void {
|
|
$row = [
|
|
'MATRICULE_FIC' => '12345',
|
|
'NOM_FIC' => 'SMITH',
|
|
'PRENOM_FIC' => 'Jane',
|
|
'DATE_DEB_FIC' => '2024-01-01',
|
|
];
|
|
|
|
$employee = EmployeeMapper::toDomain($row);
|
|
|
|
expect((string) $employee->publicEmployeeNumber->value)->toBe('0012345');
|
|
});
|
|
|
|
it('supports object input and fallback column names', function (): void {
|
|
$row = (object) [
|
|
'public_employee_number' => '1234567',
|
|
'nom_fic' => 'DUPONT',
|
|
'prenom_fic' => 'Louis',
|
|
'start_date' => '2023-05-15',
|
|
'etablissement' => 'PA',
|
|
'site' => 'SLELA',
|
|
'service' => '097',
|
|
];
|
|
|
|
$employee = EmployeeMapper::toDomain($row);
|
|
|
|
expect($employee)->toBeInstanceOf(Employee::class)
|
|
->and((string) $employee->publicEmployeeNumber->value)->toBe('1234567')
|
|
->and($employee->lastName)->toBe('DUPONT')
|
|
->and($employee->firstName)->toBe('Louis');
|
|
});
|
|
|
|
it('returns null on tryToDomain when matricule is invalid', function (): void {
|
|
$row = [
|
|
'MATRICULE_FIC' => '# s996008',
|
|
'NOM_FIC' => 'ARRIVE SAINT FULGENT',
|
|
'PRENOM_FIC' => 'Baie de stockage',
|
|
];
|
|
|
|
expect(EmployeeMapper::tryToDomain($row))->toBeNull();
|
|
});
|
|
|
|
it('returns Employee on tryToDomain when matricule is valid', function (): void {
|
|
$row = [
|
|
'MATRICULE_FIC' => '01155902',
|
|
'NOM_FIC' => 'DOE',
|
|
'PRENOM_FIC' => 'John',
|
|
];
|
|
|
|
expect(EmployeeMapper::tryToDomain($row))->toBeInstanceOf(Employee::class);
|
|
});
|
|
});
|