diff options
Diffstat (limited to 'Tests/Http/HttpUtilsTest.php')
-rw-r--r-- | Tests/Http/HttpUtilsTest.php | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/Tests/Http/HttpUtilsTest.php b/Tests/Http/HttpUtilsTest.php new file mode 100644 index 0000000..9771355 --- /dev/null +++ b/Tests/Http/HttpUtilsTest.php @@ -0,0 +1,151 @@ +<?php + +/* + * This file is part of the Symfony framework. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ + +namespace Symfony\Component\Security\Tests\Http; + +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\Security\Http\HttpUtils; +use Symfony\Component\Routing\Exception\ResourceNotFoundException; + +class HttpUtilsTest extends \PHPUnit_Framework_TestCase +{ + protected function setUp() + { + if (!class_exists('Symfony\Component\HttpFoundation\Request')) { + $this->markTestSkipped('The "HttpFoundation" component is not available'); + } + + if (!class_exists('Symfony\Component\Routing\Router')) { + $this->markTestSkipped('The "Routing" component is not available'); + } + } + + public function testCreateRedirectResponse() + { + $utils = new HttpUtils($this->getRouter()); + + // absolute path + $response = $utils->createRedirectResponse($this->getRequest(), '/foobar'); + $this->assertTrue($response->isRedirect('http://localhost/foobar')); + $this->assertEquals(302, $response->getStatusCode()); + + // absolute URL + $response = $utils->createRedirectResponse($this->getRequest(), 'http://symfony.com/'); + $this->assertTrue($response->isRedirect('http://symfony.com/')); + + // route name + $utils = new HttpUtils($router = $this->getMockBuilder('Symfony\Component\Routing\Router')->disableOriginalConstructor()->getMock()); + $router + ->expects($this->any()) + ->method('generate') + ->with('foobar', array(), true) + ->will($this->returnValue('http://localhost/foo/bar')) + ; + $router + ->expects($this->any()) + ->method('getContext') + ->will($this->returnValue($this->getMock('Symfony\Component\Routing\RequestContext'))) + ; + $response = $utils->createRedirectResponse($this->getRequest(), 'foobar'); + $this->assertTrue($response->isRedirect('http://localhost/foo/bar')); + } + + public function testCreateRequest() + { + $utils = new HttpUtils($this->getRouter()); + + // absolute path + $request = $this->getRequest(); + $request->server->set('Foo', 'bar'); + $subRequest = $utils->createRequest($request, '/foobar'); + + $this->assertEquals('GET', $subRequest->getMethod()); + $this->assertEquals('/foobar', $subRequest->getPathInfo()); + $this->assertEquals('bar', $subRequest->server->get('Foo')); + + // route name + $utils = new HttpUtils($router = $this->getMockBuilder('Symfony\Component\Routing\Router')->disableOriginalConstructor()->getMock()); + $router + ->expects($this->once()) + ->method('generate') + ->will($this->returnValue('/foo/bar')) + ; + $router + ->expects($this->any()) + ->method('getContext') + ->will($this->returnValue($this->getMock('Symfony\Component\Routing\RequestContext'))) + ; + $subRequest = $utils->createRequest($this->getRequest(), 'foobar'); + $this->assertEquals('/foo/bar', $subRequest->getPathInfo()); + + // absolute URL + $subRequest = $utils->createRequest($this->getRequest(), 'http://symfony.com/'); + $this->assertEquals('/', $subRequest->getPathInfo()); + } + + public function testCheckRequestPath() + { + $utils = new HttpUtils($this->getRouter()); + + $this->assertTrue($utils->checkRequestPath($this->getRequest(), '/')); + $this->assertFalse($utils->checkRequestPath($this->getRequest(), '/foo')); + + $router = $this->getMock('Symfony\Component\Routing\RouterInterface'); + $router + ->expects($this->any()) + ->method('match') + ->will($this->throwException(new ResourceNotFoundException())) + ; + $utils = new HttpUtils($router); + $this->assertFalse($utils->checkRequestPath($this->getRequest(), 'foobar')); + + $router = $this->getMock('Symfony\Component\Routing\RouterInterface'); + $router + ->expects($this->any()) + ->method('match') + ->will($this->returnValue(array('_route' => 'foobar'))) + ; + $utils = new HttpUtils($router); + $this->assertTrue($utils->checkRequestPath($this->getRequest('/foo/bar'), 'foobar')); + } + + /** + * @expectedException \RuntimeException + */ + public function testCheckRequestPathWithRouterLoadingException() + { + $router = $this->getMock('Symfony\Component\Routing\RouterInterface'); + $router + ->expects($this->any()) + ->method('match') + ->will($this->throwException(new \RuntimeException())) + ; + $utils = new HttpUtils($router); + $utils->checkRequestPath($this->getRequest(), 'foobar'); + } + + private function getRouter() + { + $router = $this->getMock('Symfony\Component\Routing\RouterInterface'); + $router + ->expects($this->any()) + ->method('generate') + ->will($this->returnValue('/foo/bar')) + ; + + return $router; + } + + private function getRequest($path = '/') + { + return Request::create($path, 'get'); + } +} |