|
11 | 11 |
|
12 | 12 | namespace Symfony\Component\Security\Core\Tests\Authorization;
|
13 | 13 |
|
| 14 | +use PHPUnit\Framework\MockObject\MockObject; |
14 | 15 | use PHPUnit\Framework\TestCase;
|
15 | 16 | use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
|
16 | 17 | use Symfony\Component\Security\Core\Authorization\AccessDecisionManager;
|
17 | 18 | use Symfony\Component\Security\Core\Authorization\AccessDecisionManagerInterface;
|
18 | 19 | use Symfony\Component\Security\Core\Authorization\TraceableAccessDecisionManager;
|
19 | 20 | use Symfony\Component\Security\Core\Authorization\Voter\VoterInterface;
|
| 21 | +use Symfony\Component\Security\Core\Exception\InvalidArgumentException; |
20 | 22 | use Symfony\Component\Security\Core\Tests\Fixtures\DummyVoter;
|
21 | 23 |
|
22 | 24 | class TraceableAccessDecisionManagerTest extends TestCase
|
@@ -276,4 +278,48 @@ public function testCustomAccessDecisionManagerReturnsEmptyStrategy()
|
276 | 278 |
|
277 | 279 | $this->assertEquals('-', $adm->getStrategy());
|
278 | 280 | }
|
| 281 | + |
| 282 | + public function testThrowsExceptionWhenMultipleAttributesNotAllowed() |
| 283 | + { |
| 284 | + $accessDecisionManager = new AccessDecisionManager(); |
| 285 | + $traceableAccessDecisionManager = new TraceableAccessDecisionManager($accessDecisionManager); |
| 286 | + /** @var TokenInterface&MockObject $tokenMock */ |
| 287 | + $tokenMock = $this->createMock(TokenInterface::class); |
| 288 | + |
| 289 | + $this->expectException(InvalidArgumentException::class); |
| 290 | + $traceableAccessDecisionManager->decide($tokenMock, ['attr1', 'attr2']); |
| 291 | + } |
| 292 | + |
| 293 | + /** |
| 294 | + * @dataProvider allowMultipleAttributesProvider |
| 295 | + */ |
| 296 | + public function testAllowMultipleAttributes(array $attributes, bool $allowMultipleAttributes) |
| 297 | + { |
| 298 | + $accessDecisionManager = new AccessDecisionManager(); |
| 299 | + $traceableAccessDecisionManager = new TraceableAccessDecisionManager($accessDecisionManager); |
| 300 | + /** @var TokenInterface&MockObject $tokenMock */ |
| 301 | + $tokenMock = $this->createMock(TokenInterface::class); |
| 302 | + |
| 303 | + $isGranted = $traceableAccessDecisionManager->decide($tokenMock, $attributes, null, null, $allowMultipleAttributes); |
| 304 | + |
| 305 | + $this->assertFalse($isGranted); |
| 306 | + } |
| 307 | + |
| 308 | + public function allowMultipleAttributesProvider(): \Generator |
| 309 | + { |
| 310 | + yield [ |
| 311 | + ['attr1'], |
| 312 | + false, |
| 313 | + ]; |
| 314 | + |
| 315 | + yield [ |
| 316 | + ['attr1'], |
| 317 | + true, |
| 318 | + ]; |
| 319 | + |
| 320 | + yield [ |
| 321 | + ['attr1', 'attr2', 'attr3'], |
| 322 | + true, |
| 323 | + ]; |
| 324 | + } |
279 | 325 | }
|
0 commit comments