*
* @group plugin_dwtimeline
* @group plugins
*/
class RenderPageTimelineTest extends DokuWikiTest
{
protected $pluginsEnabled = ['dwtimeline'];
public function setUp(): void
{
parent::setUp();
}
public function test_renders_title_and_milestones()
{
// Prepare a source page with H1 + H2 + content
$srcId = 'playground:source';
$wikitext = <<';
$html = p_render('xhtml', p_get_instructions($targetText), $info);
// Title must appear
$this->assertStringContainsString('Project Alpha', $html, 'Timeline title missing');
// Milestone titles must appear
$this->assertStringContainsString('Kickoff', $html);
$this->assertStringContainsString('Build', $html);
$this->assertStringContainsString('Launch', $html);
// Body content of first milestone should be included
$this->assertStringContainsString('Intro text.', $html);
// Body content of "Build" should include its H3 section text
$this->assertStringContainsString('Build details.', $html);
$this->assertStringContainsString('More details.', $html);
}
public function test_non_existing_page()
{
$srcId = 'no:such:page';
$html = p_render('xhtml', p_get_instructions(''), $info);
$this->assertStringContainsString('Page not found:', strip_tags($html), 'Missing not-found message key');
}
public function test_self_include_guard()
{
$srcId = 'playground:self';
$wikitext = "====== Self test ======\n\n";
saveWikiText($srcId, $wikitext, 'setup');
$html = p_wiki_xhtml($srcId);
$this->assertTrue(
str_contains(strip_tags($html), 'Source and destination are equal:'),
'Missing same-page guard'
);
}
}