提交代码
This commit is contained in:
102
vendor/symfony/http-kernel/Tests/Fragment/EsiFragmentRendererTest.php
vendored
Normal file
102
vendor/symfony/http-kernel/Tests/Fragment/EsiFragmentRendererTest.php
vendored
Normal file
@@ -0,0 +1,102 @@
|
||||
<?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 Symfony\Component\HttpKernel\Tests\Fragment;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpKernel\Controller\ControllerReference;
|
||||
use Symfony\Component\HttpKernel\Fragment\EsiFragmentRenderer;
|
||||
use Symfony\Component\HttpKernel\HttpCache\Esi;
|
||||
use Symfony\Component\HttpKernel\UriSigner;
|
||||
|
||||
class EsiFragmentRendererTest extends TestCase
|
||||
{
|
||||
public function testRenderFallbackToInlineStrategyIfEsiNotSupported()
|
||||
{
|
||||
$strategy = new EsiFragmentRenderer(new Esi(), $this->getInlineStrategy(true));
|
||||
$strategy->render('/', Request::create('/'));
|
||||
}
|
||||
|
||||
public function testRenderFallbackWithScalar()
|
||||
{
|
||||
$strategy = new EsiFragmentRenderer(new Esi(), $this->getInlineStrategy(true), new UriSigner('foo'));
|
||||
$request = Request::create('/');
|
||||
$reference = new ControllerReference('main_controller', ['foo' => [true]], []);
|
||||
$strategy->render($reference, $request);
|
||||
}
|
||||
|
||||
public function testRender()
|
||||
{
|
||||
$strategy = new EsiFragmentRenderer(new Esi(), $this->getInlineStrategy());
|
||||
|
||||
$request = Request::create('/');
|
||||
$request->setLocale('fr');
|
||||
$request->headers->set('Surrogate-Capability', 'ESI/1.0');
|
||||
|
||||
$this->assertEquals('<esi:include src="/" />', $strategy->render('/', $request)->getContent());
|
||||
$this->assertEquals("<esi:comment text=\"This is a comment\" />\n<esi:include src=\"/\" />", $strategy->render('/', $request, ['comment' => 'This is a comment'])->getContent());
|
||||
$this->assertEquals('<esi:include src="/" alt="foo" />', $strategy->render('/', $request, ['alt' => 'foo'])->getContent());
|
||||
}
|
||||
|
||||
public function testRenderControllerReference()
|
||||
{
|
||||
$signer = new UriSigner('foo');
|
||||
$strategy = new EsiFragmentRenderer(new Esi(), $this->getInlineStrategy(), $signer);
|
||||
|
||||
$request = Request::create('/');
|
||||
$request->setLocale('fr');
|
||||
$request->headers->set('Surrogate-Capability', 'ESI/1.0');
|
||||
|
||||
$reference = new ControllerReference('main_controller', [], []);
|
||||
$altReference = new ControllerReference('alt_controller', [], []);
|
||||
|
||||
$this->assertEquals(
|
||||
'<esi:include src="/_fragment?_hash=Jz1P8NErmhKTeI6onI1EdAXTB85359MY3RIk5mSJ60w%3D&_path=_format%3Dhtml%26_locale%3Dfr%26_controller%3Dmain_controller" alt="/_fragment?_hash=iPJEdRoUpGrM1ztqByiorpfMPtiW%2FOWwdH1DBUXHhEc%3D&_path=_format%3Dhtml%26_locale%3Dfr%26_controller%3Dalt_controller" />',
|
||||
$strategy->render($reference, $request, ['alt' => $altReference])->getContent()
|
||||
);
|
||||
}
|
||||
|
||||
public function testRenderControllerReferenceWithoutSignerThrowsException()
|
||||
{
|
||||
$this->expectException('LogicException');
|
||||
$strategy = new EsiFragmentRenderer(new Esi(), $this->getInlineStrategy());
|
||||
|
||||
$request = Request::create('/');
|
||||
$request->setLocale('fr');
|
||||
$request->headers->set('Surrogate-Capability', 'ESI/1.0');
|
||||
|
||||
$strategy->render(new ControllerReference('main_controller'), $request);
|
||||
}
|
||||
|
||||
public function testRenderAltControllerReferenceWithoutSignerThrowsException()
|
||||
{
|
||||
$this->expectException('LogicException');
|
||||
$strategy = new EsiFragmentRenderer(new Esi(), $this->getInlineStrategy());
|
||||
|
||||
$request = Request::create('/');
|
||||
$request->setLocale('fr');
|
||||
$request->headers->set('Surrogate-Capability', 'ESI/1.0');
|
||||
|
||||
$strategy->render('/', $request, ['alt' => new ControllerReference('alt_controller')]);
|
||||
}
|
||||
|
||||
private function getInlineStrategy($called = false)
|
||||
{
|
||||
$inline = $this->getMockBuilder('Symfony\Component\HttpKernel\Fragment\InlineFragmentRenderer')->disableOriginalConstructor()->getMock();
|
||||
|
||||
if ($called) {
|
||||
$inline->expects($this->once())->method('render');
|
||||
}
|
||||
|
||||
return $inline;
|
||||
}
|
||||
}
|
||||
93
vendor/symfony/http-kernel/Tests/Fragment/FragmentHandlerTest.php
vendored
Normal file
93
vendor/symfony/http-kernel/Tests/Fragment/FragmentHandlerTest.php
vendored
Normal file
@@ -0,0 +1,93 @@
|
||||
<?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 Symfony\Component\HttpKernel\Tests\Fragment;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\HttpKernel\Fragment\FragmentHandler;
|
||||
|
||||
/**
|
||||
* @group time-sensitive
|
||||
*/
|
||||
class FragmentHandlerTest extends TestCase
|
||||
{
|
||||
private $requestStack;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
$this->requestStack = $this->getMockBuilder('Symfony\\Component\\HttpFoundation\\RequestStack')
|
||||
->disableOriginalConstructor()
|
||||
->getMock()
|
||||
;
|
||||
$this->requestStack
|
||||
->expects($this->any())
|
||||
->method('getCurrentRequest')
|
||||
->willReturn(Request::create('/'))
|
||||
;
|
||||
}
|
||||
|
||||
public function testRenderWhenRendererDoesNotExist()
|
||||
{
|
||||
$this->expectException('InvalidArgumentException');
|
||||
$handler = new FragmentHandler($this->requestStack);
|
||||
$handler->render('/', 'foo');
|
||||
}
|
||||
|
||||
public function testRenderWithUnknownRenderer()
|
||||
{
|
||||
$this->expectException('InvalidArgumentException');
|
||||
$handler = $this->getHandler($this->returnValue(new Response('foo')));
|
||||
|
||||
$handler->render('/', 'bar');
|
||||
}
|
||||
|
||||
public function testDeliverWithUnsuccessfulResponse()
|
||||
{
|
||||
$this->expectException('RuntimeException');
|
||||
$this->expectExceptionMessage('Error when rendering "http://localhost/" (Status code is 404).');
|
||||
$handler = $this->getHandler($this->returnValue(new Response('foo', 404)));
|
||||
|
||||
$handler->render('/', 'foo');
|
||||
}
|
||||
|
||||
public function testRender()
|
||||
{
|
||||
$handler = $this->getHandler($this->returnValue(new Response('foo')), ['/', Request::create('/'), ['foo' => 'foo', 'ignore_errors' => true]]);
|
||||
|
||||
$this->assertEquals('foo', $handler->render('/', 'foo', ['foo' => 'foo']));
|
||||
}
|
||||
|
||||
protected function getHandler($returnValue, $arguments = [])
|
||||
{
|
||||
$renderer = $this->getMockBuilder('Symfony\Component\HttpKernel\Fragment\FragmentRendererInterface')->getMock();
|
||||
$renderer
|
||||
->expects($this->any())
|
||||
->method('getName')
|
||||
->willReturn('foo')
|
||||
;
|
||||
$e = $renderer
|
||||
->expects($this->any())
|
||||
->method('render')
|
||||
->will($returnValue)
|
||||
;
|
||||
|
||||
if ($arguments) {
|
||||
$e->with(...$arguments);
|
||||
}
|
||||
|
||||
$handler = new FragmentHandler($this->requestStack);
|
||||
$handler->addRenderer($renderer);
|
||||
|
||||
return $handler;
|
||||
}
|
||||
}
|
||||
99
vendor/symfony/http-kernel/Tests/Fragment/HIncludeFragmentRendererTest.php
vendored
Normal file
99
vendor/symfony/http-kernel/Tests/Fragment/HIncludeFragmentRendererTest.php
vendored
Normal file
@@ -0,0 +1,99 @@
|
||||
<?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 Symfony\Component\HttpKernel\Tests\Fragment;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpKernel\Controller\ControllerReference;
|
||||
use Symfony\Component\HttpKernel\Fragment\HIncludeFragmentRenderer;
|
||||
use Symfony\Component\HttpKernel\UriSigner;
|
||||
use Twig\Environment;
|
||||
use Twig\Loader\ArrayLoader;
|
||||
|
||||
class HIncludeFragmentRendererTest extends TestCase
|
||||
{
|
||||
public function testRenderExceptionWhenControllerAndNoSigner()
|
||||
{
|
||||
$this->expectException('LogicException');
|
||||
$strategy = new HIncludeFragmentRenderer();
|
||||
$strategy->render(new ControllerReference('main_controller', [], []), Request::create('/'));
|
||||
}
|
||||
|
||||
public function testRenderWithControllerAndSigner()
|
||||
{
|
||||
$strategy = new HIncludeFragmentRenderer(null, new UriSigner('foo'));
|
||||
|
||||
$this->assertEquals('<hx:include src="/_fragment?_hash=BP%2BOzCD5MRUI%2BHJpgPDOmoju00FnzLhP3TGcSHbbBLs%3D&_path=_format%3Dhtml%26_locale%3Den%26_controller%3Dmain_controller"></hx:include>', $strategy->render(new ControllerReference('main_controller', [], []), Request::create('/'))->getContent());
|
||||
}
|
||||
|
||||
public function testRenderWithUri()
|
||||
{
|
||||
$strategy = new HIncludeFragmentRenderer();
|
||||
$this->assertEquals('<hx:include src="/foo"></hx:include>', $strategy->render('/foo', Request::create('/'))->getContent());
|
||||
|
||||
$strategy = new HIncludeFragmentRenderer(null, new UriSigner('foo'));
|
||||
$this->assertEquals('<hx:include src="/foo"></hx:include>', $strategy->render('/foo', Request::create('/'))->getContent());
|
||||
}
|
||||
|
||||
public function testRenderWithDefault()
|
||||
{
|
||||
// only default
|
||||
$strategy = new HIncludeFragmentRenderer();
|
||||
$this->assertEquals('<hx:include src="/foo">default</hx:include>', $strategy->render('/foo', Request::create('/'), ['default' => 'default'])->getContent());
|
||||
|
||||
// only global default
|
||||
$strategy = new HIncludeFragmentRenderer(null, null, 'global_default');
|
||||
$this->assertEquals('<hx:include src="/foo">global_default</hx:include>', $strategy->render('/foo', Request::create('/'), [])->getContent());
|
||||
|
||||
// global default and default
|
||||
$strategy = new HIncludeFragmentRenderer(null, null, 'global_default');
|
||||
$this->assertEquals('<hx:include src="/foo">default</hx:include>', $strategy->render('/foo', Request::create('/'), ['default' => 'default'])->getContent());
|
||||
}
|
||||
|
||||
public function testRenderWithAttributesOptions()
|
||||
{
|
||||
// with id
|
||||
$strategy = new HIncludeFragmentRenderer();
|
||||
$this->assertEquals('<hx:include src="/foo" id="bar">default</hx:include>', $strategy->render('/foo', Request::create('/'), ['default' => 'default', 'id' => 'bar'])->getContent());
|
||||
|
||||
// with attributes
|
||||
$strategy = new HIncludeFragmentRenderer();
|
||||
$this->assertEquals('<hx:include src="/foo" p1="v1" p2="v2">default</hx:include>', $strategy->render('/foo', Request::create('/'), ['default' => 'default', 'attributes' => ['p1' => 'v1', 'p2' => 'v2']])->getContent());
|
||||
|
||||
// with id & attributes
|
||||
$strategy = new HIncludeFragmentRenderer();
|
||||
$this->assertEquals('<hx:include src="/foo" p1="v1" p2="v2" id="bar">default</hx:include>', $strategy->render('/foo', Request::create('/'), ['default' => 'default', 'id' => 'bar', 'attributes' => ['p1' => 'v1', 'p2' => 'v2']])->getContent());
|
||||
}
|
||||
|
||||
public function testRenderWithTwigAndDefaultText()
|
||||
{
|
||||
$twig = new Environment($loader = new ArrayLoader());
|
||||
$strategy = new HIncludeFragmentRenderer($twig);
|
||||
$this->assertEquals('<hx:include src="/foo">loading...</hx:include>', $strategy->render('/foo', Request::create('/'), ['default' => 'loading...'])->getContent());
|
||||
}
|
||||
|
||||
/**
|
||||
* @group legacy
|
||||
*/
|
||||
public function testRenderWithDefaultTextLegacy()
|
||||
{
|
||||
$engine = $this->getMockBuilder('Symfony\\Component\\Templating\\EngineInterface')->getMock();
|
||||
$engine->expects($this->once())
|
||||
->method('exists')
|
||||
->with('default')
|
||||
->willThrowException(new \InvalidArgumentException());
|
||||
|
||||
// only default
|
||||
$strategy = new HIncludeFragmentRenderer($engine);
|
||||
$this->assertEquals('<hx:include src="/foo">default</hx:include>', $strategy->render('/foo', Request::create('/'), ['default' => 'default'])->getContent());
|
||||
}
|
||||
}
|
||||
280
vendor/symfony/http-kernel/Tests/Fragment/InlineFragmentRendererTest.php
vendored
Normal file
280
vendor/symfony/http-kernel/Tests/Fragment/InlineFragmentRendererTest.php
vendored
Normal file
@@ -0,0 +1,280 @@
|
||||
<?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 Symfony\Component\HttpKernel\Tests\Fragment;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\EventDispatcher\EventDispatcher;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\RequestStack;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\HttpKernel\Controller\ControllerReference;
|
||||
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
|
||||
use Symfony\Component\HttpKernel\Fragment\InlineFragmentRenderer;
|
||||
use Symfony\Component\HttpKernel\HttpKernel;
|
||||
use Symfony\Component\HttpKernel\KernelEvents;
|
||||
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
|
||||
|
||||
class InlineFragmentRendererTest extends TestCase
|
||||
{
|
||||
public function testRender()
|
||||
{
|
||||
$strategy = new InlineFragmentRenderer($this->getKernel($this->returnValue(new Response('foo'))));
|
||||
|
||||
$this->assertEquals('foo', $strategy->render('/', Request::create('/'))->getContent());
|
||||
}
|
||||
|
||||
public function testRenderWithControllerReference()
|
||||
{
|
||||
$strategy = new InlineFragmentRenderer($this->getKernel($this->returnValue(new Response('foo'))));
|
||||
|
||||
$this->assertEquals('foo', $strategy->render(new ControllerReference('main_controller', [], []), Request::create('/'))->getContent());
|
||||
}
|
||||
|
||||
public function testRenderWithObjectsAsAttributes()
|
||||
{
|
||||
$object = new \stdClass();
|
||||
|
||||
$subRequest = Request::create('/_fragment?_path=_format%3Dhtml%26_locale%3Den%26_controller%3Dmain_controller');
|
||||
$subRequest->attributes->replace(['object' => $object, '_format' => 'html', '_controller' => 'main_controller', '_locale' => 'en']);
|
||||
$subRequest->headers->set('x-forwarded-for', ['127.0.0.1']);
|
||||
$subRequest->headers->set('forwarded', ['for="127.0.0.1";host="localhost";proto=http']);
|
||||
$subRequest->server->set('HTTP_X_FORWARDED_FOR', '127.0.0.1');
|
||||
$subRequest->server->set('HTTP_FORWARDED', 'for="127.0.0.1";host="localhost";proto=http');
|
||||
|
||||
$strategy = new InlineFragmentRenderer($this->getKernelExpectingRequest($subRequest));
|
||||
|
||||
$this->assertSame('foo', $strategy->render(new ControllerReference('main_controller', ['object' => $object], []), Request::create('/'))->getContent());
|
||||
}
|
||||
|
||||
public function testRenderWithTrustedHeaderDisabled()
|
||||
{
|
||||
Request::setTrustedProxies([], 0);
|
||||
|
||||
$expectedSubRequest = Request::create('/');
|
||||
$expectedSubRequest->headers->set('x-forwarded-for', ['127.0.0.1']);
|
||||
$expectedSubRequest->server->set('HTTP_X_FORWARDED_FOR', '127.0.0.1');
|
||||
|
||||
$strategy = new InlineFragmentRenderer($this->getKernelExpectingRequest($expectedSubRequest));
|
||||
$this->assertSame('foo', $strategy->render('/', Request::create('/'))->getContent());
|
||||
|
||||
Request::setTrustedProxies([], -1);
|
||||
}
|
||||
|
||||
public function testRenderExceptionNoIgnoreErrors()
|
||||
{
|
||||
$this->expectException('RuntimeException');
|
||||
$dispatcher = $this->getMockBuilder(EventDispatcherInterface::class)->getMock();
|
||||
$dispatcher->expects($this->never())->method('dispatch');
|
||||
|
||||
$strategy = new InlineFragmentRenderer($this->getKernel($this->throwException(new \RuntimeException('foo'))), $dispatcher);
|
||||
|
||||
$this->assertEquals('foo', $strategy->render('/', Request::create('/'))->getContent());
|
||||
}
|
||||
|
||||
public function testRenderExceptionIgnoreErrors()
|
||||
{
|
||||
$exception = new \RuntimeException('foo');
|
||||
$kernel = $this->getKernel($this->throwException($exception));
|
||||
$request = Request::create('/');
|
||||
$expectedEvent = new ExceptionEvent($kernel, $request, $kernel::SUB_REQUEST, $exception);
|
||||
$dispatcher = $this->getMockBuilder(EventDispatcherInterface::class)->getMock();
|
||||
$dispatcher->expects($this->once())->method('dispatch')->with($expectedEvent, KernelEvents::EXCEPTION);
|
||||
|
||||
$strategy = new InlineFragmentRenderer($kernel, $dispatcher);
|
||||
|
||||
$this->assertEmpty($strategy->render('/', $request, ['ignore_errors' => true])->getContent());
|
||||
}
|
||||
|
||||
public function testRenderExceptionIgnoreErrorsWithAlt()
|
||||
{
|
||||
$strategy = new InlineFragmentRenderer($this->getKernel($this->onConsecutiveCalls(
|
||||
$this->throwException(new \RuntimeException('foo')),
|
||||
$this->returnValue(new Response('bar'))
|
||||
)));
|
||||
|
||||
$this->assertEquals('bar', $strategy->render('/', Request::create('/'), ['ignore_errors' => true, 'alt' => '/foo'])->getContent());
|
||||
}
|
||||
|
||||
private function getKernel($returnValue)
|
||||
{
|
||||
$kernel = $this->getMockBuilder('Symfony\Component\HttpKernel\HttpKernelInterface')->getMock();
|
||||
$kernel
|
||||
->expects($this->any())
|
||||
->method('handle')
|
||||
->will($returnValue)
|
||||
;
|
||||
|
||||
return $kernel;
|
||||
}
|
||||
|
||||
public function testExceptionInSubRequestsDoesNotMangleOutputBuffers()
|
||||
{
|
||||
$controllerResolver = $this->getMockBuilder('Symfony\\Component\\HttpKernel\\Controller\\ControllerResolverInterface')->getMock();
|
||||
$controllerResolver
|
||||
->expects($this->once())
|
||||
->method('getController')
|
||||
->willReturn(function () {
|
||||
ob_start();
|
||||
echo 'bar';
|
||||
throw new \RuntimeException();
|
||||
})
|
||||
;
|
||||
|
||||
$argumentResolver = $this->getMockBuilder('Symfony\\Component\\HttpKernel\\Controller\\ArgumentResolverInterface')->getMock();
|
||||
$argumentResolver
|
||||
->expects($this->once())
|
||||
->method('getArguments')
|
||||
->willReturn([])
|
||||
;
|
||||
|
||||
$kernel = new HttpKernel(new EventDispatcher(), $controllerResolver, new RequestStack(), $argumentResolver);
|
||||
$renderer = new InlineFragmentRenderer($kernel);
|
||||
|
||||
// simulate a main request with output buffering
|
||||
ob_start();
|
||||
echo 'Foo';
|
||||
|
||||
// simulate a sub-request with output buffering and an exception
|
||||
$renderer->render('/', Request::create('/'), ['ignore_errors' => true]);
|
||||
|
||||
$this->assertEquals('Foo', ob_get_clean());
|
||||
}
|
||||
|
||||
public function testLocaleAndFormatAreIsKeptInSubrequest()
|
||||
{
|
||||
$expectedSubRequest = Request::create('/');
|
||||
$expectedSubRequest->attributes->set('_format', 'foo');
|
||||
$expectedSubRequest->setLocale('fr');
|
||||
if (Request::HEADER_X_FORWARDED_FOR & Request::getTrustedHeaderSet()) {
|
||||
$expectedSubRequest->headers->set('x-forwarded-for', ['127.0.0.1']);
|
||||
$expectedSubRequest->server->set('HTTP_X_FORWARDED_FOR', '127.0.0.1');
|
||||
}
|
||||
$expectedSubRequest->headers->set('forwarded', ['for="127.0.0.1";host="localhost";proto=http']);
|
||||
$expectedSubRequest->server->set('HTTP_FORWARDED', 'for="127.0.0.1";host="localhost";proto=http');
|
||||
|
||||
$strategy = new InlineFragmentRenderer($this->getKernelExpectingRequest($expectedSubRequest));
|
||||
|
||||
$request = Request::create('/');
|
||||
$request->attributes->set('_format', 'foo');
|
||||
$request->setLocale('fr');
|
||||
$strategy->render('/', $request);
|
||||
}
|
||||
|
||||
public function testESIHeaderIsKeptInSubrequest()
|
||||
{
|
||||
$expectedSubRequest = Request::create('/');
|
||||
$expectedSubRequest->headers->set('Surrogate-Capability', 'abc="ESI/1.0"');
|
||||
|
||||
if (Request::HEADER_X_FORWARDED_FOR & Request::getTrustedHeaderSet()) {
|
||||
$expectedSubRequest->headers->set('x-forwarded-for', ['127.0.0.1']);
|
||||
$expectedSubRequest->server->set('HTTP_X_FORWARDED_FOR', '127.0.0.1');
|
||||
}
|
||||
$expectedSubRequest->headers->set('forwarded', ['for="127.0.0.1";host="localhost";proto=http']);
|
||||
$expectedSubRequest->server->set('HTTP_FORWARDED', 'for="127.0.0.1";host="localhost";proto=http');
|
||||
|
||||
$strategy = new InlineFragmentRenderer($this->getKernelExpectingRequest($expectedSubRequest));
|
||||
|
||||
$request = Request::create('/');
|
||||
$request->headers->set('Surrogate-Capability', 'abc="ESI/1.0"');
|
||||
$strategy->render('/', $request);
|
||||
}
|
||||
|
||||
public function testESIHeaderIsKeptInSubrequestWithTrustedHeaderDisabled()
|
||||
{
|
||||
Request::setTrustedProxies([], Request::HEADER_FORWARDED);
|
||||
|
||||
$this->testESIHeaderIsKeptInSubrequest();
|
||||
|
||||
Request::setTrustedProxies([], -1);
|
||||
}
|
||||
|
||||
public function testHeadersPossiblyResultingIn304AreNotAssignedToSubrequest()
|
||||
{
|
||||
$expectedSubRequest = Request::create('/');
|
||||
$expectedSubRequest->headers->set('x-forwarded-for', ['127.0.0.1']);
|
||||
$expectedSubRequest->headers->set('forwarded', ['for="127.0.0.1";host="localhost";proto=http']);
|
||||
$expectedSubRequest->server->set('HTTP_X_FORWARDED_FOR', '127.0.0.1');
|
||||
$expectedSubRequest->server->set('HTTP_FORWARDED', 'for="127.0.0.1";host="localhost";proto=http');
|
||||
|
||||
$strategy = new InlineFragmentRenderer($this->getKernelExpectingRequest($expectedSubRequest));
|
||||
$request = Request::create('/', 'GET', [], [], [], ['HTTP_IF_MODIFIED_SINCE' => 'Fri, 01 Jan 2016 00:00:00 GMT', 'HTTP_IF_NONE_MATCH' => '*']);
|
||||
$strategy->render('/', $request);
|
||||
}
|
||||
|
||||
public function testFirstTrustedProxyIsSetAsRemote()
|
||||
{
|
||||
Request::setTrustedProxies(['1.1.1.1'], -1);
|
||||
|
||||
$expectedSubRequest = Request::create('/');
|
||||
$expectedSubRequest->headers->set('Surrogate-Capability', 'abc="ESI/1.0"');
|
||||
$expectedSubRequest->server->set('REMOTE_ADDR', '127.0.0.1');
|
||||
$expectedSubRequest->headers->set('x-forwarded-for', ['127.0.0.1']);
|
||||
$expectedSubRequest->headers->set('forwarded', ['for="127.0.0.1";host="localhost";proto=http']);
|
||||
$expectedSubRequest->server->set('HTTP_X_FORWARDED_FOR', '127.0.0.1');
|
||||
$expectedSubRequest->server->set('HTTP_FORWARDED', 'for="127.0.0.1";host="localhost";proto=http');
|
||||
|
||||
$strategy = new InlineFragmentRenderer($this->getKernelExpectingRequest($expectedSubRequest));
|
||||
|
||||
$request = Request::create('/');
|
||||
$request->headers->set('Surrogate-Capability', 'abc="ESI/1.0"');
|
||||
$strategy->render('/', $request);
|
||||
|
||||
Request::setTrustedProxies([], -1);
|
||||
}
|
||||
|
||||
public function testIpAddressOfRangedTrustedProxyIsSetAsRemote()
|
||||
{
|
||||
$expectedSubRequest = Request::create('/');
|
||||
$expectedSubRequest->headers->set('Surrogate-Capability', 'abc="ESI/1.0"');
|
||||
$expectedSubRequest->server->set('REMOTE_ADDR', '127.0.0.1');
|
||||
$expectedSubRequest->headers->set('x-forwarded-for', ['127.0.0.1']);
|
||||
$expectedSubRequest->headers->set('forwarded', ['for="127.0.0.1";host="localhost";proto=http']);
|
||||
$expectedSubRequest->server->set('HTTP_X_FORWARDED_FOR', '127.0.0.1');
|
||||
$expectedSubRequest->server->set('HTTP_FORWARDED', 'for="127.0.0.1";host="localhost";proto=http');
|
||||
|
||||
Request::setTrustedProxies(['1.1.1.1/24'], -1);
|
||||
|
||||
$strategy = new InlineFragmentRenderer($this->getKernelExpectingRequest($expectedSubRequest));
|
||||
|
||||
$request = Request::create('/');
|
||||
$request->headers->set('Surrogate-Capability', 'abc="ESI/1.0"');
|
||||
$strategy->render('/', $request);
|
||||
|
||||
Request::setTrustedProxies([], -1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a Kernel expecting a request equals to $request
|
||||
* Allows delta in comparison in case REQUEST_TIME changed by 1 second.
|
||||
*/
|
||||
private function getKernelExpectingRequest(Request $request, $strict = false)
|
||||
{
|
||||
$kernel = $this->getMockBuilder('Symfony\Component\HttpKernel\HttpKernelInterface')->getMock();
|
||||
$kernel
|
||||
->expects($this->once())
|
||||
->method('handle')
|
||||
->with($this->equalTo($request, 1))
|
||||
->willReturn(new Response('foo'));
|
||||
|
||||
return $kernel;
|
||||
}
|
||||
}
|
||||
|
||||
class Bar
|
||||
{
|
||||
public $bar = 'bar';
|
||||
|
||||
public function getBar()
|
||||
{
|
||||
return $this->bar;
|
||||
}
|
||||
}
|
||||
94
vendor/symfony/http-kernel/Tests/Fragment/RoutableFragmentRendererTest.php
vendored
Normal file
94
vendor/symfony/http-kernel/Tests/Fragment/RoutableFragmentRendererTest.php
vendored
Normal file
@@ -0,0 +1,94 @@
|
||||
<?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 Symfony\Component\HttpKernel\Tests\Fragment;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpKernel\Controller\ControllerReference;
|
||||
|
||||
class RoutableFragmentRendererTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider getGenerateFragmentUriData
|
||||
*/
|
||||
public function testGenerateFragmentUri($uri, $controller)
|
||||
{
|
||||
$this->assertEquals($uri, $this->callGenerateFragmentUriMethod($controller, Request::create('/')));
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider getGenerateFragmentUriData
|
||||
*/
|
||||
public function testGenerateAbsoluteFragmentUri($uri, $controller)
|
||||
{
|
||||
$this->assertEquals('http://localhost'.$uri, $this->callGenerateFragmentUriMethod($controller, Request::create('/'), true));
|
||||
}
|
||||
|
||||
public function getGenerateFragmentUriData()
|
||||
{
|
||||
return [
|
||||
['/_fragment?_path=_format%3Dhtml%26_locale%3Den%26_controller%3Dcontroller', new ControllerReference('controller', [], [])],
|
||||
['/_fragment?_path=_format%3Dxml%26_locale%3Den%26_controller%3Dcontroller', new ControllerReference('controller', ['_format' => 'xml'], [])],
|
||||
['/_fragment?_path=foo%3Dfoo%26_format%3Djson%26_locale%3Den%26_controller%3Dcontroller', new ControllerReference('controller', ['foo' => 'foo', '_format' => 'json'], [])],
|
||||
['/_fragment?bar=bar&_path=foo%3Dfoo%26_format%3Dhtml%26_locale%3Den%26_controller%3Dcontroller', new ControllerReference('controller', ['foo' => 'foo'], ['bar' => 'bar'])],
|
||||
['/_fragment?foo=foo&_path=_format%3Dhtml%26_locale%3Den%26_controller%3Dcontroller', new ControllerReference('controller', [], ['foo' => 'foo'])],
|
||||
['/_fragment?_path=foo%255B0%255D%3Dfoo%26foo%255B1%255D%3Dbar%26_format%3Dhtml%26_locale%3Den%26_controller%3Dcontroller', new ControllerReference('controller', ['foo' => ['foo', 'bar']], [])],
|
||||
];
|
||||
}
|
||||
|
||||
public function testGenerateFragmentUriWithARequest()
|
||||
{
|
||||
$request = Request::create('/');
|
||||
$request->attributes->set('_format', 'json');
|
||||
$request->setLocale('fr');
|
||||
$controller = new ControllerReference('controller', [], []);
|
||||
|
||||
$this->assertEquals('/_fragment?_path=_format%3Djson%26_locale%3Dfr%26_controller%3Dcontroller', $this->callGenerateFragmentUriMethod($controller, $request));
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider getGenerateFragmentUriDataWithNonScalar
|
||||
*/
|
||||
public function testGenerateFragmentUriWithNonScalar($controller)
|
||||
{
|
||||
$this->expectException('LogicException');
|
||||
$this->callGenerateFragmentUriMethod($controller, Request::create('/'));
|
||||
}
|
||||
|
||||
public function getGenerateFragmentUriDataWithNonScalar()
|
||||
{
|
||||
return [
|
||||
[new ControllerReference('controller', ['foo' => new Foo(), 'bar' => 'bar'], [])],
|
||||
[new ControllerReference('controller', ['foo' => ['foo' => 'foo'], 'bar' => ['bar' => new Foo()]], [])],
|
||||
];
|
||||
}
|
||||
|
||||
private function callGenerateFragmentUriMethod(ControllerReference $reference, Request $request, $absolute = false)
|
||||
{
|
||||
$renderer = $this->getMockForAbstractClass('Symfony\Component\HttpKernel\Fragment\RoutableFragmentRenderer');
|
||||
$r = new \ReflectionObject($renderer);
|
||||
$m = $r->getMethod('generateFragmentUri');
|
||||
$m->setAccessible(true);
|
||||
|
||||
return $m->invoke($renderer, $reference, $request, $absolute);
|
||||
}
|
||||
}
|
||||
|
||||
class Foo
|
||||
{
|
||||
public $foo;
|
||||
|
||||
public function getFoo()
|
||||
{
|
||||
return $this->foo;
|
||||
}
|
||||
}
|
||||
93
vendor/symfony/http-kernel/Tests/Fragment/SsiFragmentRendererTest.php
vendored
Normal file
93
vendor/symfony/http-kernel/Tests/Fragment/SsiFragmentRendererTest.php
vendored
Normal file
@@ -0,0 +1,93 @@
|
||||
<?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 Symfony\Component\HttpKernel\Tests\Fragment;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpKernel\Controller\ControllerReference;
|
||||
use Symfony\Component\HttpKernel\Fragment\SsiFragmentRenderer;
|
||||
use Symfony\Component\HttpKernel\HttpCache\Ssi;
|
||||
use Symfony\Component\HttpKernel\UriSigner;
|
||||
|
||||
class SsiFragmentRendererTest extends TestCase
|
||||
{
|
||||
public function testRenderFallbackToInlineStrategyIfSsiNotSupported()
|
||||
{
|
||||
$strategy = new SsiFragmentRenderer(new Ssi(), $this->getInlineStrategy(true));
|
||||
$strategy->render('/', Request::create('/'));
|
||||
}
|
||||
|
||||
public function testRender()
|
||||
{
|
||||
$strategy = new SsiFragmentRenderer(new Ssi(), $this->getInlineStrategy());
|
||||
|
||||
$request = Request::create('/');
|
||||
$request->setLocale('fr');
|
||||
$request->headers->set('Surrogate-Capability', 'SSI/1.0');
|
||||
|
||||
$this->assertEquals('<!--#include virtual="/" -->', $strategy->render('/', $request)->getContent());
|
||||
$this->assertEquals('<!--#include virtual="/" -->', $strategy->render('/', $request, ['comment' => 'This is a comment'])->getContent(), 'Strategy options should not impact the ssi include tag');
|
||||
}
|
||||
|
||||
public function testRenderControllerReference()
|
||||
{
|
||||
$signer = new UriSigner('foo');
|
||||
$strategy = new SsiFragmentRenderer(new Ssi(), $this->getInlineStrategy(), $signer);
|
||||
|
||||
$request = Request::create('/');
|
||||
$request->setLocale('fr');
|
||||
$request->headers->set('Surrogate-Capability', 'SSI/1.0');
|
||||
|
||||
$reference = new ControllerReference('main_controller', [], []);
|
||||
$altReference = new ControllerReference('alt_controller', [], []);
|
||||
|
||||
$this->assertEquals(
|
||||
'<!--#include virtual="/_fragment?_hash=Jz1P8NErmhKTeI6onI1EdAXTB85359MY3RIk5mSJ60w%3D&_path=_format%3Dhtml%26_locale%3Dfr%26_controller%3Dmain_controller" -->',
|
||||
$strategy->render($reference, $request, ['alt' => $altReference])->getContent()
|
||||
);
|
||||
}
|
||||
|
||||
public function testRenderControllerReferenceWithoutSignerThrowsException()
|
||||
{
|
||||
$this->expectException('LogicException');
|
||||
$strategy = new SsiFragmentRenderer(new Ssi(), $this->getInlineStrategy());
|
||||
|
||||
$request = Request::create('/');
|
||||
$request->setLocale('fr');
|
||||
$request->headers->set('Surrogate-Capability', 'SSI/1.0');
|
||||
|
||||
$strategy->render(new ControllerReference('main_controller'), $request);
|
||||
}
|
||||
|
||||
public function testRenderAltControllerReferenceWithoutSignerThrowsException()
|
||||
{
|
||||
$this->expectException('LogicException');
|
||||
$strategy = new SsiFragmentRenderer(new Ssi(), $this->getInlineStrategy());
|
||||
|
||||
$request = Request::create('/');
|
||||
$request->setLocale('fr');
|
||||
$request->headers->set('Surrogate-Capability', 'SSI/1.0');
|
||||
|
||||
$strategy->render('/', $request, ['alt' => new ControllerReference('alt_controller')]);
|
||||
}
|
||||
|
||||
private function getInlineStrategy($called = false)
|
||||
{
|
||||
$inline = $this->getMockBuilder('Symfony\Component\HttpKernel\Fragment\InlineFragmentRenderer')->disableOriginalConstructor()->getMock();
|
||||
|
||||
if ($called) {
|
||||
$inline->expects($this->once())->method('render');
|
||||
}
|
||||
|
||||
return $inline;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user