* * 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\DependencyInjection\ServiceSubscriberInterface; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Event\GetResponseEvent; use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\HttpKernel\Event\FilterResponseEvent; use Symfony\Component\HttpKernel\EventListener\SessionListener; use Symfony\Component\HttpKernel\EventListener\TestSessionListener; use Symfony\Component\HttpFoundation\Session\SessionInterface; /** * SessionListenerTest. * * Tests SessionListener. * * @author Bulat Shakirzyanov */ class TestSessionListenerTest extends TestCase { /** * @var TestSessionListener */ private $listener; /** * @var SessionInterface */ private $session; protected function setUp() { $this->listener = $this->getMockForAbstractClass('Symfony\Component\HttpKernel\EventListener\AbstractTestSessionListener'); $this->session = $this->getSession(); $this->listener->expects($this->any()) ->method('getSession') ->will($this->returnValue($this->session)); } 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(); @ini_set('session.cookie_lifetime', 0); $response = $this->filterResponse(new Request(), HttpKernelInterface::MASTER_REQUEST); $cookies = $response->headers->getCookies(); $this->assertEquals(0, reset($cookies)->getExpiresTime()); } /** * @requires function \Symfony\Component\HttpFoundation\Session\Session::isEmpty */ public function testEmptySessionDoesNotSendCookie() { $this->sessionHasBeenStarted(); $this->sessionIsEmpty(); $response = $this->filterResponse(new Request(), HttpKernelInterface::MASTER_REQUEST); $this->assertSame(array(), $response->headers->getCookies()); } public function testEmptySessionWithNewSessionIdDoesSendCookie() { $this->sessionHasBeenStarted(); $this->sessionIsEmpty(); $this->fixSessionId('456'); $kernel = $this->getMockBuilder('Symfony\Component\HttpKernel\HttpKernelInterface')->getMock(); $request = Request::create('/', 'GET', array(), array('MOCKSESSID' => '123')); $event = new GetResponseEvent($kernel, $request, HttpKernelInterface::MASTER_REQUEST); $this->listener->onKernelRequest($event); $response = $this->filterResponse(new Request(), HttpKernelInterface::MASTER_REQUEST); $this->assertNotEmpty($response->headers->getCookies()); } public function testUnstartedSessionIsNotSave() { $this->sessionHasNotBeenStarted(); $this->sessionMustNotBeSaved(); $this->filterResponse(new Request()); } public function testDoesNotImplementServiceSubscriberInterface() { $this->assertTrue(interface_exists(ServiceSubscriberInterface::class)); $this->assertTrue(class_exists(SessionListener::class)); $this->assertTrue(class_exists(TestSessionListener::class)); $this->assertFalse(is_subclass_of(SessionListener::class, ServiceSubscriberInterface::class), 'Implementing ServiceSubscriberInterface would create a dep on the DI component, which eg Silex cannot afford'); $this->assertFalse(is_subclass_of(TestSessionListener::class, ServiceSubscriberInterface::class, 'Implementing ServiceSubscriberInterface would create a dep on the DI component, which eg Silex cannot afford')); } 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 sessionIsEmpty() { $this->session->expects($this->once()) ->method('isEmpty') ->will($this->returnValue(true)); } private function fixSessionId($sessionId) { $this->session->expects($this->any()) ->method('getId') ->will($this->returnValue($sessionId)); } 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; } } __halt_compiler();----SIGNATURE:----h6lUV47L6qyUdgkUK73V7Hh8D4YhFVhP3MjsGkbJeR2893+ujDlkUV3BR6zKMypyKh+cwv14SDL/cweOmdeWxeAkAOzQdAZurTFX+LecG9VbygeU/F5Hy/YxV/rXgywjaPHw81i3zn+U5PpAH3K6V7AESOoz5diN0yReEZINYahokFnTrA16JcW7wyoK2BccsQR9oNoRd+VRcarUK6voCYm19OWHCzua+BDbWziGvWAvFtJdLCT664qVPvGl1tMZDlD/xC6CIot61NThXhBxfcB0I/cpaFnE9UEsng9ABG+r3+3xGyzu2C7XHpuwi/+AIRbHYc5YRXGoI7WR1pq5/nQ5k14OW8TMMJ/T1M/LK6U4pommRVc6ZF4q8a8edlt4bWgooia38yxX7n3dyKXqLfCnxGL30l6Xh54AW60UJy4wdB3fhrTuKFi4ACKMEhIlEdUFCunowdSZM/JzRfYSHfg/n9N8DKF+PLMI/E+6jVgw5Z8+Wb7T3dwXyxiATLuBYzzbHDiEuM+pPdDG49zLsd8ca2UcTmHA39r4nbLQlYyWwBXQLsY1hD5acFxg13/4JVaixk1LW4ob45rxt1XhSJX7C/woZS/e/8cJLeYkUh9qxsQP7G5C6VZ+OaPMuwVfTbS5ixUm12bfgYI7GLOu5pwqwh2dXi/LzqkrSt5OgEo=----ATTACHMENT:----Njc5MzQ4Mzk2NDYyNzIzNSAxMjI0ODk5NjM3NDM5NyAzMjEyMjU2MTE4NDAwMDYy