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