Files
Coltura/tests/Module/Core/Domain/Entity/RoleTest.php
Matthieu 0fc0b57e37 refactor(core) : RBAC Task 1 - polish apres revue qualite
- Permission : guards constructeur (code/label/module non vides, code avec point)
- Permission::revive() reutilise updateMetadata() pour eviter la duplication
- Suppression de SystemRolesTest (tautologique, ne capture aucun comportement)
- Role::permissions : commentaire explicite sur la raison du fetch EAGER
- Alignement des types de retour sur static (style User.php)
- Nouveau test Role::addPermission avec permissions distinctes

Ticket #343 - Task 1 polish (revue qualite).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 16:37:53 +02:00

92 lines
2.7 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Tests\Module\Core\Domain\Entity;
use App\Module\Core\Domain\Entity\Permission;
use App\Module\Core\Domain\Entity\Role;
use App\Module\Core\Domain\Exception\SystemRoleDeletionException;
use PHPUnit\Framework\TestCase;
/**
* @internal
*/
final class RoleTest extends TestCase
{
public function testConstructorInitialState(): void
{
$role = new Role('custom', 'Custom');
self::assertNull($role->getId());
self::assertSame('custom', $role->getCode());
self::assertSame('Custom', $role->getLabel());
self::assertNull($role->getDescription());
self::assertFalse($role->isSystem());
self::assertTrue($role->getPermissions()->isEmpty());
}
public function testAddPermissionAddsOnce(): void
{
$role = new Role('custom', 'Custom');
$permission = new Permission('core.users.view', 'Voir', 'core');
$role->addPermission($permission);
$role->addPermission($permission);
self::assertSame(1, $role->getPermissions()->count());
}
public function testAddPermissionAddsMultipleDistinct(): void
{
$role = new Role('custom', 'Custom');
$permissionView = new Permission('core.users.view', 'Voir', 'core');
$permissionEdit = new Permission('core.users.edit', 'Editer', 'core');
$role->addPermission($permissionView);
$role->addPermission($permissionEdit);
self::assertSame(2, $role->getPermissions()->count());
}
public function testRemovePermissionRemovesWhenPresent(): void
{
$role = new Role('custom', 'Custom');
$permission = new Permission('core.users.view', 'Voir', 'core');
$role->addPermission($permission);
$role->removePermission($permission);
self::assertSame(0, $role->getPermissions()->count());
}
public function testRemovePermissionIsNoOpWhenAbsent(): void
{
$role = new Role('custom', 'Custom');
$permission = new Permission('core.users.view', 'Voir', 'core');
$role->removePermission($permission);
self::assertSame(0, $role->getPermissions()->count());
}
public function testEnsureDeletableAllowsNonSystemRole(): void
{
$role = new Role('custom', 'Custom', false);
$role->ensureDeletable();
$this->expectNotToPerformAssertions();
}
public function testEnsureDeletableThrowsForSystemRole(): void
{
$role = new Role('admin', 'Admin', true);
$this->expectException(SystemRoleDeletionException::class);
$this->expectExceptionMessage('admin');
$role->ensureDeletable();
}
}