1b95d19f9c2527a1daaa9bba6a90620690c871ee
[yaffs-website] / vendor / symfony / http-kernel / Tests / EventListener / SessionListenerTest.php
1 <?php
2
3 /*
4  * This file is part of the Symfony package.
5  *
6  * (c) Fabien Potencier <fabien@symfony.com>
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11
12 namespace Symfony\Component\HttpKernel\Tests\EventListener;
13
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\FilterResponseEvent;
20 use Symfony\Component\HttpKernel\Event\FinishRequestEvent;
21 use Symfony\Component\HttpKernel\Event\GetResponseEvent;
22 use Symfony\Component\HttpKernel\EventListener\AbstractSessionListener;
23 use Symfony\Component\HttpKernel\EventListener\SessionListener;
24 use Symfony\Component\HttpKernel\HttpKernelInterface;
25
26 class SessionListenerTest extends TestCase
27 {
28     public function testOnlyTriggeredOnMasterRequest()
29     {
30         $listener = $this->getMockForAbstractClass(AbstractSessionListener::class);
31         $event = $this->getMockBuilder(GetResponseEvent::class)->disableOriginalConstructor()->getMock();
32         $event->expects($this->once())->method('isMasterRequest')->willReturn(false);
33         $event->expects($this->never())->method('getRequest');
34
35         // sub request
36         $listener->onKernelRequest($event);
37     }
38
39     public function testSessionIsSet()
40     {
41         $session = $this->getMockBuilder(Session::class)->disableOriginalConstructor()->getMock();
42
43         $container = new Container();
44         $container->set('session', $session);
45
46         $request = new Request();
47         $listener = new SessionListener($container);
48
49         $event = $this->getMockBuilder(GetResponseEvent::class)->disableOriginalConstructor()->getMock();
50         $event->expects($this->once())->method('isMasterRequest')->willReturn(true);
51         $event->expects($this->once())->method('getRequest')->willReturn($request);
52
53         $listener->onKernelRequest($event);
54
55         $this->assertTrue($request->hasSession());
56         $this->assertSame($session, $request->getSession());
57     }
58
59     public function testResponseIsPrivate()
60     {
61         $session = $this->getMockBuilder(Session::class)->disableOriginalConstructor()->getMock();
62         $session->expects($this->exactly(2))->method('getUsageIndex')->will($this->onConsecutiveCalls(0, 1));
63
64         $container = new Container();
65         $container->set('session', $session);
66
67         $listener = new SessionListener($container);
68         $kernel = $this->getMockBuilder(HttpKernelInterface::class)->disableOriginalConstructor()->getMock();
69
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));
74
75         $this->assertTrue($response->headers->hasCacheControlDirective('private'));
76         $this->assertTrue($response->headers->hasCacheControlDirective('must-revalidate'));
77         $this->assertSame('0', $response->headers->getCacheControlDirective('max-age'));
78     }
79
80     public function testSurrogateMasterRequestIsPublic()
81     {
82         $session = $this->getMockBuilder(Session::class)->disableOriginalConstructor()->getMock();
83         $session->expects($this->exactly(4))->method('getUsageIndex')->will($this->onConsecutiveCalls(0, 1, 1, 1));
84
85         $container = new Container();
86         $container->set('session', $session);
87
88         $listener = new SessionListener($container);
89         $kernel = $this->getMockBuilder(HttpKernelInterface::class)->disableOriginalConstructor()->getMock();
90
91         $request = new Request();
92         $response = new Response();
93         $response->setCache(array('public' => true, 'max_age' => '30'));
94         $listener->onKernelRequest(new GetResponseEvent($kernel, $request, HttpKernelInterface::MASTER_REQUEST));
95         $this->assertTrue($request->hasSession());
96
97         $subRequest = clone $request;
98         $this->assertSame($request->getSession(), $subRequest->getSession());
99         $listener->onKernelRequest(new GetResponseEvent($kernel, $subRequest, HttpKernelInterface::MASTER_REQUEST));
100         $listener->onKernelResponse(new FilterResponseEvent($kernel, $subRequest, HttpKernelInterface::MASTER_REQUEST, $response));
101         $listener->onFinishRequest(new FinishRequestEvent($kernel, $subRequest, HttpKernelInterface::MASTER_REQUEST));
102
103         $this->assertFalse($response->headers->hasCacheControlDirective('private'));
104         $this->assertFalse($response->headers->hasCacheControlDirective('must-revalidate'));
105         $this->assertSame('30', $response->headers->getCacheControlDirective('max-age'));
106
107         $listener->onKernelResponse(new FilterResponseEvent($kernel, $request, HttpKernelInterface::MASTER_REQUEST, $response));
108
109         $this->assertTrue($response->headers->hasCacheControlDirective('private'));
110         $this->assertTrue($response->headers->hasCacheControlDirective('must-revalidate'));
111         $this->assertSame('0', $response->headers->getCacheControlDirective('max-age'));
112     }
113 }