'heading',
'data' => ['text' => 'Hello World', 'level' => 3]
],
[
'type' => 'paragraph',
'data' => ['text' => '
This is a paragraph.
']
]
];
$html = $renderer->render($content);
$this->assertStringContainsString('Hello World
', $html);
$this->assertStringContainsString('This is a paragraph.
', $html);
}
public function test_it_supports_theme_overrides(): void
{
// Setup theme blocks directory
$themesPath = base_path('themes');
if (! File::exists($themesPath)) {
File::makeDirectory($themesPath);
}
$themeBlocksPath = "{$themesPath}/test-theme/blocks";
if (! File::exists($themeBlocksPath)) {
File::makeDirectory($themeBlocksPath, 0755, true);
}
File::put("{$themeBlocksPath}/heading.blade.php", "{{ \$text }}
");
// Add theme to view paths
View::addNamespace('themes.test-theme', $themesPath . '/test-theme');
\App\Models\Setting::set('active_theme', 'test-theme', 'cms');
$renderer = new PageRenderer();
$content = [
['type' => 'heading', 'data' => ['text' => 'Theme Heading']]
];
$html = $renderer->render($content);
$this->assertStringContainsString("Theme Heading
", $html);
// Cleanup
File::deleteDirectory($themesPath . '/test-theme');
}
public function test_it_handles_missing_blocks_gracefully(): void
{
$renderer = new PageRenderer();
$content = [
['type' => 'unknown', 'data' => []]
];
$html = $renderer->render($content);
$this->assertStringContainsString('', $html);
}
public function test_it_maps_aliases(): void
{
$renderer = new PageRenderer();
$content = [
['type' => 'text', 'data' => ['text' => 'Paragraph text']],
['type' => 'header', 'data' => ['text' => 'Header text']]
];
$html = $renderer->render($content);
// Alias 'text' maps to 'paragraph' which might use Icehouse template or fallback
$this->assertStringContainsString('Paragraph text', $html);
// Alias 'header' maps to 'heading' which should render core
$this->assertStringContainsString('Header text
', $html);
}
}