From 41dbb049630f8bdc94de5f024298889c9401ec6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Munsch?= Date: Thu, 13 Aug 2026 12:02:43 +0200 Subject: [PATCH] test(Architecture): ensure all Unit and Integration tests declare covers() Added a test to verify that every Unit and Integration test file contains a covers() declaration. --- TEST.md | 10 ++++++++-- tests/Architecture/CodingStandardsTest.php | 17 +++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/TEST.md b/TEST.md index 38a8471..6c2c238 100644 --- a/TEST.md +++ b/TEST.md @@ -69,10 +69,16 @@ Chaque test rédigé dans ce projet doit obligatoirement respecter les principes - **Self-validating** (Auto-validant) : Le test passe ou échoue de façon binaire (`OK` / `FAIL`), sans nécessiter d'analyse manuelle des logs. - **Timely** (Opportun) : Les tests sont écrits au bon moment (en TDD ou simultanément avec le code de production). -### Pattern GWT (Given - When - Then) -Tous les tests doivent utiliser des blocs de commentaires explicites `// GIVEN`, `// WHEN`, `// THEN` et déclarer un namespace sous `Tests\...` : +### Declaration covers() et Pattern GWT +Tous les tests unitaires (`tests/Unit`) et d'intégration (`tests/Integration`) doivent obligatoirement déclarer la classe ciblée via `covers(NomDeLaClasse::class);`, utiliser des blocs de commentaires explicites `// GIVEN`, `// WHEN`, `// THEN` et appartenir à un namespace `Tests\...` (vérifié par test d'architecture) : ```php +namespace Tests\Unit\Domain\Models\ValueObjects; + +use Domain\Models\ValueObjects\Entities\ArcadiaEmployeeId; + +covers(ArcadiaEmployeeId::class); + it('validates an employee id', function (): void { // GIVEN $id = '12345678'; diff --git a/tests/Architecture/CodingStandardsTest.php b/tests/Architecture/CodingStandardsTest.php index 0d51833..9e4cd4f 100644 --- a/tests/Architecture/CodingStandardsTest.php +++ b/tests/Architecture/CodingStandardsTest.php @@ -81,4 +81,21 @@ describe('Coding Standards & Project Rules', function (): void { ); } }); + + it('ensures every Unit and Integration test file contains a covers() call', function (): void { + /** @var array $testFiles */ + $testFiles = glob(base_path('{tests/Unit,tests/Integration}/{*,*/*,*/*/*,*/*/*/*}.php'), GLOB_BRACE); + + foreach ($testFiles as $file) { + if (preg_match('/Test\.php$/', basename($file)) !== 1) { + continue; + } + + $content = (string) file_get_contents($file); + expect($content)->toMatch( + '/^\s*covers\s*\(/m', + "Test file [{$file}] is missing a covers(...) declaration." + ); + } + }); });