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.
This commit is contained in:
Jérémy Munsch 2026-08-13 12:02:43 +02:00
parent f8b5722a78
commit 41dbb04963
Signed by: forge-joniko
GPG key ID: D7EFE2F5CB6CC0E4
2 changed files with 25 additions and 2 deletions

10
TEST.md
View file

@ -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';

View file

@ -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<int, string> $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."
);
}
});
});