You've already forked wp-bootstrap
146 lines
4.6 KiB
PHP
146 lines
4.6 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
declare(strict_types=1);
|
||
|
|
|
||
|
|
namespace WPBootstrap\Tests\Unit\Template;
|
||
|
|
|
||
|
|
use PHPUnit\Framework\TestCase;
|
||
|
|
use Brain\Monkey;
|
||
|
|
use Brain\Monkey\Functions;
|
||
|
|
use WPBootstrap\Template\TemplateController;
|
||
|
|
use ReflectionMethod;
|
||
|
|
|
||
|
|
class TemplateControllerTest extends TestCase
|
||
|
|
{
|
||
|
|
private TemplateController $controller;
|
||
|
|
private ReflectionMethod $resolveTemplate;
|
||
|
|
|
||
|
|
protected function setUp(): void
|
||
|
|
{
|
||
|
|
parent::setUp();
|
||
|
|
Monkey\setUp();
|
||
|
|
|
||
|
|
// TemplateController constructor: new ContextBuilder() + add_action().
|
||
|
|
// ContextBuilder constructor: new NavWalker() (no WP calls).
|
||
|
|
Functions\when('is_admin')->justReturn(true);
|
||
|
|
Functions\when('wp_doing_ajax')->justReturn(false);
|
||
|
|
Functions\when('add_action')->justReturn(true);
|
||
|
|
|
||
|
|
// Default: all WP conditionals return false.
|
||
|
|
Functions\when('is_404')->justReturn(false);
|
||
|
|
Functions\when('is_search')->justReturn(false);
|
||
|
|
Functions\when('is_singular')->justReturn(false);
|
||
|
|
Functions\when('is_page')->justReturn(false);
|
||
|
|
Functions\when('is_archive')->justReturn(false);
|
||
|
|
Functions\when('is_home')->justReturn(false);
|
||
|
|
Functions\when('is_category')->justReturn(false);
|
||
|
|
Functions\when('get_page_template_slug')->justReturn('');
|
||
|
|
|
||
|
|
$this->controller = new TemplateController();
|
||
|
|
|
||
|
|
$this->resolveTemplate = new ReflectionMethod($this->controller, 'resolveTemplate');
|
||
|
|
$this->resolveTemplate->setAccessible(true);
|
||
|
|
}
|
||
|
|
|
||
|
|
protected function tearDown(): void
|
||
|
|
{
|
||
|
|
Monkey\tearDown();
|
||
|
|
parent::tearDown();
|
||
|
|
}
|
||
|
|
|
||
|
|
private function resolve(): ?string
|
||
|
|
{
|
||
|
|
return $this->resolveTemplate->invoke($this->controller);
|
||
|
|
}
|
||
|
|
|
||
|
|
// ── Template resolution ─────────────────────────────────────
|
||
|
|
|
||
|
|
public function testResolveTemplate404(): void
|
||
|
|
{
|
||
|
|
Functions\when('is_404')->justReturn(true);
|
||
|
|
|
||
|
|
$this->assertSame('pages/404.html.twig', $this->resolve());
|
||
|
|
}
|
||
|
|
|
||
|
|
public function testResolveTemplateSearch(): void
|
||
|
|
{
|
||
|
|
Functions\when('is_search')->justReturn(true);
|
||
|
|
|
||
|
|
$this->assertSame('pages/search.html.twig', $this->resolve());
|
||
|
|
}
|
||
|
|
|
||
|
|
public function testResolveTemplateSinglePostDefault(): void
|
||
|
|
{
|
||
|
|
Functions\when('is_singular')->alias(fn($type = '') => $type === 'post');
|
||
|
|
|
||
|
|
$this->assertSame('pages/single-sidebar.html.twig', $this->resolve());
|
||
|
|
}
|
||
|
|
|
||
|
|
public function testResolveTemplateSinglePostFullWidth(): void
|
||
|
|
{
|
||
|
|
Functions\when('is_singular')->alias(fn($type = '') => $type === 'post');
|
||
|
|
Functions\when('get_page_template_slug')->justReturn('page-full-width');
|
||
|
|
|
||
|
|
$this->assertSame('pages/single.html.twig', $this->resolve());
|
||
|
|
}
|
||
|
|
|
||
|
|
public function testResolveTemplatePageDefault(): void
|
||
|
|
{
|
||
|
|
Functions\when('is_page')->justReturn(true);
|
||
|
|
|
||
|
|
$this->assertSame('pages/page.html.twig', $this->resolve());
|
||
|
|
}
|
||
|
|
|
||
|
|
public function testResolveTemplatePageLanding(): void
|
||
|
|
{
|
||
|
|
Functions\when('is_page')->justReturn(true);
|
||
|
|
Functions\when('get_page_template_slug')->justReturn('page-landing');
|
||
|
|
|
||
|
|
$this->assertSame('pages/landing.html.twig', $this->resolve());
|
||
|
|
}
|
||
|
|
|
||
|
|
public function testResolveTemplatePageFullWidth(): void
|
||
|
|
{
|
||
|
|
Functions\when('is_page')->justReturn(true);
|
||
|
|
Functions\when('get_page_template_slug')->justReturn('page-full-width');
|
||
|
|
|
||
|
|
$this->assertSame('pages/full-width.html.twig', $this->resolve());
|
||
|
|
}
|
||
|
|
|
||
|
|
public function testResolveTemplatePageHero(): void
|
||
|
|
{
|
||
|
|
Functions\when('is_page')->justReturn(true);
|
||
|
|
Functions\when('get_page_template_slug')->justReturn('page-hero');
|
||
|
|
|
||
|
|
$this->assertSame('pages/hero.html.twig', $this->resolve());
|
||
|
|
}
|
||
|
|
|
||
|
|
public function testResolveTemplatePageSidebar(): void
|
||
|
|
{
|
||
|
|
Functions\when('is_page')->justReturn(true);
|
||
|
|
Functions\when('get_page_template_slug')->justReturn('page-sidebar');
|
||
|
|
|
||
|
|
$this->assertSame('pages/page-sidebar.html.twig', $this->resolve());
|
||
|
|
}
|
||
|
|
|
||
|
|
public function testResolveTemplateArchive(): void
|
||
|
|
{
|
||
|
|
Functions\when('is_archive')->justReturn(true);
|
||
|
|
|
||
|
|
$this->assertSame('pages/archive.html.twig', $this->resolve());
|
||
|
|
}
|
||
|
|
|
||
|
|
public function testResolveTemplateHome(): void
|
||
|
|
{
|
||
|
|
Functions\when('is_home')->justReturn(true);
|
||
|
|
|
||
|
|
$this->assertSame('pages/index.html.twig', $this->resolve());
|
||
|
|
}
|
||
|
|
|
||
|
|
public function testResolveTemplateFallback(): void
|
||
|
|
{
|
||
|
|
// All conditionals already return false in setUp.
|
||
|
|
$this->assertSame('pages/index.html.twig', $this->resolve());
|
||
|
|
}
|
||
|
|
}
|