. */ namespace App\Tests\Services\UserSystem; use App\Entity\UserSystem\User; use App\Services\UserSystem\PermissionManager; use App\Services\UserSystem\PermissionPresetsHelper; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; final class PermissionPresetsHelperTest extends WebTestCase { private static PermissionPresetsHelper $service; private static PermissionManager $permissionManager; public static function setUpBeforeClass(): void { self::bootKernel(); self::$service = self::getContainer()->get(PermissionPresetsHelper::class); self::$permissionManager = self::getContainer()->get(PermissionManager::class); } private function createUser(): User { return new User(); } public function testAllInheritPresetLeavesAllPermissionsInherit(): void { $user = $this->createUser(); self::$service->applyPreset($user, PermissionPresetsHelper::PRESET_ALL_INHERIT); // After all-inherit preset, 'parts' read should be null (inherit) $this->assertNull(self::$permissionManager->dontInherit($user, 'parts', 'read')); } public function testAllForbidPresetSetsAllPermissionsToFalse(): void { $user = $this->createUser(); self::$service->applyPreset($user, PermissionPresetsHelper::PRESET_ALL_FORBID); // After all-forbid, 'parts' read should be false (disallowed) $this->assertFalse(self::$permissionManager->dontInherit($user, 'parts', 'read')); } public function testAllAllowPresetSetsAllPermissionsToTrue(): void { $user = $this->createUser(); self::$service->applyPreset($user, PermissionPresetsHelper::PRESET_ALL_ALLOW); // After all-allow, 'parts' read should be true (allowed) $this->assertTrue(self::$permissionManager->dontInherit($user, 'parts', 'read')); } public function testReadOnlyPresetAllowsPartsRead(): void { $user = $this->createUser(); self::$service->applyPreset($user, PermissionPresetsHelper::PRESET_READ_ONLY); $this->assertTrue(self::$permissionManager->dontInherit($user, 'parts', 'read')); } public function testReadOnlyPresetDoesNotAllowPartsCreate(): void { $user = $this->createUser(); self::$service->applyPreset($user, PermissionPresetsHelper::PRESET_READ_ONLY); // create should remain null (inherit) or false — not explicitly allowed $createValue = self::$permissionManager->dontInherit($user, 'parts', 'create'); $this->assertNotTrue($createValue); } public function testUnknownPresetThrowsException(): void { $this->expectException(\InvalidArgumentException::class); self::$service->applyPreset($this->createUser(), 'non_existent_preset'); } public function testApplyPresetReturnsTheSameUser(): void { $user = $this->createUser(); $returned = self::$service->applyPreset($user, PermissionPresetsHelper::PRESET_ALL_INHERIT); $this->assertSame($user, $returned); } }