From efc12c8bdb448204adbb472a2bd6bbb863b21482 Mon Sep 17 00:00:00 2001 From: Matthieu Date: Wed, 15 Apr 2026 11:53:01 +0200 Subject: [PATCH] fix(test) : RBAC #344 - role test cleanup + SystemRoles constant + assertion seuil --- tests/Module/Core/Api/RoleApiTest.php | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/tests/Module/Core/Api/RoleApiTest.php b/tests/Module/Core/Api/RoleApiTest.php index c5683de..a0b0fa4 100644 --- a/tests/Module/Core/Api/RoleApiTest.php +++ b/tests/Module/Core/Api/RoleApiTest.php @@ -8,6 +8,7 @@ use ApiPlatform\Symfony\Bundle\Test\ApiTestCase; use ApiPlatform\Symfony\Bundle\Test\Client; use App\Module\Core\Domain\Entity\Permission; use App\Module\Core\Domain\Entity\Role; +use App\Module\Core\Domain\Security\SystemRoles; use Doctrine\ORM\EntityManagerInterface; /** @@ -104,7 +105,7 @@ final class RoleApiTest extends ApiTestCase 'headers' => ['Content-Type' => 'application/ld+json'], 'json' => [ // `admin` est un role systeme charge par les fixtures. - 'code' => 'admin', + 'code' => SystemRoles::ADMIN_CODE, 'label' => 'Tentative de doublon', ], ]); @@ -157,7 +158,7 @@ final class RoleApiTest extends ApiTestCase $data = $response->toArray(); self::assertArrayHasKey('member', $data); // Au moins admin systeme + user systeme + test_editor + test_viewer. - self::assertGreaterThanOrEqual(2, $data['totalItems']); + self::assertGreaterThanOrEqual(4, $data['totalItems']); $codes = array_column($data['member'], 'code'); self::assertContains('test_editor', $codes); } @@ -283,10 +284,12 @@ final class RoleApiTest extends ApiTestCase { $em = $this->getEm(); - // Ordre important : role_permission lie aux deux, on vide les roles - // custom d'abord (la jointure est cascade supprimee par Doctrine lors - // du remove() du cote proprietaire). En DQL bulk on passe par les - // entites, Doctrine genere les DELETE de la table de jointure. + // Le cascade FK de la migration #343 (ON DELETE CASCADE sur + // role_permission.role_id et permission_id) nettoie automatiquement + // role_permission lors du DELETE SQL emis par Doctrine, meme via DQL + // bulk delete : le cascade est applique au niveau FK par PostgreSQL, + // pas par l'Unit of Work Doctrine. Verifie par comptage avant/apres + // runs successifs de la suite (stable a la ligne de base systeme). $em->createQuery( 'DELETE FROM '.Role::class.' r WHERE r.code LIKE :prefix' )->setParameter('prefix', self::TEST_ROLE_PREFIX.'%')->execute();