4 * This file is part of the Symfony package.
6 * (c) Fabien Potencier <fabien@symfony.com>
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
12 namespace Symfony\Component\HttpKernel\Tests\EventListener;
14 use PHPUnit\Framework\TestCase;
15 use Symfony\Component\DependencyInjection\Container;
16 use Symfony\Component\HttpFoundation\Request;
17 use Symfony\Component\HttpFoundation\Response;
18 use Symfony\Component\HttpFoundation\Session\Session;
19 use Symfony\Component\HttpKernel\Event\GetResponseEvent;
20 use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
21 use Symfony\Component\HttpKernel\EventListener\AbstractSessionListener;
22 use Symfony\Component\HttpKernel\EventListener\SessionListener;
23 use Symfony\Component\HttpKernel\HttpKernelInterface;
25 class SessionListenerTest extends TestCase
27 public function testOnlyTriggeredOnMasterRequest()
29 $listener = $this->getMockForAbstractClass(AbstractSessionListener::class);
30 $event = $this->getMockBuilder(GetResponseEvent::class)->disableOriginalConstructor()->getMock();
31 $event->expects($this->once())->method('isMasterRequest')->willReturn(false);
32 $event->expects($this->never())->method('getRequest');
35 $listener->onKernelRequest($event);
38 public function testSessionIsSet()
40 $session = $this->getMockBuilder(Session::class)->disableOriginalConstructor()->getMock();
42 $container = new Container();
43 $container->set('session', $session);
45 $request = new Request();
46 $listener = new SessionListener($container);
48 $event = $this->getMockBuilder(GetResponseEvent::class)->disableOriginalConstructor()->getMock();
49 $event->expects($this->once())->method('isMasterRequest')->willReturn(true);
50 $event->expects($this->once())->method('getRequest')->willReturn($request);
52 $listener->onKernelRequest($event);
54 $this->assertTrue($request->hasSession());
55 $this->assertSame($session, $request->getSession());
58 public function testResponseIsPrivate()
60 $session = $this->getMockBuilder(Session::class)->disableOriginalConstructor()->getMock();
61 $session->expects($this->once())->method('isStarted')->willReturn(false);
62 $session->expects($this->once())->method('hasBeenStarted')->willReturn(true);
64 $container = new Container();
65 $container->set('session', $session);
67 $listener = new SessionListener($container);
68 $kernel = $this->getMockBuilder(HttpKernelInterface::class)->disableOriginalConstructor()->getMock();
70 $request = new Request();
71 $response = new Response();
72 $listener->onKernelRequest(new GetResponseEvent($kernel, $request, HttpKernelInterface::MASTER_REQUEST));
73 $listener->onKernelResponse(new FilterResponseEvent($kernel, $request, HttpKernelInterface::MASTER_REQUEST, $response));
75 $this->assertTrue($response->headers->hasCacheControlDirective('private'));
76 $this->assertTrue($response->headers->hasCacheControlDirective('must-revalidate'));
77 $this->assertSame('0', $response->headers->getCacheControlDirective('max-age'));