X-Git-Url: https://yaffs.net/gitweb/?a=blobdiff_plain;f=vendor%2Fsymfony%2Fhttp-kernel%2FTests%2FDataCollector%2FRequestDataCollectorTest.php;h=69bef76d413527a98e1ffe00f8c060c657818cc9;hb=9e65bae52407293a5182f19dc57b5628b09e92f4;hp=20bd1a8364b05bd7fcd34236af3815b170e35f5b;hpb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;p=yaffs-website diff --git a/vendor/symfony/http-kernel/Tests/DataCollector/RequestDataCollectorTest.php b/vendor/symfony/http-kernel/Tests/DataCollector/RequestDataCollectorTest.php index 20bd1a836..69bef76d4 100644 --- a/vendor/symfony/http-kernel/Tests/DataCollector/RequestDataCollectorTest.php +++ b/vendor/symfony/http-kernel/Tests/DataCollector/RequestDataCollectorTest.php @@ -12,6 +12,12 @@ namespace Symfony\Component\HttpKernel\Tests\DataCollector; use PHPUnit\Framework\TestCase; +use Symfony\Component\HttpFoundation\ParameterBag; +use Symfony\Component\HttpFoundation\RedirectResponse; +use Symfony\Component\HttpFoundation\Session\Session; +use Symfony\Component\HttpFoundation\Session\Storage\MockArraySessionStorage; +use Symfony\Component\HttpKernel\Controller\ArgumentResolverInterface; +use Symfony\Component\HttpKernel\Event\FilterResponseEvent; use Symfony\Component\HttpKernel\HttpKernel; use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\HttpKernel\DataCollector\RequestDataCollector; @@ -27,7 +33,8 @@ class RequestDataCollectorTest extends TestCase { $c = new RequestDataCollector(); - $c->collect($this->createRequest(), $this->createResponse()); + $c->collect($request = $this->createRequest(), $this->createResponse()); + $c->lateCollect(); $attributes = $c->getRequestAttributes(); @@ -38,13 +45,14 @@ class RequestDataCollectorTest extends TestCase $this->assertInstanceOf('Symfony\Component\HttpFoundation\ParameterBag', $attributes); $this->assertInstanceOf('Symfony\Component\HttpFoundation\ParameterBag', $c->getRequestRequest()); $this->assertInstanceOf('Symfony\Component\HttpFoundation\ParameterBag', $c->getRequestQuery()); + $this->assertInstanceOf(ParameterBag::class, $c->getResponseCookies()); $this->assertSame('html', $c->getFormat()); - $this->assertSame('foobar', $c->getRoute()); - $this->assertSame(array('name' => 'foo'), $c->getRouteParams()); + $this->assertEquals('foobar', $c->getRoute()); + $this->assertEquals(array('name' => 'foo'), $c->getRouteParams()); $this->assertSame(array(), $c->getSessionAttributes()); $this->assertSame('en', $c->getLocale()); - $this->assertRegExp('/Resource\(stream#\d+\)/', $attributes->get('resource')); - $this->assertSame('Object(stdClass)', $attributes->get('object')); + $this->assertContains(__FILE__, $attributes->get('resource')); + $this->assertSame('stdClass', $attributes->get('object')->getType()); $this->assertInstanceOf('Symfony\Component\HttpFoundation\ParameterBag', $c->getResponseHeaders()); $this->assertSame('OK', $c->getStatusText()); @@ -52,22 +60,46 @@ class RequestDataCollectorTest extends TestCase $this->assertSame('application/json', $c->getContentType()); } + public function testCollectWithoutRouteParams() + { + $request = $this->createRequest(array()); + + $c = new RequestDataCollector(); + $c->collect($request, $this->createResponse()); + $c->lateCollect(); + + $this->assertEquals(array(), $c->getRouteParams()); + } + /** - * Test various types of controller callables. + * @dataProvider provideControllerCallables */ - public function testControllerInspection() + public function testControllerInspection($name, $callable, $expected) + { + $c = new RequestDataCollector(); + $request = $this->createRequest(); + $response = $this->createResponse(); + $this->injectController($c, $callable, $request); + $c->collect($request, $response); + $c->lateCollect(); + + $this->assertSame($expected, $c->getController()->getValue(true), sprintf('Testing: %s', $name)); + } + + public function provideControllerCallables() { // make sure we always match the line number $r1 = new \ReflectionMethod($this, 'testControllerInspection'); $r2 = new \ReflectionMethod($this, 'staticControllerMethod'); $r3 = new \ReflectionClass($this); + // test name, callable, expected - $controllerTests = array( + return array( array( '"Regular" callable', array($this, 'testControllerInspection'), array( - 'class' => 'Symfony\Component\HttpKernel\Tests\DataCollector\RequestDataCollectorTest', + 'class' => __NAMESPACE__.'\RequestDataCollectorTest', 'method' => 'testControllerInspection', 'file' => __FILE__, 'line' => $r1->getStartLine(), @@ -87,8 +119,13 @@ class RequestDataCollectorTest extends TestCase array( 'Static callback as string', - 'Symfony\Component\HttpKernel\Tests\DataCollector\RequestDataCollectorTest::staticControllerMethod', - 'Symfony\Component\HttpKernel\Tests\DataCollector\RequestDataCollectorTest::staticControllerMethod', + __NAMESPACE__.'\RequestDataCollectorTest::staticControllerMethod', + array( + 'class' => 'Symfony\Component\HttpKernel\Tests\DataCollector\RequestDataCollectorTest', + 'method' => 'staticControllerMethod', + 'file' => __FILE__, + 'line' => $r2->getStartLine(), + ), ), array( @@ -146,34 +183,97 @@ class RequestDataCollectorTest extends TestCase ), ), ); + } + + public function testItIgnoresInvalidCallables() + { + $request = $this->createRequestWithSession(); + $response = new RedirectResponse('/'); $c = new RequestDataCollector(); + $c->collect($request, $response); + + $this->assertSame('n/a', $c->getController()); + } + + public function testItAddsRedirectedAttributesWhenRequestContainsSpecificCookie() + { $request = $this->createRequest(); + $request->cookies->add(array( + 'sf_redirect' => '{}', + )); + + $kernel = $this->getMockBuilder(HttpKernelInterface::class)->getMock(); + + $c = new RequestDataCollector(); + $c->onKernelResponse(new FilterResponseEvent($kernel, $request, HttpKernelInterface::MASTER_REQUEST, $this->createResponse())); + + $this->assertTrue($request->attributes->get('_redirected')); + } + + public function testItSetsARedirectCookieIfTheResponseIsARedirection() + { + $c = new RequestDataCollector(); + $response = $this->createResponse(); - foreach ($controllerTests as $controllerTest) { - $this->injectController($c, $controllerTest[1], $request); - $c->collect($request, $response); - $this->assertSame($controllerTest[2], $c->getController(), sprintf('Testing: %s', $controllerTest[0])); - } + $response->setStatusCode(302); + $response->headers->set('Location', '/somewhere-else'); + + $c->collect($request = $this->createRequest(), $response); + $c->lateCollect(); + + $cookie = $this->getCookieByName($response, 'sf_redirect'); + + $this->assertNotEmpty($cookie->getValue()); + } + + public function testItCollectsTheRedirectionAndClearTheCookie() + { + $c = new RequestDataCollector(); + + $request = $this->createRequest(); + $request->attributes->set('_redirected', true); + $request->cookies->add(array( + 'sf_redirect' => '{"method": "POST"}', + )); + + $c->collect($request, $response = $this->createResponse()); + $c->lateCollect(); + + $this->assertEquals('POST', $c->getRedirect()['method']); + + $cookie = $this->getCookieByName($response, 'sf_redirect'); + $this->assertNull($cookie->getValue()); } - protected function createRequest() + protected function createRequest($routeParams = array('name' => 'foo')) { $request = Request::create('http://test.com/foo?bar=baz'); $request->attributes->set('foo', 'bar'); $request->attributes->set('_route', 'foobar'); - $request->attributes->set('_route_params', array('name' => 'foo')); + $request->attributes->set('_route_params', $routeParams); $request->attributes->set('resource', fopen(__FILE__, 'r')); $request->attributes->set('object', new \stdClass()); return $request; } + private function createRequestWithSession() + { + $request = $this->createRequest(); + $request->attributes->set('_controller', 'Foo::bar'); + $request->setSession(new Session(new MockArraySessionStorage())); + $request->getSession()->start(); + + return $request; + } + protected function createResponse() { $response = new Response(); $response->setStatusCode(200); $response->headers->set('Content-Type', 'application/json'); + $response->headers->set('X-Foo-Bar', null); $response->headers->setCookie(new Cookie('foo', 'bar', 1, '/foo', 'localhost', true, true)); $response->headers->setCookie(new Cookie('bar', 'foo', new \DateTime('@946684800'))); $response->headers->setCookie(new Cookie('bazz', 'foo', '2000-12-12')); @@ -187,7 +287,7 @@ class RequestDataCollectorTest extends TestCase protected function injectController($collector, $controller, $request) { $resolver = $this->getMockBuilder('Symfony\\Component\\HttpKernel\\Controller\\ControllerResolverInterface')->getMock(); - $httpKernel = new HttpKernel(new EventDispatcher(), $resolver); + $httpKernel = new HttpKernel(new EventDispatcher(), $resolver, null, $this->getMockBuilder(ArgumentResolverInterface::class)->getMock()); $event = new FilterControllerEvent($httpKernel, $controller, $request, HttpKernelInterface::MASTER_REQUEST); $collector->onKernelController($event); } @@ -220,4 +320,15 @@ class RequestDataCollectorTest extends TestCase { throw new \LogicException('Unexpected method call'); } + + private function getCookieByName(Response $response, $name) + { + foreach ($response->headers->getCookies() as $cookie) { + if ($cookie->getName() == $name) { + return $cookie; + } + } + + throw new \InvalidArgumentException(sprintf('Cookie named "%s" is not in response', $name)); + } }