From 73122898110d7a6ca4c4ce9a25e7b468ea514aa6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Munsch?= Date: Mon, 31 Aug 2026 17:29:18 +0200 Subject: [PATCH] feat(employees): rename ArcadiaEmployeeId to SiRhMatricule and expose matricule in api responses --- .../Architecture/01-architecture-globale.md | 2 +- .../Architecture/02-cycle-de-vie-requete.md | 4 +-- documentation/OpenApi/openapi.yaml | 6 ++-- .../Exceptions/EmployeeNotFoundException.php | 4 +-- .../Arcadia/Usecase/Employees/Find/Input.php | 4 +-- .../Arcadia/Usecase/Employees/Find/Output.php | 4 +-- .../Employees/FindAll/PaginatedEmployee.php | 4 +-- src/Domain/Models/Entities/Employee.php | 10 +++--- ...rcadiaEmployeeId.php => SiRhMatricule.php} | 2 +- .../Ports/Directories/EmployeeDirectory.php | 6 ++-- .../Directories/ArcadiaEmployeeDirectory.php | 4 +-- .../Directories/InMemoryEmployeeDirectory.php | 4 +-- src/Infra/Adapters/Mappers/EmployeeMapper.php | 6 ++-- .../Api/V1/Dto/Employees/EmployeeDto.php | 4 +-- .../V1/Dto/Employees/PaginatedEmployee.php | 4 +-- .../Employees/EmployeeShowRequest.php | 6 ++-- .../Presenters/Employees/EmployeeShowView.php | 4 +-- .../Api/V1/Employees/EmployeeShowTest.php | 2 +- .../Api/V1/Employees/EmployeesIndexTest.php | 4 +-- tests/Support/Mothers/EmployeeMother.php | 4 +-- .../EmployeeNotFoundExceptionTest.php | 4 +-- .../Employees/FindAllEmployeesTest.php | 4 +-- .../Usecase/Employees/FindEmployeeTest.php | 6 ++-- tests/Unit/Domain/Entities/EmployeeTest.php | 4 +-- ...ployeeIdTest.php => SiRhMatriculeTest.php} | 34 +++++++++---------- .../InMemoryEmployeeDirectoryTest.php | 18 +++++----- .../Employees/EmployeeShowPresenterTest.php | 4 +-- .../Employees/EmployeesIndexPresenterTest.php | 4 +-- 28 files changed, 83 insertions(+), 83 deletions(-) rename src/Domain/Models/ValueObjects/Employees/{ArcadiaEmployeeId.php => SiRhMatricule.php} (89%) rename tests/Unit/Domain/Models/ValueObjects/Employees/{ArcadiaEmployeeIdTest.php => SiRhMatriculeTest.php} (57%) diff --git a/documentation/Architecture/01-architecture-globale.md b/documentation/Architecture/01-architecture-globale.md index 7c22e24..5277c07 100644 --- a/documentation/Architecture/01-architecture-globale.md +++ b/documentation/Architecture/01-architecture-globale.md @@ -36,7 +36,7 @@ Arcadia API combine 3 paradigmes éprouvés pour créer une base de code hauteme - **Dépendance** : Ne dépend de **RIEN** (sauf `Shared\`). **Aucun import Laravel / Eloquent / HTTP n'est toléré**. - **Contenu** : - **`Models/Entities/`** : Entités riches, `final readonly`, immutables, implémentant `Shared\DDD\Model\Entity` ou `Shared\DDD\Model\AggregateRoot` (modèles d'écriture) et/ou `Shared\DDD\Model\ReadModel` (modèles de lecture). - - **`Models/ValueObjects/`** : Objets-valeurs typés et auto-validants (ex: `ArcadiaEmployeeId`, `NutriScore`, `BrandCode`). + - **`Models/ValueObjects/`** : Objets-valeurs typés et auto-validants (ex: `SiRhMatricule`, `NutriScore`, `BrandCode`). - **`Ports/`** : Interfaces des opérations externes : - `Directories/` : Ports de lecture seule pour modèles de lecture purs (`Directory`). - `Repositories/` : Ports de cycle de vie et requêtes d'agrégats racines (`Repository`). diff --git a/documentation/Architecture/02-cycle-de-vie-requete.md b/documentation/Architecture/02-cycle-de-vie-requete.md index 1eafae8..f5b46f4 100644 --- a/documentation/Architecture/02-cycle-de-vie-requete.md +++ b/documentation/Architecture/02-cycle-de-vie-requete.md @@ -14,7 +14,7 @@ flowchart TD Request --> Controller["EmployeeShowController (__invoke)"] subgraph Presentation Couche - Controller -->|"Instancie"| Input["Input(ArcadiaEmployeeId)"] + Controller -->|"Instancie"| Input["Input(SiRhMatricule)"] Controller -->|"Lance"| Builder["UsecaseBuilder::using(executor)"] end @@ -78,7 +78,7 @@ final readonly class EmployeeShowController public function __invoke(EmployeeShowRequest $request, string $identifier): JsonResponse { - $input = new Input(new ArcadiaEmployeeId($identifier)); + $input = new Input(new SiRhMatricule($identifier)); /** @var EmployeeShowView $view */ $view = UsecaseBuilder::using($this->executor) diff --git a/documentation/OpenApi/openapi.yaml b/documentation/OpenApi/openapi.yaml index c593fea..355b6c3 100644 --- a/documentation/OpenApi/openapi.yaml +++ b/documentation/OpenApi/openapi.yaml @@ -767,7 +767,7 @@ components: type: object description: Représentation canonique d'un employé dans le métamodèle Arcadia. required: - - id + - matricule - firstName - lastName - establishment @@ -775,10 +775,10 @@ components: - service - startDate properties: - id: + matricule: type: string pattern: '^\d{7,8}$' - description: Matricule public unique de l'employé. + description: Matricule public unique de l'employé (SIRH). example: "01155902" firstName: type: string diff --git a/src/Application/Arcadia/Exceptions/EmployeeNotFoundException.php b/src/Application/Arcadia/Exceptions/EmployeeNotFoundException.php index a64025b..2bbe448 100644 --- a/src/Application/Arcadia/Exceptions/EmployeeNotFoundException.php +++ b/src/Application/Arcadia/Exceptions/EmployeeNotFoundException.php @@ -4,12 +4,12 @@ declare(strict_types=1); namespace Application\Arcadia\Exceptions; -use Domain\Models\ValueObjects\Employees\ArcadiaEmployeeId; +use Domain\Models\ValueObjects\Employees\SiRhMatricule; use Shared\DDD\Exception\NotFoundException; final class EmployeeNotFoundException extends NotFoundException { - public static function forEmployee(ArcadiaEmployeeId | string $id): self + public static function forEmployee(SiRhMatricule | string $id): self { return new self("Employee '{$id}' not found."); } diff --git a/src/Application/Arcadia/Usecase/Employees/Find/Input.php b/src/Application/Arcadia/Usecase/Employees/Find/Input.php index eb040db..6fff2dd 100644 --- a/src/Application/Arcadia/Usecase/Employees/Find/Input.php +++ b/src/Application/Arcadia/Usecase/Employees/Find/Input.php @@ -4,13 +4,13 @@ declare(strict_types=1); namespace Application\Arcadia\Usecase\Employees\Find; -use Domain\Models\ValueObjects\Employees\ArcadiaEmployeeId; +use Domain\Models\ValueObjects\Employees\SiRhMatricule; use Shared\DDD\Usecase\Input as UsecaseInput; final readonly class Input implements UsecaseInput { public function __construct( - public ArcadiaEmployeeId $id, + public SiRhMatricule $id, ) { } } diff --git a/src/Application/Arcadia/Usecase/Employees/Find/Output.php b/src/Application/Arcadia/Usecase/Employees/Find/Output.php index ae6dfd6..7c25d93 100644 --- a/src/Application/Arcadia/Usecase/Employees/Find/Output.php +++ b/src/Application/Arcadia/Usecase/Employees/Find/Output.php @@ -4,13 +4,13 @@ declare(strict_types=1); namespace Application\Arcadia\Usecase\Employees\Find; -use Domain\Models\ValueObjects\Employees\ArcadiaEmployeeId; +use Domain\Models\ValueObjects\Employees\SiRhMatricule; use Shared\DDD\Usecase\Output as UsecaseOutput; final readonly class Output implements UsecaseOutput { public function __construct( - public ArcadiaEmployeeId $id, + public SiRhMatricule $id, public string $firstName, public string $lastName, public string $establishment, diff --git a/src/Application/Arcadia/Usecase/Employees/FindAll/PaginatedEmployee.php b/src/Application/Arcadia/Usecase/Employees/FindAll/PaginatedEmployee.php index e1cb3d6..9e58ea1 100644 --- a/src/Application/Arcadia/Usecase/Employees/FindAll/PaginatedEmployee.php +++ b/src/Application/Arcadia/Usecase/Employees/FindAll/PaginatedEmployee.php @@ -5,13 +5,13 @@ declare(strict_types=1); namespace Application\Arcadia\Usecase\Employees\FindAll; use Domain\Models\Entities\Employee; -use Domain\Models\ValueObjects\Employees\ArcadiaEmployeeId; +use Domain\Models\ValueObjects\Employees\SiRhMatricule; use Shared\DDD\Usecase\Output as UsecaseOutput; final readonly class PaginatedEmployee implements UsecaseOutput { public function __construct( - public ArcadiaEmployeeId $id, + public SiRhMatricule $id, public string $firstName, public string $lastName, public string $establishment, diff --git a/src/Domain/Models/Entities/Employee.php b/src/Domain/Models/Entities/Employee.php index 76e377f..6f41640 100644 --- a/src/Domain/Models/Entities/Employee.php +++ b/src/Domain/Models/Entities/Employee.php @@ -4,17 +4,17 @@ declare(strict_types=1); namespace Domain\Models\Entities; -use Domain\Models\ValueObjects\Employees\ArcadiaEmployeeId; +use Domain\Models\ValueObjects\Employees\SiRhMatricule; use Domain\Models\ValueObjects\EstablishmentCode; use Domain\Models\ValueObjects\ServiceId; use Domain\Models\ValueObjects\SiteId; use Shared\DDD\Model\ReadModel; -/** @implements ReadModel */ +/** @implements ReadModel */ final readonly class Employee implements ReadModel { private function __construct( - public ArcadiaEmployeeId $publicEmployeeNumber, + public SiRhMatricule $publicEmployeeNumber, public string $lastName, public string $firstName, public \DateTimeInterface $startDate, @@ -29,13 +29,13 @@ final readonly class Employee implements ReadModel } #[\Override] - public function id(): ArcadiaEmployeeId + public function id(): SiRhMatricule { return $this->publicEmployeeNumber; } public static function hydrate( - ArcadiaEmployeeId $publicEmployeeNumber, + SiRhMatricule $publicEmployeeNumber, string $lastName, string $firstName, \DateTimeInterface $startDate, diff --git a/src/Domain/Models/ValueObjects/Employees/ArcadiaEmployeeId.php b/src/Domain/Models/ValueObjects/Employees/SiRhMatricule.php similarity index 89% rename from src/Domain/Models/ValueObjects/Employees/ArcadiaEmployeeId.php rename to src/Domain/Models/ValueObjects/Employees/SiRhMatricule.php index 48f8eb9..6ea18f5 100644 --- a/src/Domain/Models/ValueObjects/Employees/ArcadiaEmployeeId.php +++ b/src/Domain/Models/ValueObjects/Employees/SiRhMatricule.php @@ -6,7 +6,7 @@ namespace Domain\Models\ValueObjects\Employees; use Shared\DDD\Model\EntityId; -final readonly class ArcadiaEmployeeId extends EntityId +final readonly class SiRhMatricule extends EntityId { private const string PATTERN = '/^\d{7,8}$/'; diff --git a/src/Domain/Ports/Directories/EmployeeDirectory.php b/src/Domain/Ports/Directories/EmployeeDirectory.php index 2d45e0f..4bcfdc6 100644 --- a/src/Domain/Ports/Directories/EmployeeDirectory.php +++ b/src/Domain/Ports/Directories/EmployeeDirectory.php @@ -5,14 +5,14 @@ declare(strict_types=1); namespace Domain\Ports\Directories; use Domain\Models\Entities\Employee; -use Domain\Models\ValueObjects\Employees\ArcadiaEmployeeId; +use Domain\Models\ValueObjects\Employees\SiRhMatricule; use Domain\Models\ValueObjects\Employees\EmployeeFilter; use Domain\Models\ValueObjects\Employees\EmployeeSorter; use Shared\DDD\Port\Directory; use Shared\Paginated; use Shared\Pagination; -/** @extends Directory */ +/** @extends Directory */ interface EmployeeDirectory extends Directory { /** @return Paginated */ @@ -22,5 +22,5 @@ interface EmployeeDirectory extends Directory ?EmployeeFilter $filter = null, ): Paginated; - public function find(ArcadiaEmployeeId $id): ?Employee; + public function find(SiRhMatricule $id): ?Employee; } diff --git a/src/Infra/Adapters/Directories/ArcadiaEmployeeDirectory.php b/src/Infra/Adapters/Directories/ArcadiaEmployeeDirectory.php index 3a85ed8..2f24369 100644 --- a/src/Infra/Adapters/Directories/ArcadiaEmployeeDirectory.php +++ b/src/Infra/Adapters/Directories/ArcadiaEmployeeDirectory.php @@ -6,7 +6,7 @@ namespace Infra\Adapters\Directories; use Database\ArcadiaReplicate\Tables\Refp\RuPersonneSirhTable; use Domain\Models\Entities\Employee; -use Domain\Models\ValueObjects\Employees\ArcadiaEmployeeId; +use Domain\Models\ValueObjects\Employees\SiRhMatricule; use Domain\Models\ValueObjects\Employees\EmployeeFilter; use Domain\Models\ValueObjects\Employees\EmployeeSortColumn; use Domain\Models\ValueObjects\Employees\EmployeeSorter; @@ -81,7 +81,7 @@ final class ArcadiaEmployeeDirectory implements EmployeeDirectory } #[\Override] - public function find(ArcadiaEmployeeId $id): ?Employee + public function find(SiRhMatricule $id): ?Employee { $query = $this->connection ->table(RuPersonneSirhTable::table($this->connection)) diff --git a/src/Infra/Adapters/Directories/InMemoryEmployeeDirectory.php b/src/Infra/Adapters/Directories/InMemoryEmployeeDirectory.php index 1d97566..e29b933 100644 --- a/src/Infra/Adapters/Directories/InMemoryEmployeeDirectory.php +++ b/src/Infra/Adapters/Directories/InMemoryEmployeeDirectory.php @@ -5,7 +5,7 @@ declare(strict_types=1); namespace Infra\Adapters\Directories; use Domain\Models\Entities\Employee; -use Domain\Models\ValueObjects\Employees\ArcadiaEmployeeId; +use Domain\Models\ValueObjects\Employees\SiRhMatricule; use Domain\Models\ValueObjects\Employees\EmployeeFilter; use Domain\Models\ValueObjects\Employees\EmployeeSortColumn; use Domain\Models\ValueObjects\Employees\EmployeeSorter; @@ -33,7 +33,7 @@ final class InMemoryEmployeeDirectory implements EmployeeDirectory } #[\Override] - public function find(ArcadiaEmployeeId $id): ?Employee + public function find(SiRhMatricule $id): ?Employee { return $this->employees[$id->value] ?? null; } diff --git a/src/Infra/Adapters/Mappers/EmployeeMapper.php b/src/Infra/Adapters/Mappers/EmployeeMapper.php index f5a2477..9d5e7ea 100644 --- a/src/Infra/Adapters/Mappers/EmployeeMapper.php +++ b/src/Infra/Adapters/Mappers/EmployeeMapper.php @@ -5,7 +5,7 @@ declare(strict_types=1); namespace Infra\Adapters\Mappers; use Domain\Models\Entities\Employee; -use Domain\Models\ValueObjects\Employees\ArcadiaEmployeeId; +use Domain\Models\ValueObjects\Employees\SiRhMatricule; use Domain\Models\ValueObjects\EstablishmentCode; use Domain\Models\ValueObjects\ServiceId; use Domain\Models\ValueObjects\SiteId; @@ -39,7 +39,7 @@ final readonly class EmployeeMapper $data['MATRICULE_FIC'] ?? $data['matricule_fic'] ?? $data['public_employee_number'] ?? null, '' )); - // Garantir un format 7 ou 8 chiffres pour ArcadiaEmployeeId + // Garantir un format 7 ou 8 chiffres pour SiRhMatricule if (is_numeric($rawMatricule) && strlen($rawMatricule) < 7) { $rawMatricule = str_pad($rawMatricule, 7, '0', STR_PAD_LEFT); } @@ -61,7 +61,7 @@ final readonly class EmployeeMapper $updatedAt = self::parseDate($data['DAT_MAJ'] ?? $data['dat_maj'] ?? $data['updated_at'] ?? null); return Employee::hydrate( - publicEmployeeNumber: new ArcadiaEmployeeId($rawMatricule), + publicEmployeeNumber: new SiRhMatricule($rawMatricule), lastName: $lastName, firstName: $firstName, startDate: $startDate, diff --git a/src/Presentation/Api/V1/Dto/Employees/EmployeeDto.php b/src/Presentation/Api/V1/Dto/Employees/EmployeeDto.php index 8472cc9..70fe126 100644 --- a/src/Presentation/Api/V1/Dto/Employees/EmployeeDto.php +++ b/src/Presentation/Api/V1/Dto/Employees/EmployeeDto.php @@ -10,7 +10,7 @@ use Presentation\Api\V1\Presenters\Employees\EmployeeShowView; final readonly class EmployeeDto implements ApiResponseDto { public function __construct( - public string $id, + public string $matricule, public string $firstName, public string $lastName, public string $establishment, @@ -25,7 +25,7 @@ final readonly class EmployeeDto implements ApiResponseDto public static function fromView(EmployeeShowView $view): self { return new self( - id: (string) $view->id, + matricule: (string) $view->id, firstName: $view->firstName, lastName: $view->lastName, establishment: $view->establishment, diff --git a/src/Presentation/Api/V1/Dto/Employees/PaginatedEmployee.php b/src/Presentation/Api/V1/Dto/Employees/PaginatedEmployee.php index 0778350..5678813 100644 --- a/src/Presentation/Api/V1/Dto/Employees/PaginatedEmployee.php +++ b/src/Presentation/Api/V1/Dto/Employees/PaginatedEmployee.php @@ -10,7 +10,7 @@ use Presentation\Api\V1\Contracts\ApiResponseDto; final readonly class PaginatedEmployee implements ApiResponseDto { public function __construct( - public string $id, + public string $matricule, public string $firstName, public string $lastName, public string $establishment, @@ -25,7 +25,7 @@ final readonly class PaginatedEmployee implements ApiResponseDto public static function fromUsecase(UsecasePaginatedEmployee $employee): self { return new self( - id: (string) $employee->id, + matricule: (string) $employee->id, firstName: $employee->firstName, lastName: $employee->lastName, establishment: $employee->establishment, diff --git a/src/Presentation/Api/V1/Http/Requests/Employees/EmployeeShowRequest.php b/src/Presentation/Api/V1/Http/Requests/Employees/EmployeeShowRequest.php index ea9b2fc..eb76df8 100644 --- a/src/Presentation/Api/V1/Http/Requests/Employees/EmployeeShowRequest.php +++ b/src/Presentation/Api/V1/Http/Requests/Employees/EmployeeShowRequest.php @@ -4,7 +4,7 @@ declare(strict_types=1); namespace Presentation\Api\V1\Http\Requests\Employees; -use Domain\Models\ValueObjects\Employees\ArcadiaEmployeeId; +use Domain\Models\ValueObjects\Employees\SiRhMatricule; use Illuminate\Foundation\Http\FormRequest; final class EmployeeShowRequest extends FormRequest @@ -24,8 +24,8 @@ final class EmployeeShowRequest extends FormRequest ]); } - public function employeeId(): ArcadiaEmployeeId + public function employeeId(): SiRhMatricule { - return new ArcadiaEmployeeId($this->string('employeeId')->value()); + return new SiRhMatricule($this->string('employeeId')->value()); } } diff --git a/src/Presentation/Api/V1/Presenters/Employees/EmployeeShowView.php b/src/Presentation/Api/V1/Presenters/Employees/EmployeeShowView.php index 2199f56..258bf79 100644 --- a/src/Presentation/Api/V1/Presenters/Employees/EmployeeShowView.php +++ b/src/Presentation/Api/V1/Presenters/Employees/EmployeeShowView.php @@ -4,12 +4,12 @@ declare(strict_types=1); namespace Presentation\Api\V1\Presenters\Employees; -use Domain\Models\ValueObjects\Employees\ArcadiaEmployeeId; +use Domain\Models\ValueObjects\Employees\SiRhMatricule; final readonly class EmployeeShowView { public function __construct( - public ArcadiaEmployeeId $id, + public SiRhMatricule $id, public string $firstName, public string $lastName, public string $establishment, diff --git a/tests/Feature/Api/V1/Employees/EmployeeShowTest.php b/tests/Feature/Api/V1/Employees/EmployeeShowTest.php index e1d228a..7eb538a 100644 --- a/tests/Feature/Api/V1/Employees/EmployeeShowTest.php +++ b/tests/Feature/Api/V1/Employees/EmployeeShowTest.php @@ -34,7 +34,7 @@ describe('Employee Show Feature API', function (): void { $response->assertStatus(200); $response->assertJson([ 'employee' => [ - 'id' => $employeeNumber, + 'matricule' => $employeeNumber, 'lastName' => 'DUPONT', 'firstName' => 'Jean', ], diff --git a/tests/Feature/Api/V1/Employees/EmployeesIndexTest.php b/tests/Feature/Api/V1/Employees/EmployeesIndexTest.php index f2146cc..8fd0863 100644 --- a/tests/Feature/Api/V1/Employees/EmployeesIndexTest.php +++ b/tests/Feature/Api/V1/Employees/EmployeesIndexTest.php @@ -115,7 +115,7 @@ describe('Employees Index Feature API', function (): void { // THEN $response->assertStatus(200); $response->assertJsonCount(1, 'employees'); - $response->assertJsonPath('employees.0.id', '01155902'); + $response->assertJsonPath('employees.0.matricule', '01155902'); }); it('returns 200 OK and filters results for siteIds array query filter', function (): void { @@ -185,7 +185,7 @@ describe('Employees Index Feature API', function (): void { // THEN $response->assertStatus(200); $response->assertJsonCount(1, 'employees'); - $response->assertJsonPath('employees.0.id', '01155902'); + $response->assertJsonPath('employees.0.matricule', '01155902'); $response->assertJsonPath('pagination.totalItems', 1); }); }); diff --git a/tests/Support/Mothers/EmployeeMother.php b/tests/Support/Mothers/EmployeeMother.php index 1e3cbcc..17179b3 100644 --- a/tests/Support/Mothers/EmployeeMother.php +++ b/tests/Support/Mothers/EmployeeMother.php @@ -5,7 +5,7 @@ declare(strict_types=1); namespace Tests\Support\Mothers; use Domain\Models\Entities\Employee; -use Domain\Models\ValueObjects\Employees\ArcadiaEmployeeId; +use Domain\Models\ValueObjects\Employees\SiRhMatricule; use Domain\Models\ValueObjects\EstablishmentCode; use Domain\Models\ValueObjects\ServiceId; use Domain\Models\ValueObjects\SiteId; @@ -18,7 +18,7 @@ final class EmployeeMother ?string $firstName = null, ): Employee { return Employee::hydrate( - publicEmployeeNumber: new ArcadiaEmployeeId($employeeNumber ?? '1234567'), + publicEmployeeNumber: new SiRhMatricule($employeeNumber ?? '1234567'), lastName: $lastName ?? 'Dupont', firstName: $firstName ?? 'Jean', startDate: new \DateTimeImmutable('2024-01-01'), diff --git a/tests/Unit/Application/Arcadia/Exceptions/EmployeeNotFoundExceptionTest.php b/tests/Unit/Application/Arcadia/Exceptions/EmployeeNotFoundExceptionTest.php index e6ca360..95e9eee 100644 --- a/tests/Unit/Application/Arcadia/Exceptions/EmployeeNotFoundExceptionTest.php +++ b/tests/Unit/Application/Arcadia/Exceptions/EmployeeNotFoundExceptionTest.php @@ -5,7 +5,7 @@ declare(strict_types=1); namespace Tests\Unit\Application\Arcadia\Exceptions; use Application\Arcadia\Exceptions\EmployeeNotFoundException; -use Domain\Models\ValueObjects\Employees\ArcadiaEmployeeId; +use Domain\Models\ValueObjects\Employees\SiRhMatricule; use Shared\DDD\Exception\NotFoundException; covers(EmployeeNotFoundException::class); @@ -13,7 +13,7 @@ covers(EmployeeNotFoundException::class); describe('EmployeeNotFoundException Unit Tests', function (): void { it('creates exception from value object', function (): void { // GIVEN - $id = new ArcadiaEmployeeId('01155902'); + $id = new SiRhMatricule('01155902'); // WHEN $exception = EmployeeNotFoundException::forEmployee($id); diff --git a/tests/Unit/Application/Arcadia/Usecase/Employees/FindAllEmployeesTest.php b/tests/Unit/Application/Arcadia/Usecase/Employees/FindAllEmployeesTest.php index 530c89a..31d7859 100644 --- a/tests/Unit/Application/Arcadia/Usecase/Employees/FindAllEmployeesTest.php +++ b/tests/Unit/Application/Arcadia/Usecase/Employees/FindAllEmployeesTest.php @@ -9,7 +9,7 @@ use Application\Arcadia\Usecase\Employees\FindAll\Input; use Application\Arcadia\Usecase\Employees\FindAll\Output; use Application\Arcadia\Usecase\Employees\FindAll\PaginatedEmployee; use Domain\Models\Entities\Employee; -use Domain\Models\ValueObjects\Employees\ArcadiaEmployeeId; +use Domain\Models\ValueObjects\Employees\SiRhMatricule; use Domain\Models\ValueObjects\Employees\EmployeeSortColumn; use Domain\Models\ValueObjects\Employees\EmployeeSorter; use Domain\Models\ValueObjects\EstablishmentCode; @@ -34,7 +34,7 @@ describe('FindAllEmployees Usecase Unit Tests', function (): void { it('executes successfully and returns paginated output DTO', function () use ($directory): void { // GIVEN - $employeeId = new ArcadiaEmployeeId('01155902'); + $employeeId = new SiRhMatricule('01155902'); $employee = Employee::hydrate( publicEmployeeNumber: $employeeId, lastName: 'DOE', diff --git a/tests/Unit/Application/Arcadia/Usecase/Employees/FindEmployeeTest.php b/tests/Unit/Application/Arcadia/Usecase/Employees/FindEmployeeTest.php index 1296257..098c30a 100644 --- a/tests/Unit/Application/Arcadia/Usecase/Employees/FindEmployeeTest.php +++ b/tests/Unit/Application/Arcadia/Usecase/Employees/FindEmployeeTest.php @@ -9,7 +9,7 @@ use Application\Arcadia\Usecase\Employees\Find\FindEmployee; use Application\Arcadia\Usecase\Employees\Find\Input; use Application\Arcadia\Usecase\Employees\Find\Output; use Domain\Models\Entities\Employee; -use Domain\Models\ValueObjects\Employees\ArcadiaEmployeeId; +use Domain\Models\ValueObjects\Employees\SiRhMatricule; use Domain\Models\ValueObjects\EstablishmentCode; use Domain\Models\ValueObjects\ServiceId; use Domain\Models\ValueObjects\SiteId; @@ -30,7 +30,7 @@ describe('FindEmployee Usecase Unit Tests', function (): void { it('executes successfully and returns Output when employee exists', function () use ($directory): void { // GIVEN - $employeeId = new ArcadiaEmployeeId('01155902'); + $employeeId = new SiRhMatricule('01155902'); $employee = Employee::hydrate( publicEmployeeNumber: $employeeId, lastName: 'DOE', @@ -64,7 +64,7 @@ describe('FindEmployee Usecase Unit Tests', function (): void { it('throws NotFoundException when employee does not exist', function () use ($directory): void { // GIVEN - $employeeId = new ArcadiaEmployeeId('01155902'); + $employeeId = new SiRhMatricule('01155902'); $usecase = new FindEmployee($directory); $input = new Input($employeeId); diff --git a/tests/Unit/Domain/Entities/EmployeeTest.php b/tests/Unit/Domain/Entities/EmployeeTest.php index 1b45608..7d15e23 100644 --- a/tests/Unit/Domain/Entities/EmployeeTest.php +++ b/tests/Unit/Domain/Entities/EmployeeTest.php @@ -5,7 +5,7 @@ declare(strict_types=1); namespace Tests\Unit\Domain\Entities; use Domain\Models\Entities\Employee; -use Domain\Models\ValueObjects\Employees\ArcadiaEmployeeId; +use Domain\Models\ValueObjects\Employees\SiRhMatricule; use Domain\Models\ValueObjects\EstablishmentCode; use Domain\Models\ValueObjects\ServiceId; use Domain\Models\ValueObjects\SiteId; @@ -15,7 +15,7 @@ covers(Employee::class); describe('Employee Entity', function (): void { it('can be instantiated and exposes its id', function (): void { // GIVEN - $id = new ArcadiaEmployeeId('12345678'); + $id = new SiRhMatricule('12345678'); $now = new \DateTimeImmutable(); // WHEN diff --git a/tests/Unit/Domain/Models/ValueObjects/Employees/ArcadiaEmployeeIdTest.php b/tests/Unit/Domain/Models/ValueObjects/Employees/SiRhMatriculeTest.php similarity index 57% rename from tests/Unit/Domain/Models/ValueObjects/Employees/ArcadiaEmployeeIdTest.php rename to tests/Unit/Domain/Models/ValueObjects/Employees/SiRhMatriculeTest.php index c60bff0..c7a9782 100644 --- a/tests/Unit/Domain/Models/ValueObjects/Employees/ArcadiaEmployeeIdTest.php +++ b/tests/Unit/Domain/Models/ValueObjects/Employees/SiRhMatriculeTest.php @@ -4,22 +4,22 @@ declare(strict_types=1); namespace Tests\Unit\Domain; -use Domain\Models\ValueObjects\Employees\ArcadiaEmployeeId; +use Domain\Models\ValueObjects\Employees\SiRhMatricule; -covers(ArcadiaEmployeeId::class); +covers(SiRhMatricule::class); -describe('ArcadiaEmployeeId Value Object Instantiation', function (): void { +describe('SiRhMatricule Value Object Instantiation', function (): void { it('instantiates successfully with a valid 7-digit matricule', function (): void { // GIVEN $validMatricule = '0115590'; // WHEN - $employeeId = new ArcadiaEmployeeId($validMatricule); + $matricule = new SiRhMatricule($validMatricule); // THEN - expect($employeeId->value) + expect($matricule->value) ->toBe('0115590') - ->and((string) $employeeId)->toBe('0115590'); + ->and((string) $matricule)->toBe('0115590'); }); it('instantiates successfully with a valid 8-digit matricule', function (): void { @@ -27,19 +27,19 @@ describe('ArcadiaEmployeeId Value Object Instantiation', function (): void { $validMatricule = '01155902'; // WHEN - $employeeId = new ArcadiaEmployeeId($validMatricule); + $matricule = new SiRhMatricule($validMatricule); // THEN - expect($employeeId->value) + expect($matricule->value) ->toBe('01155902') - ->and((string) $employeeId)->toBe('01155902'); + ->and((string) $matricule)->toBe('01155902'); }); - it('supports equality check with another ArcadiaEmployeeId instance', function (): void { + it('supports equality check with another SiRhMatricule instance', function (): void { // GIVEN - $firstId = new ArcadiaEmployeeId('01155902'); - $sameId = new ArcadiaEmployeeId('01155902'); - $differentId = new ArcadiaEmployeeId('01155901'); + $firstId = new SiRhMatricule('01155902'); + $sameId = new SiRhMatricule('01155902'); + $differentId = new SiRhMatricule('01155901'); // WHEN & THEN expect($firstId->equals($sameId)) @@ -50,19 +50,19 @@ describe('ArcadiaEmployeeId Value Object Instantiation', function (): void { it('can be converted to a string representation', function (): void { // GIVEN - $employeeId = new ArcadiaEmployeeId('01155902'); + $matricule = new SiRhMatricule('01155902'); // WHEN - $stringRepresentation = (string) $employeeId; + $stringRepresentation = (string) $matricule; // THEN expect($stringRepresentation)->toBe('01155902'); }); }); -describe('ArcadiaEmployeeId Value Object Domain Rules', function (): void { +describe('SiRhMatricule Value Object Domain Rules', function (): void { it('throws a DomainException when given an invalid matricule pattern', function (string $invalidMatricule): void { - expect(fn () => new ArcadiaEmployeeId($invalidMatricule)) + expect(fn () => new SiRhMatricule($invalidMatricule)) ->toThrow(\DomainException::class); })->with([ 'too short' => '12345', diff --git a/tests/Unit/Infra/Adapters/Directories/InMemoryEmployeeDirectoryTest.php b/tests/Unit/Infra/Adapters/Directories/InMemoryEmployeeDirectoryTest.php index 381cfab..2f97f82 100644 --- a/tests/Unit/Infra/Adapters/Directories/InMemoryEmployeeDirectoryTest.php +++ b/tests/Unit/Infra/Adapters/Directories/InMemoryEmployeeDirectoryTest.php @@ -5,7 +5,7 @@ declare(strict_types=1); namespace Tests\Unit\Infra\Adapters\Directories; use Domain\Models\Entities\Employee; -use Domain\Models\ValueObjects\Employees\ArcadiaEmployeeId; +use Domain\Models\ValueObjects\Employees\SiRhMatricule; use Domain\Models\ValueObjects\Employees\EmployeeFilter; use Domain\Models\ValueObjects\Employees\EmployeeSortColumn; use Domain\Models\ValueObjects\Employees\EmployeeSorter; @@ -21,7 +21,7 @@ describe('InMemoryEmployeeDirectory Unit Tests', function (): void { it('finds an employee by id or returns null if not found', function (): void { // GIVEN $directory = new InMemoryEmployeeDirectory(); - $employeeId = new ArcadiaEmployeeId('01155902'); + $employeeId = new SiRhMatricule('01155902'); $employee = Employee::hydrate( publicEmployeeNumber: $employeeId, lastName: 'DOE', @@ -40,7 +40,7 @@ describe('InMemoryEmployeeDirectory Unit Tests', function (): void { // WHEN $found = $directory->find($employeeId); - $missing = $directory->find(new ArcadiaEmployeeId('99999999')); + $missing = $directory->find(new SiRhMatricule('99999999')); // THEN expect($found)->toBe($employee) @@ -52,7 +52,7 @@ describe('InMemoryEmployeeDirectory Unit Tests', function (): void { $directory = new InMemoryEmployeeDirectory(); $emp1 = Employee::hydrate( - publicEmployeeNumber: new ArcadiaEmployeeId('00000001'), + publicEmployeeNumber: new SiRhMatricule('00000001'), lastName: 'ALICE', firstName: 'A', startDate: new \DateTimeImmutable('2024-01-01'), @@ -66,7 +66,7 @@ describe('InMemoryEmployeeDirectory Unit Tests', function (): void { ); $emp2 = Employee::hydrate( - publicEmployeeNumber: new ArcadiaEmployeeId('00000002'), + publicEmployeeNumber: new SiRhMatricule('00000002'), lastName: 'BOB', firstName: 'B', startDate: new \DateTimeImmutable('2024-02-01'), @@ -99,7 +99,7 @@ describe('InMemoryEmployeeDirectory Unit Tests', function (): void { $directory = new InMemoryEmployeeDirectory(); $emp1 = Employee::hydrate( - publicEmployeeNumber: new ArcadiaEmployeeId('00000001'), + publicEmployeeNumber: new SiRhMatricule('00000001'), lastName: 'ALICE', firstName: 'A', startDate: new \DateTimeImmutable('2023-01-01'), @@ -113,7 +113,7 @@ describe('InMemoryEmployeeDirectory Unit Tests', function (): void { ); $emp2 = Employee::hydrate( - publicEmployeeNumber: new ArcadiaEmployeeId('00000002'), + publicEmployeeNumber: new SiRhMatricule('00000002'), lastName: 'BOB', firstName: 'B', startDate: new \DateTimeImmutable('2023-01-01'), @@ -127,7 +127,7 @@ describe('InMemoryEmployeeDirectory Unit Tests', function (): void { ); $emp3 = Employee::hydrate( - publicEmployeeNumber: new ArcadiaEmployeeId('00000003'), + publicEmployeeNumber: new SiRhMatricule('00000003'), lastName: 'CHARLIE', firstName: 'C', startDate: new \DateTimeImmutable('2024-06-01'), @@ -159,7 +159,7 @@ describe('InMemoryEmployeeDirectory Unit Tests', function (): void { it('clears all stored employees', function (): void { // GIVEN $directory = new InMemoryEmployeeDirectory(); - $employeeId = new ArcadiaEmployeeId('01155902'); + $employeeId = new SiRhMatricule('01155902'); $employee = Employee::hydrate( publicEmployeeNumber: $employeeId, lastName: 'DOE', diff --git a/tests/Unit/Presentation/Api/V1/Presenters/Employees/EmployeeShowPresenterTest.php b/tests/Unit/Presentation/Api/V1/Presenters/Employees/EmployeeShowPresenterTest.php index 6caaad5..63e9eb5 100644 --- a/tests/Unit/Presentation/Api/V1/Presenters/Employees/EmployeeShowPresenterTest.php +++ b/tests/Unit/Presentation/Api/V1/Presenters/Employees/EmployeeShowPresenterTest.php @@ -5,7 +5,7 @@ declare(strict_types=1); namespace Tests\Unit\Presentation\Api\V1\Presenters\Employees; use Application\Arcadia\Usecase\Employees\Find\Output; -use Domain\Models\ValueObjects\Employees\ArcadiaEmployeeId; +use Domain\Models\ValueObjects\Employees\SiRhMatricule; use Presentation\Api\V1\Presenters\Employees\EmployeeShowPresenter; use Presentation\Api\V1\Presenters\Employees\EmployeeShowView; @@ -17,7 +17,7 @@ covers( describe('EmployeeShowPresenter Unit Tests', function (): void { it('transforms Output into EmployeeShowView', function (): void { // GIVEN - $id = new ArcadiaEmployeeId('1234567'); + $id = new SiRhMatricule('1234567'); $startDate = new \DateTimeImmutable('2024-01-01'); $endDate = new \DateTimeImmutable('2024-12-31'); $plannedEndDate = new \DateTimeImmutable('2025-06-30'); diff --git a/tests/Unit/Presentation/Api/V1/Presenters/Employees/EmployeesIndexPresenterTest.php b/tests/Unit/Presentation/Api/V1/Presenters/Employees/EmployeesIndexPresenterTest.php index 0a7a05b..034182d 100644 --- a/tests/Unit/Presentation/Api/V1/Presenters/Employees/EmployeesIndexPresenterTest.php +++ b/tests/Unit/Presentation/Api/V1/Presenters/Employees/EmployeesIndexPresenterTest.php @@ -6,7 +6,7 @@ namespace Tests\Unit\Presentation\Api\V1\Presenters\Employees; use Application\Arcadia\Usecase\Employees\FindAll\Output; use Application\Arcadia\Usecase\Employees\FindAll\PaginatedEmployee; -use Domain\Models\ValueObjects\Employees\ArcadiaEmployeeId; +use Domain\Models\ValueObjects\Employees\SiRhMatricule; use Presentation\Api\V1\Presenters\Employees\EmployeesIndexPresenter; use Presentation\Api\V1\Presenters\Employees\EmployeesIndexView; @@ -19,7 +19,7 @@ describe('EmployeesIndexPresenter Unit Tests', function (): void { it('transforms Output into EmployeesIndexView', function (): void { // GIVEN $employee = new PaginatedEmployee( - id: new ArcadiaEmployeeId('1234567'), + id: new SiRhMatricule('1234567'), firstName: 'Jean', lastName: 'DUPONT', establishment: '01',