Skip to content

Commit cf1602a

Browse files
committed
Added tests for IBX-3035
1 parent c12ad87 commit cf1602a

File tree

4 files changed

+176
-3
lines changed

4 files changed

+176
-3
lines changed

tests/bundle/Core/Fragment/DirectFragmentRendererTest.php

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,59 @@ public function testControllerViewResponse(): void
117117
$this->assertSame('rendered_template_identifier', $response->getContent());
118118
}
119119

120+
public function testControllerViewResponseWithParameters(): void
121+
{
122+
$contentView = new ContentView();
123+
$contentView->setTemplateIdentifier('template_identifier');
124+
125+
$controllerResolverMock = $this->getControllerResolverInterfaceMock();
126+
$controllerResolverMock
127+
->method('getController')
128+
->willReturn(static function (...$args) use ($contentView) {
129+
$contentView->setParameters($args);
130+
131+
return $contentView;
132+
});
133+
134+
$params = [
135+
'my_param1' => 'custom_data',
136+
'my_param2' => 'foobar',
137+
];
138+
139+
$templateRendererMock = $this->getTemplateRendererMock();
140+
$templateRendererMock
141+
->expects($this->once())
142+
->method('render')
143+
->with($contentView)
144+
->willReturnCallback(
145+
static function (ContentView $cV) use ($params): string {
146+
foreach ($params as $key => $value) {
147+
self::assertArrayHasKey($key, $cV->getParameters());
148+
}
149+
150+
return 'rendered_' . $cV->getTemplateIdentifier();
151+
}
152+
);
153+
154+
$directFragmentRenderer = $this->getDirectFragmentRenderer(
155+
$controllerResolverMock,
156+
$templateRendererMock
157+
);
158+
159+
$response = $directFragmentRenderer->render(
160+
'',
161+
new Request(),
162+
[
163+
'viewType' => 'line',
164+
'method' => 'direct',
165+
'params' => $params,
166+
]
167+
);
168+
169+
$this->assertInstanceOf(Response::class, $response);
170+
$this->assertSame('rendered_template_identifier', $response->getContent());
171+
}
172+
120173
public function testControllerStringResponse(): void
121174
{
122175
$controllerResolver = $this->getControllerResolverInterfaceMock();

tests/bundle/Core/Fragment/InlineFragmentRendererTest.php

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use Ibexa\Core\MVC\Symfony\Component\Serializer\SerializerTrait;
1212
use Ibexa\Core\MVC\Symfony\SiteAccess;
1313
use Symfony\Component\HttpFoundation\Request;
14+
use Symfony\Component\HttpFoundation\Response;
1415
use Symfony\Component\HttpKernel\Controller\ControllerReference;
1516
use Symfony\Component\HttpKernel\Fragment\FragmentRendererInterface;
1617
use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
@@ -22,7 +23,20 @@ class InlineFragmentRendererTest extends DecoratedFragmentRendererTest
2223
{
2324
use SerializerTrait;
2425

25-
public function testRendererControllerReference()
26+
public function rendererControllerReferenceDataProvider(): iterable
27+
{
28+
yield [[
29+
'my_param1' => 'custom_data',
30+
'my_param2' => 'foobar',
31+
]];
32+
33+
yield [null];
34+
}
35+
36+
/**
37+
* @dataProvider rendererControllerReferenceDataProvider
38+
*/
39+
public function testRendererControllerReference(?array $params = null)
2640
{
2741
$reference = new ControllerReference('FooBundle:bar:baz');
2842
$matcher = new SiteAccess\Matcher\HostElement(1);
@@ -36,15 +50,29 @@ public function testRendererControllerReference()
3650
$request->attributes->set('semanticPathinfo', '/foo/bar');
3751
$request->attributes->set('viewParametersString', '/(foo)/bar');
3852
$options = ['foo' => 'bar'];
53+
3954
$expectedReturn = '/_fragment?foo=bar';
4055
$this->innerRenderer
4156
->expects($this->once())
4257
->method('render')
4358
->with($reference, $request, $options)
44-
->will($this->returnValue($expectedReturn));
59+
->willReturnCallback(
60+
static function (ControllerReference $url, Request $request, array $callBackOptions) use ($expectedReturn, $params, $options): Response {
61+
if ($params !== null) {
62+
self::assertEquals($params, $url->attributes['params']);
63+
}
64+
self::assertEquals($options, $callBackOptions);
65+
66+
return new Response($expectedReturn);
67+
}
68+
);
69+
70+
if ($params !== null) {
71+
$options['params'] = $params;
72+
}
4573

4674
$renderer = $this->getRenderer();
47-
$this->assertSame($expectedReturn, $renderer->render($reference, $request, $options));
75+
$this->assertEquals(new Response($expectedReturn), $renderer->render($reference, $request, $options));
4876
$this->assertTrue(isset($reference->attributes['serialized_siteaccess']));
4977
$serializedSiteAccess = json_encode($siteAccess);
5078
$this->assertSame($serializedSiteAccess, $reference->attributes['serialized_siteaccess']);

tests/lib/MVC/Symfony/Templating/RenderContentStrategyTest.php

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,51 @@ public function testMultipleFragmentRenderers(): void
9393
);
9494
}
9595

96+
public function testForwardOptionsToFragmentRenderer(): void
97+
{
98+
$params = [
99+
'param1' => 'value1',
100+
'param2' => 'value2',
101+
];
102+
103+
$fragmentRendererMock = $this->createMock(FragmentRendererInterface::class);
104+
$fragmentRendererMock
105+
->method('getName')
106+
->willReturn('fragment_render_mock');
107+
$fragmentRendererMock->expects($this->once())
108+
->method('render')
109+
->with(
110+
$this->anything(),
111+
$this->anything(),
112+
$this->equalTo([
113+
'params' => $params,
114+
])
115+
)
116+
->willReturn(new Response('fragment_render_mock_rendered'));
117+
118+
$renderContentStrategy = $this->createRenderStrategy(
119+
RenderContentStrategy::class,
120+
[
121+
$fragmentRendererMock,
122+
],
123+
);
124+
125+
$contentMock = $this->createMock(Content::class);
126+
$this->assertTrue($renderContentStrategy->supports($contentMock));
127+
128+
$this->assertSame(
129+
'fragment_render_mock_rendered',
130+
$renderContentStrategy->render($contentMock, new RenderOptions([
131+
'method' => 'fragment_render_mock',
132+
'viewType' => 'awesome',
133+
'params' => [
134+
'param1' => 'value1',
135+
'param2' => 'value2',
136+
],
137+
]))
138+
);
139+
}
140+
96141
public function testDuplicatedFragmentRenderers(): void
97142
{
98143
$renderContentStrategy = $this->createRenderStrategy(

tests/lib/MVC/Symfony/Templating/RenderLocationStrategyTest.php

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,11 @@
99
namespace Ibexa\Tests\Core\MVC\Symfony\Templating;
1010

1111
use Ibexa\Contracts\Core\Repository\Exceptions\InvalidArgumentException;
12+
use Ibexa\Contracts\Core\Repository\Values\Content\Content;
1213
use Ibexa\Contracts\Core\Repository\Values\Content\Location;
1314
use Ibexa\Contracts\Core\Repository\Values\ValueObject;
1415
use Ibexa\Core\MVC\Symfony\SiteAccess;
16+
use Ibexa\Core\MVC\Symfony\Templating\RenderContentStrategy;
1517
use Ibexa\Core\MVC\Symfony\Templating\RenderLocationStrategy;
1618
use Ibexa\Core\MVC\Symfony\Templating\RenderOptions;
1719
use Symfony\Component\HttpFoundation\Request;
@@ -93,6 +95,51 @@ public function testMultipleFragmentRenderers(): void
9395
);
9496
}
9597

98+
public function testForwardOptionsToFragmentRenderer(): void
99+
{
100+
$params = [
101+
'param1' => 'value1',
102+
'param2' => 'value2',
103+
];
104+
105+
$fragmentRendererMock = $this->createMock(FragmentRendererInterface::class);
106+
$fragmentRendererMock
107+
->method('getName')
108+
->willReturn('fragment_render_mock');
109+
$fragmentRendererMock->expects($this->once())
110+
->method('render')
111+
->with(
112+
$this->anything(),
113+
$this->anything(),
114+
$this->equalTo([
115+
'params' => $params,
116+
])
117+
)
118+
->willReturn(new Response('fragment_render_mock_rendered'));
119+
120+
$renderContentStrategy = $this->createRenderStrategy(
121+
RenderContentStrategy::class,
122+
[
123+
$fragmentRendererMock,
124+
],
125+
);
126+
127+
$contentMock = $this->createMock(Content::class);
128+
$this->assertTrue($renderContentStrategy->supports($contentMock));
129+
130+
$this->assertSame(
131+
'fragment_render_mock_rendered',
132+
$renderContentStrategy->render($contentMock, new RenderOptions([
133+
'method' => 'fragment_render_mock',
134+
'viewType' => 'awesome',
135+
'params' => [
136+
'param1' => 'value1',
137+
'param2' => 'value2',
138+
],
139+
]))
140+
);
141+
}
142+
96143
public function testExpectedMethodRenderRequestFormat(): void
97144
{
98145
$request = new Request();

0 commit comments

Comments
 (0)