Skip to content

Commit a7f499c

Browse files
committed
test: Add integration test for component render = false flag
1 parent 5b4cbb5 commit a7f499c

1 file changed

Lines changed: 98 additions & 0 deletions

File tree

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace Loki\Components\Test\Integration\Util\Controller;
4+
5+
use Laminas\Http\Header\GenericHeader;
6+
use Laminas\Http\Headers;
7+
use Loki\Components\Controller\Index\Html;
8+
use Magento\Framework\App\ObjectManager;
9+
use Magento\Framework\App\Request\Http as HttpRequest;
10+
use Magento\Framework\App\Response\Http as HttpResponse;
11+
use Magento\Framework\Controller\ResultInterface;
12+
use Magento\TestFramework\Fixture\AppArea;
13+
use Magento\TestFramework\Fixture\AppIsolation;
14+
use PHPUnit\Framework\Attributes\DataProvider;
15+
use PHPUnit\Framework\TestCase;
16+
17+
#[AppArea('frontend')]
18+
class RenderFlagTest extends TestCase
19+
{
20+
private const TARGET_BLOCK = 'loki-components.utils.local-messages';
21+
private const TARGET_MARKER = 'loki-components-messages';
22+
private const HANDLE = 'loki_messages';
23+
24+
#[DataProvider('renderFlagDataProvider')]
25+
#[AppIsolation(true)]
26+
public function testRenderFlagControlsRendering(array $update, bool $shouldRender): void
27+
{
28+
$this->prepareRequest([
29+
'targets' => [self::TARGET_BLOCK],
30+
'handles' => [self::HANDLE],
31+
'updates' => [$update],
32+
'request' => [],
33+
]);
34+
35+
$body = $this->executeController();
36+
37+
if ($shouldRender) {
38+
$this->assertStringContainsString(
39+
self::TARGET_MARKER,
40+
$body,
41+
'Expected the target component to be rendered'
42+
);
43+
44+
return;
45+
}
46+
47+
$this->assertStringNotContainsString(
48+
self::TARGET_MARKER,
49+
$body,
50+
'Expected the target component not to be rendered'
51+
);
52+
}
53+
54+
public static function renderFlagDataProvider(): array
55+
{
56+
return [
57+
'render flag set to 1 renders' => [
58+
['render' => 1],
59+
true,
60+
],
61+
'render flag omitted renders' => [
62+
[],
63+
true,
64+
],
65+
'render flag set to 0 does not render' => [
66+
['render' => 0],
67+
false,
68+
],
69+
'render flag set to false does not render' => [
70+
['render' => false],
71+
false,
72+
],
73+
];
74+
}
75+
76+
private function prepareRequest(array $payload): void
77+
{
78+
$headers = new Headers();
79+
$headers->addHeader(GenericHeader::fromString('X-Alpine-Request: 1'));
80+
81+
$request = ObjectManager::getInstance()->get(HttpRequest::class);
82+
$request->setHeaders($headers);
83+
$request->setContent(json_encode($payload));
84+
}
85+
86+
private function executeController(): string
87+
{
88+
$controller = ObjectManager::getInstance()->create(Html::class);
89+
90+
$result = $controller->execute();
91+
$this->assertInstanceOf(ResultInterface::class, $result);
92+
93+
$response = ObjectManager::getInstance()->create(HttpResponse::class);
94+
$result->renderResult($response);
95+
96+
return (string)$response->getBody();
97+
}
98+
}

0 commit comments

Comments
 (0)