Вход Регистрация
Файл: symfony-2.7/src/Symfony/Component/Security/Http/Tests/HttpUtilsTest.php
Строк: 303
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace SymfonyComponentSecurityHttpTests;

use 
SymfonyComponentHttpFoundationRequest;
use 
SymfonyComponentRoutingExceptionMethodNotAllowedException;
use 
SymfonyComponentRoutingExceptionResourceNotFoundException;
use 
SymfonyComponentSecurityCoreSecurity;
use 
SymfonyComponentSecurityHttpHttpUtils;

class 
HttpUtilsTest extends PHPUnit_Framework_TestCase
{
    public function 
testCreateRedirectResponseWithPath()
    {
        
$utils = new HttpUtils($this->getUrlGenerator());
        
$response $utils->createRedirectResponse($this->getRequest(), '/foobar');

        
$this->assertTrue($response->isRedirect('http://localhost/foobar'));
        
$this->assertEquals(302$response->getStatusCode());
    }

    public function 
testCreateRedirectResponseWithAbsoluteUrl()
    {
        
$utils = new HttpUtils($this->getUrlGenerator());
        
$response $utils->createRedirectResponse($this->getRequest(), 'http://symfony.com/');

        
$this->assertTrue($response->isRedirect('http://symfony.com/'));
    }

    public function 
testCreateRedirectResponseWithRouteName()
    {
        
$utils = new HttpUtils($urlGenerator $this->getMock('SymfonyComponentRoutingGeneratorUrlGeneratorInterface'));

        
$urlGenerator
            
->expects($this->any())
            ->
method('generate')
            ->
with('foobar', array(), true)
            ->
will($this->returnValue('http://localhost/foo/bar'))
        ;
        
$urlGenerator
            
->expects($this->any())
            ->
method('getContext')
            ->
will($this->returnValue($this->getMock('SymfonyComponentRoutingRequestContext')))
        ;

        
$response $utils->createRedirectResponse($this->getRequest(), 'foobar');

        
$this->assertTrue($response->isRedirect('http://localhost/foo/bar'));
    }

    public function 
testCreateRequestWithPath()
    {
        
$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'));
    }

    public function 
testCreateRequestWithRouteName()
    {
        
$utils = new HttpUtils($urlGenerator $this->getMock('SymfonyComponentRoutingGeneratorUrlGeneratorInterface'));

        
$urlGenerator
            
->expects($this->once())
            ->
method('generate')
            ->
will($this->returnValue('/foo/bar'))
        ;
        
$urlGenerator
            
->expects($this->any())
            ->
method('getContext')
            ->
will($this->returnValue($this->getMock('SymfonyComponentRoutingRequestContext')))
        ;

        
$subRequest $utils->createRequest($this->getRequest(), 'foobar');

        
$this->assertEquals('/foo/bar'$subRequest->getPathInfo());
    }

    public function 
testCreateRequestWithAbsoluteUrl()
    {
        
$utils = new HttpUtils($this->getMock('SymfonyComponentRoutingGeneratorUrlGeneratorInterface'));
        
$subRequest $utils->createRequest($this->getRequest(), 'http://symfony.com/');

        
$this->assertEquals('/'$subRequest->getPathInfo());
    }

    public function 
testCreateRequestPassesSessionToTheNewRequest()
    {
        
$request $this->getRequest();
        
$request->setSession($session $this->getMock('SymfonyComponentHttpFoundationSessionSessionInterface'));

        
$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(
Security::AUTHENTICATION_ERROR),
            array(
Security::ACCESS_DENIED_ERROR),
            array(
Security::LAST_USERNAME),
        );
    }

    public function 
testCheckRequestPath()
    {
        
$utils = new HttpUtils($this->getUrlGenerator());

        
$this->assertTrue($utils->checkRequestPath($this->getRequest(), '/'));
        
$this->assertFalse($utils->checkRequestPath($this->getRequest(), '/foo'));
        
$this->assertTrue($utils->checkRequestPath($this->getRequest('/foo%20bar'), '/foo bar'));
        
// Plus must not decoded to space
        
$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('SymfonyComponentRoutingMatcherUrlMatcherInterface');
        
$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('SymfonyComponentRoutingMatcherRequestMatcherInterface');
        
$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('SymfonyComponentRoutingMatcherUrlMatcherInterface');
        
$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('SymfonyComponentRoutingMatcherRequestMatcherInterface');
        
$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
     */
    
public function testCheckRequestPathWithUrlMatcherLoadingException()
    {
        
$urlMatcher $this->getMock('SymfonyComponentRoutingMatcherUrlMatcherInterface');
        
$urlMatcher
            
->expects($this->any())
            ->
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()
    {
        
$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'$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')
    {
        
$urlGenerator $this->getMock('SymfonyComponentRoutingGeneratorUrlGeneratorInterface');
        
$urlGenerator
            
->expects($this->any())
            ->
method('generate')
            ->
will($this->returnValue($generatedUrl))
        ;

        return 
$urlGenerator;
    }

    private function 
getRequest($path '/')
    {
        return 
Request::create($path'get');
    }
}
Онлайн: 1
Реклама