From 2501b350e2399e0e15fb5d7112d14bf162cf1671 Mon Sep 17 00:00:00 2001
From: dyszczo <krzysiek@inspirelabs.pl>
Date: Sun, 23 Sep 2018 21:59:35 +0200
Subject: [PATCH] chain resolver tests

---
 tests/unit/Resolver/TestChainResolver.php | 56 +++++++++++++++++++++++
 1 file changed, 56 insertions(+)
 create mode 100644 tests/unit/Resolver/TestChainResolver.php

diff --git a/tests/unit/Resolver/TestChainResolver.php b/tests/unit/Resolver/TestChainResolver.php
new file mode 100644
index 0000000..708053a
--- /dev/null
+++ b/tests/unit/Resolver/TestChainResolver.php
@@ -0,0 +1,56 @@
+<?php
+
+
+use WPDesk\View\Resolver\Exception\CanNotResolve;
+
+class TestChainResolver extends \PHPUnit\Framework\TestCase
+{
+    const RESPONSE_OF_FIRST_RESOLVER = 'first';
+    const RESPONSE_OF_SECOND_RESOLVER = 'second';
+
+    const RESOLVE_METHOD_NAME = 'resolve';
+
+    public function testUseSecondResolverWhenFirstFailed()
+    {
+        $firstResolver  = Mockery::mock(\WPDesk\View\Resolver\Resolver::class)
+                                 ->shouldReceive(self::RESOLVE_METHOD_NAME)
+                                 ->andThrowExceptions([CanNotResolve::class]);
+        $secondResolver = Mockery::mock(\WPDesk\View\Resolver\Resolver::class)
+                                 ->shouldReceive(self::RESOLVE_METHOD_NAME)
+                                 ->andReturn(self::RESPONSE_OF_SECOND_RESOLVER);
+
+        $resolver = new \WPDesk\View\Resolver\ChainResolver($firstResolver, $secondResolver);
+        $this->assertEquals(self::RESPONSE_OF_SECOND_RESOLVER, $resolver->resolver('whatever'));
+    }
+
+    public function testUseFirstResolverFirst()
+    {
+        $firstResolver = Mockery::mock(\WPDesk\View\Resolver\Resolver::class)
+                                ->shouldReceive(self::RESOLVE_METHOD_NAME)
+                                ->andReturn(self::RESPONSE_OF_FIRST_RESOLVER);
+
+        $secondResolver = Mockery::mock(\WPDesk\View\Resolver\Resolver::class)
+                                 ->shouldReceive(self::RESOLVE_METHOD_NAME)
+                                 ->andThrowExceptions([CanNotResolve::class]);
+
+        $resolver = new \WPDesk\View\Resolver\ChainResolver($firstResolver, $secondResolver);
+        $this->assertEquals(self::RESPONSE_OF_SECOND_RESOLVER, $resolver->resolver('whatever'));
+    }
+
+    public function testThrowExceptionWhenBothCannotFind()
+    {
+        $this->expectException(CanNotResolve::class);
+
+        $firstResolver  = Mockery::mock(\WPDesk\View\Resolver\Resolver::class)
+                                 ->shouldReceive(self::RESOLVE_METHOD_NAME)
+                                 ->andThrowExceptions([CanNotResolve::class]);
+
+        $secondResolver = Mockery::mock(\WPDesk\View\Resolver\Resolver::class)
+                                 ->shouldReceive(self::RESOLVE_METHOD_NAME)
+                                 ->andThrowExceptions([CanNotResolve::class]);
+
+        $resolver = new \WPDesk\View\Resolver\ChainResolver($firstResolver, $secondResolver);
+
+        $resolver->resolve('whatever2');
+    }
+}
\ No newline at end of file
-- 
GitLab