2013-01-10 15:08:44 +00:00
< ? 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 .
*/
2013-12-30 07:13:22 +00:00
namespace Symfony\Component\HttpKernel\Tests\Fragment ;
2013-01-10 15:08:44 +00:00
use Symfony\Component\HttpKernel\Controller\ControllerReference ;
2013-01-31 09:37:27 +00:00
use Symfony\Component\HttpKernel\Fragment\EsiFragmentRenderer ;
2013-01-10 15:08:44 +00:00
use Symfony\Component\HttpKernel\HttpCache\Esi ;
use Symfony\Component\HttpFoundation\Request ;
2014-09-02 01:43:20 +01:00
use Symfony\Component\HttpKernel\UriSigner ;
2013-01-10 15:08:44 +00:00
2013-01-31 09:37:27 +00:00
class EsiFragmentRendererTest extends \PHPUnit_Framework_TestCase
2013-01-10 15:08:44 +00:00
{
2013-01-31 09:37:27 +00:00
public function testRenderFallbackToInlineStrategyIfEsiNotSupported ()
2013-01-10 15:08:44 +00:00
{
2013-01-31 09:37:27 +00:00
$strategy = new EsiFragmentRenderer ( new Esi (), $this -> getInlineStrategy ( true ));
2013-01-10 15:08:44 +00:00
$strategy -> render ( '/' , Request :: create ( '/' ));
}
public function testRender ()
{
2013-01-31 09:37:27 +00:00
$strategy = new EsiFragmentRenderer ( new Esi (), $this -> getInlineStrategy ());
2013-01-10 15:08:44 +00:00
$request = Request :: create ( '/' );
2013-07-13 11:18:20 +01:00
$request -> setLocale ( 'fr' );
2013-01-10 15:08:44 +00:00
$request -> headers -> set ( 'Surrogate-Capability' , 'ESI/1.0' );
2013-01-20 09:04:47 +00:00
$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 , array ( 'comment' => 'This is a comment' )) -> getContent ());
$this -> assertEquals ( '<esi:include src="/" alt="foo" />' , $strategy -> render ( '/' , $request , array ( 'alt' => 'foo' )) -> getContent ());
2014-09-02 01:43:20 +01:00
}
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' , array (), array ());
$altReference = new ControllerReference ( 'alt_controller' , array (), array ());
$this -> assertEquals (
2014-09-03 09:50:47 +01:00
'<esi:include src="/_fragment?_path=_format%3Dhtml%26_locale%3Dfr%26_controller%3Dmain_controller&_hash=Jz1P8NErmhKTeI6onI1EdAXTB85359MY3RIk5mSJ60w%3D" alt="/_fragment?_path=_format%3Dhtml%26_locale%3Dfr%26_controller%3Dalt_controller&_hash=iPJEdRoUpGrM1ztqByiorpfMPtiW%2FOWwdH1DBUXHhEc%3D" />' ,
2014-09-02 01:43:20 +01:00
$strategy -> render ( $reference , $request , array ( 'alt' => $altReference )) -> getContent ()
);
}
/**
* @ expectedException \LogicException
*/
public function testRenderControllerReferenceWithoutSignerThrowsException ()
{
$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 );
}
/**
* @ expectedException \LogicException
*/
public function testRenderAltControllerReferenceWithoutSignerThrowsException ()
{
$strategy = new EsiFragmentRenderer ( new Esi (), $this -> getInlineStrategy ());
$request = Request :: create ( '/' );
$request -> setLocale ( 'fr' );
$request -> headers -> set ( 'Surrogate-Capability' , 'ESI/1.0' );
$strategy -> render ( '/' , $request , array ( 'alt' => new ControllerReference ( 'alt_controller' )));
2013-01-10 15:08:44 +00:00
}
2013-01-31 09:37:27 +00:00
private function getInlineStrategy ( $called = false )
2013-01-10 15:08:44 +00:00
{
2013-01-31 09:37:27 +00:00
$inline = $this -> getMockBuilder ( 'Symfony\Component\HttpKernel\Fragment\InlineFragmentRenderer' ) -> disableOriginalConstructor () -> getMock ();
2013-01-10 15:08:44 +00:00
if ( $called ) {
2013-01-31 09:37:27 +00:00
$inline -> expects ( $this -> once ()) -> method ( 'render' );
2013-01-10 15:08:44 +00:00
}
2013-01-31 09:37:27 +00:00
return $inline ;
2013-01-10 15:08:44 +00:00
}
}