Skip to content

Commit f6839a9

Browse files
committed
test: isolate functionality for #288
1 parent f9b1e9f commit f6839a9

1 file changed

Lines changed: 55 additions & 0 deletions

File tree

test/phpunit/DefaultRouterTest.php

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,19 @@
11
<?php
22
namespace GT\WebEngine\Test;
33

4+
use GT\Dom\HTMLDocument;
5+
use GT\DomTemplate\ComponentExpander;
6+
use GT\DomTemplate\PartialContent;
7+
use GT\DomTemplate\PartialContentDirectoryNotFoundException;
8+
use GT\DomTemplate\PartialExpander;
49
use Gt\Http\Request;
10+
use Gt\Http\Stream;
511
use Gt\Http\Uri;
12+
use GT\WebEngine\Logic\HTMLDocumentProcessor;
613
use GT\Routing\RouterConfig;
714
use GT\WebEngine\DefaultRouter;
815
use Gt\ServiceContainer\Container;
16+
use GT\WebEngine\View\HTMLView;
917
use PHPUnit\Framework\TestCase;
1018

1119
require_once dirname(__DIR__, 2) . "/router.default.php";
@@ -61,6 +69,53 @@ public function testRoute_pageRequest_includesHeadersAndFootersInNestedOrder():v
6169
);
6270
}
6371

72+
public function testRoute_pageRequest_withHeadersFootersAndPartials_throwsLogicException():void {
73+
class_exists(HTMLDocument::class);
74+
class_exists(ComponentExpander::class);
75+
class_exists(PartialContent::class);
76+
class_exists(PartialContentDirectoryNotFoundException::class);
77+
class_exists(PartialExpander::class);
78+
79+
file_put_contents($this->tmpDir . "/page/_header.html", "<html><body><header>site</header>");
80+
file_put_contents($this->tmpDir . "/page/admin/_header.html", "<nav>admin</nav>");
81+
file_put_contents($this->tmpDir . "/page/admin/users.html", "<!-- extends=layout --><main>users</main>");
82+
file_put_contents($this->tmpDir . "/page/admin/_footer.html", "<footer>admin</footer>");
83+
file_put_contents($this->tmpDir . "/page/_footer.html", "<footer>site</footer></body></html>");
84+
mkdir($this->tmpDir . "/page/_partial", recursive: true);
85+
file_put_contents(
86+
$this->tmpDir . "/page/_partial/layout.html",
87+
"<!doctype html><html><body><section data-partial></section></body></html>",
88+
);
89+
90+
chdir($this->tmpDir);
91+
92+
$request = self::createMock(Request::class);
93+
$request->method("getMethod")->willReturn("GET");
94+
$request->method("getHeaderLine")
95+
->with("accept")
96+
->willReturn("text/html");
97+
$request->method("getUri")->willReturn(new Uri("https://example.test/admin/users"));
98+
99+
$sut = new DefaultRouter(new RouterConfig(307, "text/html"));
100+
$container = new Container();
101+
$container->set($request);
102+
$sut->setContainer($container);
103+
$sut->route($request);
104+
105+
$view = new HTMLView(new Stream());
106+
foreach($sut->getViewAssembly() as $viewFile) {
107+
$view->addViewFile($viewFile);
108+
}
109+
$viewModel = $view->createViewModel();
110+
111+
$processor = new HTMLDocumentProcessor("components", "page/_partial");
112+
$this->expectException(\LogicException::class);
113+
$this->expectExceptionMessage(
114+
"Header/footer view files cannot be combined with partial views."
115+
);
116+
$processor->processPartialContent($viewModel);
117+
}
118+
64119
private function removeDirectory(string $dir):void {
65120
if(!is_dir($dir)) {
66121
return;

0 commit comments

Comments
 (0)