From c9d6e3eef92aa45460a8b382a0d8d3613e4c158b Mon Sep 17 00:00:00 2001
From: Bart Jaskulski <bjaskulski@protonmail.com>
Date: Thu, 21 Sep 2023 23:24:29 +0200
Subject: [PATCH] tests: namespace tests, add new tests

Signed-off-by: Bart Jaskulski <bjaskulski@protonmail.com>
---
 composer.json                              |  3 +++
 tests/Fixtures/child-template.php          |  1 +
 tests/Fixtures/root-template.php           |  1 +
 tests/{stub => Fixtures}/template/file.php |  0
 tests/Renderer/TestSimplePhpRenderer.php   | 19 ++++++++++++++++++-
 tests/Resolver/TestChainResolver.php       |  6 ++++--
 tests/Resolver/TestDirResolver.php         |  1 +
 tests/Resolver/TestWpThemeResolver.php     |  1 +
 tests/TestPluginViewBuilder.php            |  7 ++++---
 9 files changed, 33 insertions(+), 6 deletions(-)
 create mode 100644 tests/Fixtures/child-template.php
 create mode 100644 tests/Fixtures/root-template.php
 rename tests/{stub => Fixtures}/template/file.php (100%)

diff --git a/composer.json b/composer.json
index 79afa9c..e3376b9 100644
--- a/composer.json
+++ b/composer.json
@@ -19,6 +19,9 @@
     "autoload": {
         "psr-4": {"WPDesk\\View\\": "src/"}
     },
+    "autoload-dev": {
+        "psr-4": {"WPDesk\\View\\Tests\\": "tests/"}
+    },
     "scripts": {
         "test": "phpunit",
         "phpcs": "phpcs"
diff --git a/tests/Fixtures/child-template.php b/tests/Fixtures/child-template.php
new file mode 100644
index 0000000..980a0d5
--- /dev/null
+++ b/tests/Fixtures/child-template.php
@@ -0,0 +1 @@
+Hello World!
diff --git a/tests/Fixtures/root-template.php b/tests/Fixtures/root-template.php
new file mode 100644
index 0000000..b4e0f03
--- /dev/null
+++ b/tests/Fixtures/root-template.php
@@ -0,0 +1 @@
+This is a content of nested template: <?php $this->output_render('child-template'); ?>
diff --git a/tests/stub/template/file.php b/tests/Fixtures/template/file.php
similarity index 100%
rename from tests/stub/template/file.php
rename to tests/Fixtures/template/file.php
diff --git a/tests/Renderer/TestSimplePhpRenderer.php b/tests/Renderer/TestSimplePhpRenderer.php
index bb3f175..b647bea 100644
--- a/tests/Renderer/TestSimplePhpRenderer.php
+++ b/tests/Renderer/TestSimplePhpRenderer.php
@@ -1,6 +1,9 @@
 <?php
 
+namespace WPDesk\View\Tests;
+
 use WPDesk\View\Resolver\ChainResolver;
+use WPDesk\View\Resolver\DirResolver;
 use WPDesk\View\Resolver\Exception\CanNotResolve;
 use WPDesk\View\Resolver\NullResolver;
 
@@ -12,9 +15,23 @@ class TestSimplePhpRenderer extends \PHPUnit\Framework\TestCase
 
     const TEMPLATE_DIR = '/templates';
 
+    public function testThrowsExceptionWhenCannotFindTemplate()
+    {
+      $this->expectException(CanNotResolve::class);
+
+      $renderer = new \WPDesk\View\Renderer\SimplePhpRenderer(new DirResolver(''));
+      $renderer->render('anything');
+    }
+
     public function testRenderWithDirResolver()
     {
-        $renderer = new \WPDesk\View\Renderer\SimplePhpRenderer(new \WPDesk\View\Resolver\DirResolver(__DIR__ . self::TEMPLATE_DIR));
+        $renderer = new \WPDesk\View\Renderer\SimplePhpRenderer(new DirResolver(__DIR__ . self::TEMPLATE_DIR));
         $this->assertEquals(self::TEXT_IN_TEMPLATE, $renderer->render(self::TEMPLATE_NAME));
     }
+
+    public function testCanRenderNestedTemplates(): void
+    {
+        $renderer = new \WPDesk\View\Renderer\SimplePhpRenderer(new DirResolver(__DIR__ . '/../Fixtures'));
+        $this->assertStringContainsString('This is a content of nested template: Hello World!', $renderer->render('root-template'));
+    }
 }
\ No newline at end of file
diff --git a/tests/Resolver/TestChainResolver.php b/tests/Resolver/TestChainResolver.php
index 0e32b1f..b68c1f9 100644
--- a/tests/Resolver/TestChainResolver.php
+++ b/tests/Resolver/TestChainResolver.php
@@ -1,5 +1,7 @@
 <?php
 
+namespace WPDesk\View\Tests;
+
 use WPDesk\View\Resolver\ChainResolver;
 use WPDesk\View\Resolver\Exception\CanNotResolve;
 use WPDesk\View\Resolver\NullResolver;
@@ -22,7 +24,7 @@ class TestChainResolver extends \PHPUnit\Framework\TestCase
 
     public function testUseSecondResolverWhenFirstFailed()
     {
-        $validResolver = Mockery::mock(NullResolver::class);
+        $validResolver = \Mockery::mock(NullResolver::class);
         $validResolver
             ->shouldReceive(self::RESOLVE_METHOD_NAME)
             ->andReturn(self::RESPONSE_OF_RESOLVER);
@@ -33,7 +35,7 @@ class TestChainResolver extends \PHPUnit\Framework\TestCase
 
     public function testUseFirstResolverFirst()
     {
-        $validResolver = Mockery::mock(NullResolver::class);
+        $validResolver = \Mockery::mock(NullResolver::class);
         $validResolver
             ->shouldReceive(self::RESOLVE_METHOD_NAME)
             ->andReturn(self::RESPONSE_OF_RESOLVER);
diff --git a/tests/Resolver/TestDirResolver.php b/tests/Resolver/TestDirResolver.php
index 088bc09..42cfcfa 100644
--- a/tests/Resolver/TestDirResolver.php
+++ b/tests/Resolver/TestDirResolver.php
@@ -1,5 +1,6 @@
 <?php
 
+namespace WPDesk\View\Tests;
 
 use WPDesk\View\Resolver\Exception\CanNotResolve;
 
diff --git a/tests/Resolver/TestWpThemeResolver.php b/tests/Resolver/TestWpThemeResolver.php
index ab400a5..c3fb0a2 100644
--- a/tests/Resolver/TestWpThemeResolver.php
+++ b/tests/Resolver/TestWpThemeResolver.php
@@ -1,5 +1,6 @@
 <?php
 
+namespace WPDesk\View\Tests;
 
 use WPDesk\View\Resolver\Exception\CanNotResolve;
 
diff --git a/tests/TestPluginViewBuilder.php b/tests/TestPluginViewBuilder.php
index 6c25585..9b9ea8c 100644
--- a/tests/TestPluginViewBuilder.php
+++ b/tests/TestPluginViewBuilder.php
@@ -1,5 +1,6 @@
 <?php
 
+namespace WPDesk\View\Tests;
 
 use WPDesk\View\PluginViewBuilder;
 
@@ -20,14 +21,14 @@ class TestPluginViewBuilder extends \PHPUnit\Framework\TestCase {
 	}
 
 	public function testCanRenderUsingDir() {
-		$builder  = new PluginViewBuilder( __DIR__ . '/stub', 'template' );
+		$builder  = new PluginViewBuilder( __DIR__ . '/Fixtures', 'template' );
 		$renderer = $builder->createSimpleRenderer();
 
 		$val     = 'val to render';
 		$args    = [ 'singleArg' => $val ];
 		$content = $renderer->render( 'file', $args );
-		$this->assertRegExp( '/template content/', $content, 'Content from stub/template/file.php should be renderer' );
-		$this->assertRegExp( "/{$val}/", $content, 'Content from stub/template/file.php should contain $val' );
+		$this->assertRegExp( '/template content/', $content, 'Content from Fixtures/template/file.php should be renderer' );
+		$this->assertRegExp( "/{$val}/", $content, 'Content from Fixtures/template/file.php should contain $val' );
 
 		$contentUsingOtherMethod = $builder->loadTemplate( 'file', '.', $args );
 		$this->assertEquals( $content, $contentUsingOtherMethod,
-- 
GitLab