[Security] Added few new test cases for the HttpUtils and improved readability of existing tests.
This commit is contained in:
parent
d6ab77e7e8
commit
540985275d
@ -12,8 +12,10 @@
|
|||||||
namespace Symfony\Component\Security\Tests\Http;
|
namespace Symfony\Component\Security\Tests\Http;
|
||||||
|
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
use Symfony\Component\Security\Http\HttpUtils;
|
use Symfony\Component\Routing\Exception\MethodNotAllowedException;
|
||||||
use Symfony\Component\Routing\Exception\ResourceNotFoundException;
|
use Symfony\Component\Routing\Exception\ResourceNotFoundException;
|
||||||
|
use Symfony\Component\Security\Core\SecurityContextInterface;
|
||||||
|
use Symfony\Component\Security\Http\HttpUtils;
|
||||||
|
|
||||||
class HttpUtilsTest extends \PHPUnit_Framework_TestCase
|
class HttpUtilsTest extends \PHPUnit_Framework_TestCase
|
||||||
{
|
{
|
||||||
@ -28,21 +30,27 @@ class HttpUtilsTest extends \PHPUnit_Framework_TestCase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testCreateRedirectResponse()
|
public function testCreateRedirectResponseWithPath()
|
||||||
{
|
{
|
||||||
$utils = new HttpUtils($this->getUrlGenerator());
|
$utils = new HttpUtils($this->getUrlGenerator());
|
||||||
|
|
||||||
// absolute path
|
|
||||||
$response = $utils->createRedirectResponse($this->getRequest(), '/foobar');
|
$response = $utils->createRedirectResponse($this->getRequest(), '/foobar');
|
||||||
|
|
||||||
$this->assertTrue($response->isRedirect('http://localhost/foobar'));
|
$this->assertTrue($response->isRedirect('http://localhost/foobar'));
|
||||||
$this->assertEquals(302, $response->getStatusCode());
|
$this->assertEquals(302, $response->getStatusCode());
|
||||||
|
}
|
||||||
|
|
||||||
// absolute URL
|
public function testCreateRedirectResponseWithAbsoluteUrl()
|
||||||
|
{
|
||||||
|
$utils = new HttpUtils($this->getUrlGenerator());
|
||||||
$response = $utils->createRedirectResponse($this->getRequest(), 'http://symfony.com/');
|
$response = $utils->createRedirectResponse($this->getRequest(), 'http://symfony.com/');
|
||||||
$this->assertTrue($response->isRedirect('http://symfony.com/'));
|
|
||||||
|
|
||||||
// route name
|
$this->assertTrue($response->isRedirect('http://symfony.com/'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testCreateRedirectResponseWithRouteName()
|
||||||
|
{
|
||||||
$utils = new HttpUtils($urlGenerator = $this->getMock('Symfony\Component\Routing\Generator\UrlGeneratorInterface'));
|
$utils = new HttpUtils($urlGenerator = $this->getMock('Symfony\Component\Routing\Generator\UrlGeneratorInterface'));
|
||||||
|
|
||||||
$urlGenerator
|
$urlGenerator
|
||||||
->expects($this->any())
|
->expects($this->any())
|
||||||
->method('generate')
|
->method('generate')
|
||||||
@ -54,25 +62,29 @@ class HttpUtilsTest extends \PHPUnit_Framework_TestCase
|
|||||||
->method('getContext')
|
->method('getContext')
|
||||||
->will($this->returnValue($this->getMock('Symfony\Component\Routing\RequestContext')))
|
->will($this->returnValue($this->getMock('Symfony\Component\Routing\RequestContext')))
|
||||||
;
|
;
|
||||||
|
|
||||||
$response = $utils->createRedirectResponse($this->getRequest(), 'foobar');
|
$response = $utils->createRedirectResponse($this->getRequest(), 'foobar');
|
||||||
|
|
||||||
$this->assertTrue($response->isRedirect('http://localhost/foo/bar'));
|
$this->assertTrue($response->isRedirect('http://localhost/foo/bar'));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testCreateRequest()
|
public function testCreateRequestWithPath()
|
||||||
{
|
{
|
||||||
$utils = new HttpUtils($this->getUrlGenerator());
|
|
||||||
|
|
||||||
// absolute path
|
|
||||||
$request = $this->getRequest();
|
$request = $this->getRequest();
|
||||||
$request->server->set('Foo', 'bar');
|
$request->server->set('Foo', 'bar');
|
||||||
|
|
||||||
|
$utils = new HttpUtils($this->getUrlGenerator());
|
||||||
$subRequest = $utils->createRequest($request, '/foobar');
|
$subRequest = $utils->createRequest($request, '/foobar');
|
||||||
|
|
||||||
$this->assertEquals('GET', $subRequest->getMethod());
|
$this->assertEquals('GET', $subRequest->getMethod());
|
||||||
$this->assertEquals('/foobar', $subRequest->getPathInfo());
|
$this->assertEquals('/foobar', $subRequest->getPathInfo());
|
||||||
$this->assertEquals('bar', $subRequest->server->get('Foo'));
|
$this->assertEquals('bar', $subRequest->server->get('Foo'));
|
||||||
|
}
|
||||||
|
|
||||||
// route name
|
public function testCreateRequestWithRouteName()
|
||||||
|
{
|
||||||
$utils = new HttpUtils($urlGenerator = $this->getMock('Symfony\Component\Routing\Generator\UrlGeneratorInterface'));
|
$utils = new HttpUtils($urlGenerator = $this->getMock('Symfony\Component\Routing\Generator\UrlGeneratorInterface'));
|
||||||
|
|
||||||
$urlGenerator
|
$urlGenerator
|
||||||
->expects($this->once())
|
->expects($this->once())
|
||||||
->method('generate')
|
->method('generate')
|
||||||
@ -83,14 +95,54 @@ class HttpUtilsTest extends \PHPUnit_Framework_TestCase
|
|||||||
->method('getContext')
|
->method('getContext')
|
||||||
->will($this->returnValue($this->getMock('Symfony\Component\Routing\RequestContext')))
|
->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(), 'foobar');
|
||||||
|
|
||||||
|
$this->assertEquals('/foo/bar', $subRequest->getPathInfo());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testCreateRequestWithAbsoluteUrl()
|
||||||
|
{
|
||||||
|
$utils = new HttpUtils($this->getMock('Symfony\Component\Routing\Generator\UrlGeneratorInterface'));
|
||||||
$subRequest = $utils->createRequest($this->getRequest(), 'http://symfony.com/');
|
$subRequest = $utils->createRequest($this->getRequest(), 'http://symfony.com/');
|
||||||
|
|
||||||
$this->assertEquals('/', $subRequest->getPathInfo());
|
$this->assertEquals('/', $subRequest->getPathInfo());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testCreateRequestPassesSessionToTheNewRequest()
|
||||||
|
{
|
||||||
|
$request = $this->getRequest();
|
||||||
|
$request->setSession($session = $this->getMock('Symfony\Component\HttpFoundation\Session\SessionInterface'));
|
||||||
|
|
||||||
|
$utils = new HttpUtils($this->getUrlGenerator());
|
||||||
|
$subRequest = $utils->createRequest($request, '/foobar');
|
||||||
|
|
||||||
|
$this->assertSame($session, $subRequest->getSession());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider provideSecurityContextAttributes
|
||||||
|
*/
|
||||||
|
public function testCreateRequestPassesSecurityContextAttributesToTheNewRequest($attribute)
|
||||||
|
{
|
||||||
|
$request = $this->getRequest();
|
||||||
|
$request->attributes->set($attribute, 'foo');
|
||||||
|
|
||||||
|
$utils = new HttpUtils($this->getUrlGenerator());
|
||||||
|
$subRequest = $utils->createRequest($request, '/foobar');
|
||||||
|
|
||||||
|
$this->assertSame('foo', $subRequest->attributes->get($attribute));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function provideSecurityContextAttributes()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
array(SecurityContextInterface::AUTHENTICATION_ERROR),
|
||||||
|
array(SecurityContextInterface::ACCESS_DENIED_ERROR),
|
||||||
|
array(SecurityContextInterface::LAST_USERNAME)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
public function testCheckRequestPath()
|
public function testCheckRequestPath()
|
||||||
{
|
{
|
||||||
$utils = new HttpUtils($this->getUrlGenerator());
|
$utils = new HttpUtils($this->getUrlGenerator());
|
||||||
@ -102,26 +154,66 @@ class HttpUtilsTest extends \PHPUnit_Framework_TestCase
|
|||||||
$this->assertTrue($utils->checkRequestPath($this->getRequest('/foo+bar'), '/foo+bar'));
|
$this->assertTrue($utils->checkRequestPath($this->getRequest('/foo+bar'), '/foo+bar'));
|
||||||
// Checking unicode
|
// Checking unicode
|
||||||
$this->assertTrue($utils->checkRequestPath($this->getRequest(urlencode('/вход')), '/вход'));
|
$this->assertTrue($utils->checkRequestPath($this->getRequest(urlencode('/вход')), '/вход'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testCheckRequestPathWithUrlMatcherAndResourceNotFound()
|
||||||
|
{
|
||||||
$urlMatcher = $this->getMock('Symfony\Component\Routing\Matcher\UrlMatcherInterface');
|
$urlMatcher = $this->getMock('Symfony\Component\Routing\Matcher\UrlMatcherInterface');
|
||||||
$urlMatcher
|
$urlMatcher
|
||||||
->expects($this->any())
|
->expects($this->any())
|
||||||
->method('match')
|
->method('match')
|
||||||
|
->with('/')
|
||||||
->will($this->throwException(new ResourceNotFoundException()))
|
->will($this->throwException(new ResourceNotFoundException()))
|
||||||
;
|
;
|
||||||
|
|
||||||
$utils = new HttpUtils(null, $urlMatcher);
|
$utils = new HttpUtils(null, $urlMatcher);
|
||||||
$this->assertFalse($utils->checkRequestPath($this->getRequest(), 'foobar'));
|
$this->assertFalse($utils->checkRequestPath($this->getRequest(), 'foobar'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testCheckRequestPathWithUrlMatcherAndMethodNotAllowed()
|
||||||
|
{
|
||||||
|
$request = $this->getRequest();
|
||||||
|
$urlMatcher = $this->getMock('Symfony\Component\Routing\Matcher\RequestMatcherInterface');
|
||||||
|
$urlMatcher
|
||||||
|
->expects($this->any())
|
||||||
|
->method('matchRequest')
|
||||||
|
->with($request)
|
||||||
|
->will($this->throwException(new MethodNotAllowedException(array())))
|
||||||
|
;
|
||||||
|
|
||||||
|
$utils = new HttpUtils(null, $urlMatcher);
|
||||||
|
$this->assertFalse($utils->checkRequestPath($request, 'foobar'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testCheckRequestPathWithUrlMatcherAndResourceFoundByUrl()
|
||||||
|
{
|
||||||
$urlMatcher = $this->getMock('Symfony\Component\Routing\Matcher\UrlMatcherInterface');
|
$urlMatcher = $this->getMock('Symfony\Component\Routing\Matcher\UrlMatcherInterface');
|
||||||
$urlMatcher
|
$urlMatcher
|
||||||
->expects($this->any())
|
->expects($this->any())
|
||||||
->method('match')
|
->method('match')
|
||||||
|
->with('/foo/bar')
|
||||||
->will($this->returnValue(array('_route' => 'foobar')))
|
->will($this->returnValue(array('_route' => 'foobar')))
|
||||||
;
|
;
|
||||||
|
|
||||||
$utils = new HttpUtils(null, $urlMatcher);
|
$utils = new HttpUtils(null, $urlMatcher);
|
||||||
$this->assertTrue($utils->checkRequestPath($this->getRequest('/foo/bar'), 'foobar'));
|
$this->assertTrue($utils->checkRequestPath($this->getRequest('/foo/bar'), 'foobar'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testCheckRequestPathWithUrlMatcherAndResourceFoundByRequest()
|
||||||
|
{
|
||||||
|
$request = $this->getRequest();
|
||||||
|
$urlMatcher = $this->getMock('Symfony\Component\Routing\Matcher\RequestMatcherInterface');
|
||||||
|
$urlMatcher
|
||||||
|
->expects($this->any())
|
||||||
|
->method('matchRequest')
|
||||||
|
->with($request)
|
||||||
|
->will($this->returnValue(array('_route' => 'foobar')))
|
||||||
|
;
|
||||||
|
|
||||||
|
$utils = new HttpUtils(null, $urlMatcher);
|
||||||
|
$this->assertTrue($utils->checkRequestPath($request, 'foobar'));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @expectedException \RuntimeException
|
* @expectedException \RuntimeException
|
||||||
*/
|
*/
|
||||||
@ -133,20 +225,37 @@ class HttpUtilsTest extends \PHPUnit_Framework_TestCase
|
|||||||
->method('match')
|
->method('match')
|
||||||
->will($this->throwException(new \RuntimeException()))
|
->will($this->throwException(new \RuntimeException()))
|
||||||
;
|
;
|
||||||
|
|
||||||
$utils = new HttpUtils(null, $urlMatcher);
|
$utils = new HttpUtils(null, $urlMatcher);
|
||||||
$utils->checkRequestPath($this->getRequest(), 'foobar');
|
$utils->checkRequestPath($this->getRequest(), 'foobar');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @expectedException \InvalidArgumentException
|
||||||
|
* @expectedExceptionMessage Matcher must either implement UrlMatcherInterface or RequestMatcherInterface
|
||||||
|
*/
|
||||||
|
public function testUrlMatcher()
|
||||||
|
{
|
||||||
|
new HttpUtils($this->getUrlGenerator(), new \stdClass());
|
||||||
|
}
|
||||||
|
|
||||||
public function testGenerateUriRemovesQueryString()
|
public function testGenerateUriRemovesQueryString()
|
||||||
{
|
{
|
||||||
$method = new \ReflectionMethod('Symfony\Component\Security\Http\HttpUtils', 'generateUri');
|
$utils = new HttpUtils($this->getUrlGenerator('/foo/bar'));
|
||||||
$method->setAccessible(true);
|
$this->assertEquals('/foo/bar', $utils->generateUri(new Request(), 'route_name'));
|
||||||
|
|
||||||
$utils = new HttpUtils($this->getUrlGenerator());
|
|
||||||
$this->assertEquals('/foo/bar', $method->invoke($utils, new Request(), 'route_name'));
|
|
||||||
|
|
||||||
$utils = new HttpUtils($this->getUrlGenerator('/foo/bar?param=value'));
|
$utils = new HttpUtils($this->getUrlGenerator('/foo/bar?param=value'));
|
||||||
$this->assertEquals('/foo/bar', $method->invoke($utils, new Request(), 'route_name'));
|
$this->assertEquals('/foo/bar', $utils->generateUri(new Request(), 'route_name'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @expectedException \LogicException
|
||||||
|
* @expectedExceptionMessage You must provide a UrlGeneratorInterface instance to be able to use routes.
|
||||||
|
*/
|
||||||
|
public function testUrlGeneratorIsRequiredToGenerateUrl()
|
||||||
|
{
|
||||||
|
$utils = new HttpUtils();
|
||||||
|
$utils->generateUri(new Request(), 'route_name');
|
||||||
}
|
}
|
||||||
|
|
||||||
private function getUrlGenerator($generatedUrl = '/foo/bar')
|
private function getUrlGenerator($generatedUrl = '/foo/bar')
|
||||||
|
Reference in New Issue
Block a user