|
14 | 14 | use PHPUnit\Framework\TestCase;
|
15 | 15 | use Symfony\Bridge\Twig\Extension\HttpKernelExtension;
|
16 | 16 | use Symfony\Bridge\Twig\Extension\HttpKernelRuntime;
|
| 17 | +use Symfony\Bundle\FrameworkBundle\Controller\TemplateController; |
17 | 18 | use Symfony\Component\HttpFoundation\Request;
|
18 | 19 | use Symfony\Component\HttpFoundation\RequestStack;
|
19 | 20 | use Symfony\Component\HttpFoundation\Response;
|
20 | 21 | use Symfony\Component\HttpKernel\Fragment\FragmentHandler;
|
21 | 22 | use Symfony\Component\HttpKernel\Fragment\FragmentRendererInterface;
|
| 23 | +use Symfony\Component\HttpKernel\Fragment\FragmentUriGenerator; |
| 24 | +use Symfony\Component\HttpKernel\UriSigner; |
22 | 25 | use Twig\Environment;
|
23 | 26 | use Twig\Loader\ArrayLoader;
|
24 | 27 | use Twig\RuntimeLoader\RuntimeLoaderInterface;
|
@@ -53,6 +56,37 @@ public function testUnknownFragmentRenderer()
|
53 | 56 | $renderer->render('/foo');
|
54 | 57 | }
|
55 | 58 |
|
| 59 | + public function testGenerateFragmentUri() |
| 60 | + { |
| 61 | + if (!class_exists(FragmentUriGenerator::class)) { |
| 62 | + $this->markTestSkipped('HttpKernel 5.3+ is required'); |
| 63 | + } |
| 64 | + |
| 65 | + $requestStack = new RequestStack(); |
| 66 | + $requestStack->push(Request::create('/')); |
| 67 | + |
| 68 | + $fragmentHandler = new FragmentHandler($requestStack); |
| 69 | + $fragmentUriGenerator = new FragmentUriGenerator('/_fragment', new UriSigner('s3cr3t'), $requestStack); |
| 70 | + |
| 71 | + $kernelRuntime = new HttpKernelRuntime($fragmentHandler, $fragmentUriGenerator); |
| 72 | + |
| 73 | + $loader = new ArrayLoader([ |
| 74 | + 'index' => sprintf(<<<TWIG |
| 75 | +{{ fragment_uri(controller("%s::templateAction", {template: "foo.html.twig"})) }} |
| 76 | +TWIG |
| 77 | + , TemplateController::class), ]); |
| 78 | + $twig = new Environment($loader, ['debug' => true, 'cache' => false]); |
| 79 | + $twig->addExtension(new HttpKernelExtension()); |
| 80 | + |
| 81 | + $loader = $this->createMock(RuntimeLoaderInterface::class); |
| 82 | + $loader->expects($this->any())->method('load')->willReturnMap([ |
| 83 | + [HttpKernelRuntime::class, $kernelRuntime], |
| 84 | + ]); |
| 85 | + $twig->addRuntimeLoader($loader); |
| 86 | + |
| 87 | + $this->assertSame('/_fragment?_hash=PP8%2FeEbn1pr27I9wmag%2FM6jYGVwUZ0l2h0vhh2OJ6CI%3D&_path=template%3Dfoo.html.twig%26_format%3Dhtml%26_locale%3Den%26_controller%3DSymfonyBundleFrameworkBundleControllerTemplateController%253A%253AtemplateAction', $twig->render('index')); |
| 88 | + } |
| 89 | + |
56 | 90 | protected function getFragmentHandler($return)
|
57 | 91 | {
|
58 | 92 | $strategy = $this->createMock(FragmentRendererInterface::class);
|
|
0 commit comments