|
18 | 18 | use Symfony\Component\HttpKernel\Event\RequestEvent;
|
19 | 19 | use Symfony\Component\HttpKernel\HttpKernelInterface;
|
20 | 20 | use Symfony\Component\Security\Http\Firewall;
|
| 21 | +use Symfony\Component\Security\Http\Firewall\AbstractListener; |
21 | 22 | use Symfony\Component\Security\Http\Firewall\ExceptionListener;
|
| 23 | +use Symfony\Component\Security\Http\Firewall\FirewallListenerInterface; |
22 | 24 | use Symfony\Component\Security\Http\FirewallMapInterface;
|
23 | 25 |
|
24 | 26 | class FirewallTest extends TestCase
|
@@ -97,4 +99,59 @@ public function testOnKernelRequestWithSubRequest()
|
97 | 99 |
|
98 | 100 | $this->assertFalse($event->hasResponse());
|
99 | 101 | }
|
| 102 | + |
| 103 | + public function testListenersAreCalled() |
| 104 | + { |
| 105 | + $calledListeners = []; |
| 106 | + |
| 107 | + $callableListener = static function() use(&$calledListeners) { $calledListeners[] = 'callableListener'; }; |
| 108 | + $firewallListener = new class($calledListeners) implements FirewallListenerInterface { |
| 109 | + public function __construct(private array &$calledListeners) {} |
| 110 | + |
| 111 | + public function supports(Request $request): ?bool |
| 112 | + { |
| 113 | + return true; |
| 114 | + } |
| 115 | + |
| 116 | + public function authenticate(RequestEvent $event): void |
| 117 | + { |
| 118 | + $this->calledListeners[] = 'firewallListener'; |
| 119 | + } |
| 120 | + |
| 121 | + public static function getPriority(): int |
| 122 | + { |
| 123 | + return 0; |
| 124 | + } |
| 125 | + }; |
| 126 | + $callableFirewallListener = new class($calledListeners) extends AbstractListener { |
| 127 | + public function __construct(private array &$calledListeners) {} |
| 128 | + |
| 129 | + public function supports(Request $request): ?bool |
| 130 | + { |
| 131 | + return true; |
| 132 | + } |
| 133 | + |
| 134 | + public function authenticate(RequestEvent $event): void |
| 135 | + { |
| 136 | + $this->calledListeners[] = 'callableFirewallListener'; |
| 137 | + } |
| 138 | + }; |
| 139 | + |
| 140 | + $request = $this->createMock(Request::class); |
| 141 | + |
| 142 | + $map = $this->createMock(FirewallMapInterface::class); |
| 143 | + $map |
| 144 | + ->expects($this->once()) |
| 145 | + ->method('getListeners') |
| 146 | + ->with($this->equalTo($request)) |
| 147 | + ->willReturn([[$callableListener, $firewallListener, $callableFirewallListener], null, null]) |
| 148 | + ; |
| 149 | + |
| 150 | + $event = new RequestEvent($this->createMock(HttpKernelInterface::class), $request, HttpKernelInterface::MAIN_REQUEST); |
| 151 | + |
| 152 | + $firewall = new Firewall($map, $this->createMock(EventDispatcherInterface::class)); |
| 153 | + $firewall->onKernelRequest($event); |
| 154 | + |
| 155 | + $this->assertSame(['callableListener', 'firewallListener', 'callableFirewallListener'], $calledListeners); |
| 156 | + } |
100 | 157 | }
|
0 commit comments