diff options
author | minstel <minstel@yandex.ru> | 2016-10-08 00:16:44 +0300 |
---|---|---|
committer | minstel <minstel@yandex.ru> | 2016-10-08 00:16:44 +0300 |
commit | 52bbfd6961b5193f18ad313c63f4d38cfe48e629 (patch) | |
tree | e906c1937f1cbe5b4c682ad17f46b4c5a2306880 | |
parent | d0fc5c00455baa21d3c3df6aef86e38af4062d48 (diff) | |
download | router-52bbfd6961b5193f18ad313c63f4d38cfe48e629.zip router-52bbfd6961b5193f18ad313c63f4d38cfe48e629.tar.gz router-52bbfd6961b5193f18ad313c63f4d38cfe48e629.tar.bz2 |
Added test for Runner class. Minor fixes
-rw-r--r-- | composer.json | 2 | ||||
-rw-r--r-- | src/Router/Runner.php | 10 | ||||
-rw-r--r-- | src/Router/Runner/Callback.php | 20 | ||||
-rw-r--r-- | src/Router/Runner/Controller.php | 27 | ||||
-rw-r--r-- | src/Router/Runner/PhpScript.php | 52 | ||||
-rw-r--r-- | tests/Router/Routes/GlobTest.php | 7 | ||||
-rw-r--r-- | tests/Router/RunnerTest.php | 76 |
7 files changed, 145 insertions, 49 deletions
diff --git a/composer.json b/composer.json index 17ef845..7a1dfc6 100644 --- a/composer.json +++ b/composer.json @@ -25,6 +25,6 @@ } }, "require-dev": { - "jasny/php-code-quality": "^1.2" + "jasny/php-code-quality": "^2.0" } } diff --git a/src/Router/Runner.php b/src/Router/Runner.php index 5d54d93..2c8d259 100644 --- a/src/Router/Runner.php +++ b/src/Router/Runner.php @@ -26,6 +26,15 @@ abstract class Runner $this->route = $route; } + /** + * Get runner route + * + * @return Route + */ + public function getRoute() + { + return $this->route; + } /** * Invoke the action specified in the route @@ -55,7 +64,6 @@ abstract class Runner return $response; } - /** * Factory method * diff --git a/src/Router/Runner/Callback.php b/src/Router/Runner/Callback.php index 031dcb1..17fceee 100644 --- a/src/Router/Runner/Callback.php +++ b/src/Router/Runner/Callback.php @@ -1,15 +1,27 @@ <?php -namespace Jasny\Router\Route; +namespace Jasny\Router\Runner; -use Jasny\Router\Route; +use Jasny\Router\Runner; +use Psr\Http\Message\RequestInterface; +use Psr\Http\Message\ResponseInterface; /** * Description of Callback * * @author arnold */ -class Callback extends Route +class Callback extends Runner { - //put your code here + /** + * Route to a file + * + * @param RequestInterface $request + * @param ResponseInterface $response + * @return ResponseInterface|mixed + */ + public function run(RequestInterface $request, ResponseInterface $response) + { + + } } diff --git a/src/Router/Runner/Controller.php b/src/Router/Runner/Controller.php new file mode 100644 index 0000000..ed8c060 --- /dev/null +++ b/src/Router/Runner/Controller.php @@ -0,0 +1,27 @@ +<?php + +namespace Jasny\Router\Runner; + +use Jasny\Router\Runner; +use Psr\Http\Message\RequestInterface; +use Psr\Http\Message\ResponseInterface; + +/** + * Description of Controller + * + * @author arnold + */ +class Controller extends Runner +{ + /** + * Route to a file + * + * @param RequestInterface $request + * @param ResponseInterface $response + * @return ResponseInterface|mixed + */ + public function run(RequestInterface $request, ResponseInterface $response) + { + + } +} diff --git a/src/Router/Runner/PhpScript.php b/src/Router/Runner/PhpScript.php index 93cac8a..d266ffa 100644 --- a/src/Router/Runner/PhpScript.php +++ b/src/Router/Runner/PhpScript.php @@ -1,60 +1,34 @@ <?php -namespace Jasny\Router\Route; +namespace Jasny\Router\Runner; -use Jasny\Router\Route; -use Psr\Http\Message\ResponseInterface as Response; +use Jasny\Router\Runner; +use Psr\Http\Message\RequestInterface; +use Psr\Http\Message\ResponseInterface; /** * Route to a PHP script */ -class PhpScript extends Route -{ +class PhpScript extends Runner +{ /** - * Route key - * @var string - */ - protected $key; - - /** - * Script path - * @var string - */ - public $file; - - - /** - * Class constructor - * - * @param string $file - * @param string $values - */ - public function __construct($key, $file, $values) - { - parent::__construct($values); - - $this->key = $key; - $this->file = $file; - } - - /** - * Return route key + * Return route file path * * @return string */ public function __toString() { - echo (string)$this->key; - } - + echo (string)$this->route->file; + } /** * Route to a file * - * @param object $route - * @return Response|mixed + * @param RequestInterface $request + * @param ResponseInterface $response + * @return ResponseInterface|mixed */ - protected function execute() + public function run(RequestInterface $request, ResponseInterface $response) { $file = ltrim($this->file, '/'); diff --git a/tests/Router/Routes/GlobTest.php b/tests/Router/Routes/GlobTest.php index e0dc9da..565c51b 100644 --- a/tests/Router/Routes/GlobTest.php +++ b/tests/Router/Routes/GlobTest.php @@ -96,7 +96,7 @@ class GlobTest extends PHPUnit_Framework_TestCase */ public function testOffsetSet($pattern, $options, $exception) { - if ($exception) $this->setExpectedException($exception); + if ($exception) $this->expectException($exception); $glob = new Glob(); $glob->offsetSet($pattern, $options); @@ -121,7 +121,6 @@ class GlobTest extends PHPUnit_Framework_TestCase ['/foo/*', ['fn' => 'bar'], ''], ['/foo/*', ['file' => 'bar'], ''], ['', ['controller' => 'bar'], BadMethodCallException::class], - ['/bar', ['foo' => 'bar'], InvalidArgumentException::class], ['', '', BadMethodCallException::class] ]; } @@ -314,7 +313,7 @@ class GlobTest extends PHPUnit_Framework_TestCase */ public function testBindVarMultipleUrlParts($uri, $options, $positive, $exception) { - if ($exception) $this->setExpectedException(InvalidArgumentException::class); + if ($exception) $this->expectException(InvalidArgumentException::class); $values = [$uri => $options]; $glob = new Glob($values); @@ -402,7 +401,7 @@ class GlobTest extends PHPUnit_Framework_TestCase */ public function getServerRequest($uri, $method = 'GET', $globals = [], $header = '') { - $request = $this->getMock(ServerRequestInterface::class); + $request = $this->createMock(ServerRequestInterface::class); $request->method('getUri')->willReturn($uri); $request->method('getMethod')->willReturn($method); $request->method('getQueryParams')->willReturn(isset($globals['get']) ? $globals['get'] : []); diff --git a/tests/Router/RunnerTest.php b/tests/Router/RunnerTest.php new file mode 100644 index 0000000..b92b40f --- /dev/null +++ b/tests/Router/RunnerTest.php @@ -0,0 +1,76 @@ +<?php + +use Jasny\Router\Route; +use Jasny\Router\Runner; +use Jasny\Router\Runner\Controller; +use Jasny\Router\Runner\Callback; +use Jasny\Router\Runner\PhpScript; +use Psr\Http\Message\RequestInterface; +use Psr\Http\Message\ResponseInterface; + +class RunnerTest extends PHPUnit_Framework_TestCase +{ + /** + * Test creating Runner object using factory method + * + * @dataProvider createProvider + */ + public function testCreate($route, $class, $positive) + { + if (!$positive) $this->expectException(\RuntimeException::class); + + $runner = Runner::create($route); + + if (!$positive) return; + + $this->assertInstanceOf($class, $runner, "Runner object has invalid class"); + $this->assertEquals($route, $runner->getRoute()); + } + + /** + * Provide data fpr testing 'create' method + */ + public function createProvider() + { + return [ + [Route::create(['controller' => 'TestController', 'value' => 'test']), Controller::class, true], + [Route::create(['fn' => 'testFunction', 'value' => 'test']), Callback::class, true], + [Route::create(['file' => 'some_file.php', 'value' => 'test']), PhpScript::class, true], + [Route::create(['test' => 'test']), '', false], + ]; + } + + /** + * Test runner __invoke method + */ + public function testInvoke() + { + $runner = $this->getMockBuilder('Jasny\Router\Runner')->disableOriginalConstructor()->getMockForAbstractClass(); + $queries = [ + 'request' => $this->createMock(RequestInterface::class), + 'response' => $this->createMock(ResponseInterface::class) + ]; + + #Test that 'run' receives correct arguments inside '__invoke' + $runner->method('run')->will($this->returnCallback(function($arg1, $arg2) { + return ['request' => $arg1, 'response' => $arg2]; + })); + + $result = $runner($queries['request'], $queries['response']); + $this->assertEquals($result['request'], $queries['request']); + $this->assertEquals($result['response'], $queries['response']); + + #The same test with calling 'next' callback + $result = $runner($queries['request'], $queries['response'], function($request, $prevResponse) use ($queries) { + $this->assertEquals($request, $queries['request']); + $this->assertEquals($prevResponse['request'], $queries['request']); + $this->assertEquals($prevResponse['response'], $queries['response']); + + return $queries + ['next_called' => true]; + }); + + $this->assertTrue($result['next_called']); + $this->assertEquals($result['request'], $queries['request']); + $this->assertEquals($result['response'], $queries['response']); + } +} |