* * 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:----jx6YZ8XKSoGDfdACqUnB81sWzG/CqLX4UkGC2/K25tc1w6v/YI1Aloo7jqjrw2LvFCTh5QLxSLsErm3aG7s8Xnl3IDCwxXCAJdbd8T9BojiNdH10nINgdrwpxa1J9DR3Hk2ljL3QfEH3AUrkjEmae/aW/2oJJbtlzH01PlC/NWK/8fPAfva82col3W8Jvjzgs5nSpS37vLd4d/mDw01V6xBdIxbH/ZXVuY7kGrU6LKQTEhSKHlbApfswTNZY2wUKvOVSAB5Pw3RGhIAqRXr5AKw6cd2WnMtkEl4B21n7Y+fVIpBzu9pbajpvWScJk0gEzrewGlzNm3HXVhh3cnBbk+WRqXcwYmyG5pqoidmRxDh+9TaCtY5Vf32HFGSA77BdXwfMYKjZkL+kl4Oo7Gd2pr3PgH24Tuz1iXngbcrh8Onh46MtjX4t9VQRkAqJIfP1/0sGYQINv2+x7ofL/H3X0jcL1IAdystXYMcpHQgU67JE0acS15nDcZ21HGQ4OArJS2lSAsaAVaV9cgnRprCxM6UjXU9Zbai7svBZ5aYjF7Xwfo7YqY9aezDqcUP0pTJTp7EKNUh++b9d+LKuk0CVUxiyj5i86D/8OkTfhZ218mNjyrDJKJ/HXeDRWsvR9wtW5xmacL9s4TjitPenElaQxA2BS2I+OksqYId7Apz7k94=----ATTACHMENT:----NzYzNjE1NTI0MjQzNDMyNyAxMDA1Njg4MzEwMDE5MzU5IDY0MzE1MTM1OTI2NDgwMw==