fix(test) : RBAC #344 - role test cleanup + SystemRoles constant + assertion seuil

This commit is contained in:
Matthieu
2026-04-15 11:53:01 +02:00
parent 7be0260b29
commit efc12c8bdb

View File

@@ -8,6 +8,7 @@ use ApiPlatform\Symfony\Bundle\Test\ApiTestCase;
use ApiPlatform\Symfony\Bundle\Test\Client; use ApiPlatform\Symfony\Bundle\Test\Client;
use App\Module\Core\Domain\Entity\Permission; use App\Module\Core\Domain\Entity\Permission;
use App\Module\Core\Domain\Entity\Role; use App\Module\Core\Domain\Entity\Role;
use App\Module\Core\Domain\Security\SystemRoles;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
/** /**
@@ -104,7 +105,7 @@ final class RoleApiTest extends ApiTestCase
'headers' => ['Content-Type' => 'application/ld+json'], 'headers' => ['Content-Type' => 'application/ld+json'],
'json' => [ 'json' => [
// `admin` est un role systeme charge par les fixtures. // `admin` est un role systeme charge par les fixtures.
'code' => 'admin', 'code' => SystemRoles::ADMIN_CODE,
'label' => 'Tentative de doublon', 'label' => 'Tentative de doublon',
], ],
]); ]);
@@ -157,7 +158,7 @@ final class RoleApiTest extends ApiTestCase
$data = $response->toArray(); $data = $response->toArray();
self::assertArrayHasKey('member', $data); self::assertArrayHasKey('member', $data);
// Au moins admin systeme + user systeme + test_editor + test_viewer. // 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'); $codes = array_column($data['member'], 'code');
self::assertContains('test_editor', $codes); self::assertContains('test_editor', $codes);
} }
@@ -283,10 +284,12 @@ final class RoleApiTest extends ApiTestCase
{ {
$em = $this->getEm(); $em = $this->getEm();
// Ordre important : role_permission lie aux deux, on vide les roles // Le cascade FK de la migration #343 (ON DELETE CASCADE sur
// custom d'abord (la jointure est cascade supprimee par Doctrine lors // role_permission.role_id et permission_id) nettoie automatiquement
// du remove() du cote proprietaire). En DQL bulk on passe par les // role_permission lors du DELETE SQL emis par Doctrine, meme via DQL
// entites, Doctrine genere les DELETE de la table de jointure. // 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( $em->createQuery(
'DELETE FROM '.Role::class.' r WHERE r.code LIKE :prefix' 'DELETE FROM '.Role::class.' r WHERE r.code LIKE :prefix'
)->setParameter('prefix', self::TEST_ROLE_PREFIX.'%')->execute(); )->setParameter('prefix', self::TEST_ROLE_PREFIX.'%')->execute();