Version 1
[yaffs-website] / vendor / symfony / http-kernel / Tests / EventListener / TestSessionListenerTest.php
diff --git a/vendor/symfony/http-kernel/Tests/EventListener/TestSessionListenerTest.php b/vendor/symfony/http-kernel/Tests/EventListener/TestSessionListenerTest.php
new file mode 100644 (file)
index 0000000..52794e0
--- /dev/null
@@ -0,0 +1,133 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\HttpKernel\Tests\EventListener;
+
+use PHPUnit\Framework\TestCase;
+use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpKernel\HttpKernelInterface;
+use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
+use Symfony\Component\HttpFoundation\Session\SessionInterface;
+
+/**
+ * SessionListenerTest.
+ *
+ * Tests SessionListener.
+ *
+ * @author Bulat Shakirzyanov <mallluhuct@gmail.com>
+ */
+class TestSessionListenerTest extends TestCase
+{
+    /**
+     * @var TestSessionListener
+     */
+    private $listener;
+
+    /**
+     * @var SessionInterface
+     */
+    private $session;
+
+    protected function setUp()
+    {
+        $this->listener = $this->getMockForAbstractClass('Symfony\Component\HttpKernel\EventListener\TestSessionListener');
+        $this->session = $this->getSession();
+    }
+
+    public function testShouldSaveMasterRequestSession()
+    {
+        $this->sessionHasBeenStarted();
+        $this->sessionMustBeSaved();
+
+        $this->filterResponse(new Request());
+    }
+
+    public function testShouldNotSaveSubRequestSession()
+    {
+        $this->sessionMustNotBeSaved();
+
+        $this->filterResponse(new Request(), HttpKernelInterface::SUB_REQUEST);
+    }
+
+    public function testDoesNotDeleteCookieIfUsingSessionLifetime()
+    {
+        $this->sessionHasBeenStarted();
+
+        $params = session_get_cookie_params();
+        session_set_cookie_params(0, $params['path'], $params['domain'], $params['secure'], $params['httponly']);
+
+        $response = $this->filterResponse(new Request(), HttpKernelInterface::MASTER_REQUEST);
+        $cookies = $response->headers->getCookies();
+
+        $this->assertEquals(0, reset($cookies)->getExpiresTime());
+    }
+
+    public function testUnstartedSessionIsNotSave()
+    {
+        $this->sessionHasNotBeenStarted();
+        $this->sessionMustNotBeSaved();
+
+        $this->filterResponse(new Request());
+    }
+
+    private function filterResponse(Request $request, $type = HttpKernelInterface::MASTER_REQUEST)
+    {
+        $request->setSession($this->session);
+        $response = new Response();
+        $kernel = $this->getMockBuilder('Symfony\Component\HttpKernel\HttpKernelInterface')->getMock();
+        $event = new FilterResponseEvent($kernel, $request, $type, $response);
+
+        $this->listener->onKernelResponse($event);
+
+        $this->assertSame($response, $event->getResponse());
+
+        return $response;
+    }
+
+    private function sessionMustNotBeSaved()
+    {
+        $this->session->expects($this->never())
+            ->method('save');
+    }
+
+    private function sessionMustBeSaved()
+    {
+        $this->session->expects($this->once())
+            ->method('save');
+    }
+
+    private function sessionHasBeenStarted()
+    {
+        $this->session->expects($this->once())
+            ->method('isStarted')
+            ->will($this->returnValue(true));
+    }
+
+    private function sessionHasNotBeenStarted()
+    {
+        $this->session->expects($this->once())
+            ->method('isStarted')
+            ->will($this->returnValue(false));
+    }
+
+    private function getSession()
+    {
+        $mock = $this->getMockBuilder('Symfony\Component\HttpFoundation\Session\Session')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        // set return value for getName()
+        $mock->expects($this->any())->method('getName')->will($this->returnValue('MOCKSESSID'));
+
+        return $mock;
+    }
+}