Skip to content

Commit dc40058

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

File tree

4 files changed

+175
-16
lines changed

4 files changed

+175
-16
lines changed

tests/bundle/Core/Fragment/DirectFragmentRendererTest.php

Lines changed: 40 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,24 @@ public function testControllerResponse(): void
8686
$this->assertSame('response_body', $response->getContent());
8787
}
8888

89-
public function testControllerViewResponse(): void
89+
/**
90+
* @return iterable<array{0: array<string, string>|null}>
91+
*/
92+
public function controllerViewResponseDataProvider(): iterable
93+
{
94+
yield [[
95+
'my_param1' => 'custom_data',
96+
'my_param2' => 'foobar',
97+
]];
98+
99+
yield [null];
100+
}
101+
102+
/**
103+
* @param array<string, string>|null $params
104+
* @dataProvider controllerViewResponseDataProvider
105+
*/
106+
public function testControllerViewResponse(?array $params = null): void
90107
{
91108
$contentView = new ContentView();
92109
$contentView->setTemplateIdentifier('template_identifier');
@@ -105,16 +122,34 @@ public function testControllerViewResponse(): void
105122
->expects($this->once())
106123
->method('render')
107124
->with($contentView)
108-
->willReturn('rendered_' . $contentView->getTemplateIdentifier());
125+
->willReturnCallback(
126+
static function (ContentView $cV) use ($params): string {
127+
if ($params !== null) {
128+
foreach ($params as $key => $value) {
129+
self::assertArrayHasKey($key, $cV->getParameters());
130+
}
131+
}
132+
133+
return 'rendered_' . $cV->getTemplateIdentifier();
134+
}
135+
);
109136

110137
$directFragmentRenderer = $this->getDirectFragmentRenderer(
111138
$controllerResolverMock,
112139
$templateRendererMock
113140
);
114-
$response = $directFragmentRenderer->render('', new Request(), []);
141+
$response = $directFragmentRenderer->render(
142+
'',
143+
new Request(),
144+
[
145+
'viewType' => 'line',
146+
'method' => 'direct',
147+
'params' => $params,
148+
]
149+
);
115150

116-
$this->assertInstanceOf(Response::class, $response);
117-
$this->assertSame('rendered_template_identifier', $response->getContent());
151+
self::assertInstanceOf(Response::class, $response);
152+
self::assertSame('rendered_template_identifier', $response->getContent());
118153
}
119154

120155
public function testControllerStringResponse(): void

tests/bundle/Core/Fragment/InlineFragmentRendererTest.php

Lines changed: 43 additions & 11 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,24 @@ class InlineFragmentRendererTest extends DecoratedFragmentRendererTest
2223
{
2324
use SerializerTrait;
2425

25-
public function testRendererControllerReference()
26+
/**
27+
* @return iterable<array{0: array<string, string>|null}>
28+
*/
29+
public function rendererControllerReferenceDataProvider(): iterable
30+
{
31+
yield [[
32+
'my_param1' => 'custom_data',
33+
'my_param2' => 'foobar',
34+
]];
35+
36+
yield [null];
37+
}
38+
39+
/**
40+
* @param array<string, string>|null $params
41+
* @dataProvider rendererControllerReferenceDataProvider
42+
*/
43+
public function testRendererControllerReference(?array $params = null)
2644
{
2745
$reference = new ControllerReference('FooBundle:bar:baz');
2846
$matcher = new SiteAccess\Matcher\HostElement(1);
@@ -36,31 +54,45 @@ public function testRendererControllerReference()
3654
$request->attributes->set('semanticPathinfo', '/foo/bar');
3755
$request->attributes->set('viewParametersString', '/(foo)/bar');
3856
$options = ['foo' => 'bar'];
57+
3958
$expectedReturn = '/_fragment?foo=bar';
4059
$this->innerRenderer
4160
->expects($this->once())
4261
->method('render')
4362
->with($reference, $request, $options)
44-
->will($this->returnValue($expectedReturn));
63+
->willReturnCallback(
64+
static function (ControllerReference $url, Request $request, array $callBackOptions) use ($expectedReturn, $params, $options): Response {
65+
if ($params !== null) {
66+
self::assertEquals($params, $url->attributes['params']);
67+
}
68+
self::assertEquals($options, $callBackOptions);
69+
70+
return new Response($expectedReturn);
71+
}
72+
);
73+
74+
if ($params !== null) {
75+
$options['params'] = $params;
76+
}
4577

4678
$renderer = $this->getRenderer();
47-
$this->assertSame($expectedReturn, $renderer->render($reference, $request, $options));
48-
$this->assertTrue(isset($reference->attributes['serialized_siteaccess']));
79+
self::assertEquals(new Response($expectedReturn), $renderer->render($reference, $request, $options));
80+
self::assertTrue(isset($reference->attributes['serialized_siteaccess']));
4981
$serializedSiteAccess = json_encode($siteAccess);
50-
$this->assertSame($serializedSiteAccess, $reference->attributes['serialized_siteaccess']);
51-
$this->assertTrue(isset($reference->attributes['serialized_siteaccess_matcher']));
52-
$this->assertSame(
82+
self::assertSame($serializedSiteAccess, $reference->attributes['serialized_siteaccess']);
83+
self::assertTrue(isset($reference->attributes['serialized_siteaccess_matcher']));
84+
self::assertSame(
5385
$this->getSerializer()->serialize(
5486
$siteAccess->matcher,
5587
'json',
5688
[AbstractNormalizer::IGNORED_ATTRIBUTES => ['request', 'container', 'matcherBuilder']]
5789
),
5890
$reference->attributes['serialized_siteaccess_matcher']
5991
);
60-
$this->assertTrue(isset($reference->attributes['semanticPathinfo']));
61-
$this->assertSame('/foo/bar', $reference->attributes['semanticPathinfo']);
62-
$this->assertTrue(isset($reference->attributes['viewParametersString']));
63-
$this->assertSame('/(foo)/bar', $reference->attributes['viewParametersString']);
92+
self::assertTrue(isset($reference->attributes['semanticPathinfo']));
93+
self::assertSame('/foo/bar', $reference->attributes['semanticPathinfo']);
94+
self::assertTrue(isset($reference->attributes['viewParametersString']));
95+
self::assertSame('/(foo)/bar', $reference->attributes['viewParametersString']);
6496
}
6597

6698
public function testRendererControllerReferenceWithCompoundMatcher(): ControllerReference

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)