[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;
|
||||
|
||||
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\Security\Core\SecurityContextInterface;
|
||||
use Symfony\Component\Security\Http\HttpUtils;
|
||||
|
||||
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());
|
||||
|
||||
// absolute path
|
||||
$response = $utils->createRedirectResponse($this->getRequest(), '/foobar');
|
||||
|
||||
$this->assertTrue($response->isRedirect('http://localhost/foobar'));
|
||||
$this->assertEquals(302, $response->getStatusCode());
|
||||
}
|
||||
|
||||
// absolute URL
|
||||
public function testCreateRedirectResponseWithAbsoluteUrl()
|
||||
{
|
||||
$utils = new HttpUtils($this->getUrlGenerator());
|
||||
$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'));
|
||||
|
||||
$urlGenerator
|
||||
->expects($this->any())
|
||||
->method('generate')
|
||||
@ -54,25 +62,29 @@ class HttpUtilsTest extends \PHPUnit_Framework_TestCase
|
||||
->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()
|
||||
public function testCreateRequestWithPath()
|
||||
{
|
||||
$utils = new HttpUtils($this->getUrlGenerator());
|
||||
|
||||
// absolute path
|
||||
$request = $this->getRequest();
|
||||
$request->server->set('Foo', 'bar');
|
||||
|
||||
$utils = new HttpUtils($this->getUrlGenerator());
|
||||
$subRequest = $utils->createRequest($request, '/foobar');
|
||||
|
||||
$this->assertEquals('GET', $subRequest->getMethod());
|
||||
$this->assertEquals('/foobar', $subRequest->getPathInfo());
|
||||
$this->assertEquals('bar', $subRequest->server->get('Foo'));
|
||||
}
|
||||
|
||||
// route name
|
||||
public function testCreateRequestWithRouteName()
|
||||
{
|
||||
$utils = new HttpUtils($urlGenerator = $this->getMock('Symfony\Component\Routing\Generator\UrlGeneratorInterface'));
|
||||
|
||||
$urlGenerator
|
||||
->expects($this->once())
|
||||
->method('generate')
|
||||
@ -83,14 +95,54 @@ class HttpUtilsTest extends \PHPUnit_Framework_TestCase
|
||||
->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(), '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/');
|
||||
|
||||
$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()
|
||||
{
|
||||
$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'));
|
||||
// Checking unicode
|
||||
$this->assertTrue($utils->checkRequestPath($this->getRequest(urlencode('/вход')), '/вход'));
|
||||
}
|
||||
|
||||
public function testCheckRequestPathWithUrlMatcherAndResourceNotFound()
|
||||
{
|
||||
$urlMatcher = $this->getMock('Symfony\Component\Routing\Matcher\UrlMatcherInterface');
|
||||
$urlMatcher
|
||||
->expects($this->any())
|
||||
->method('match')
|
||||
->with('/')
|
||||
->will($this->throwException(new ResourceNotFoundException()))
|
||||
;
|
||||
|
||||
$utils = new HttpUtils(null, $urlMatcher);
|
||||
$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
|
||||
->expects($this->any())
|
||||
->method('match')
|
||||
->with('/foo/bar')
|
||||
->will($this->returnValue(array('_route' => 'foobar')))
|
||||
;
|
||||
|
||||
$utils = new HttpUtils(null, $urlMatcher);
|
||||
$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
|
||||
*/
|
||||
@ -133,20 +225,37 @@ class HttpUtilsTest extends \PHPUnit_Framework_TestCase
|
||||
->method('match')
|
||||
->will($this->throwException(new \RuntimeException()))
|
||||
;
|
||||
|
||||
$utils = new HttpUtils(null, $urlMatcher);
|
||||
$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()
|
||||
{
|
||||
$method = new \ReflectionMethod('Symfony\Component\Security\Http\HttpUtils', 'generateUri');
|
||||
$method->setAccessible(true);
|
||||
|
||||
$utils = new HttpUtils($this->getUrlGenerator());
|
||||
$this->assertEquals('/foo/bar', $method->invoke($utils, new Request(), 'route_name'));
|
||||
$utils = new HttpUtils($this->getUrlGenerator('/foo/bar'));
|
||||
$this->assertEquals('/foo/bar', $utils->generateUri(new Request(), 'route_name'));
|
||||
|
||||
$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')
|
||||
|
Reference in New Issue
Block a user