summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorminstel <minstel@yandex.ru>2016-10-08 00:16:44 +0300
committerminstel <minstel@yandex.ru>2016-10-08 00:16:44 +0300
commit52bbfd6961b5193f18ad313c63f4d38cfe48e629 (patch)
treee906c1937f1cbe5b4c682ad17f46b4c5a2306880
parentd0fc5c00455baa21d3c3df6aef86e38af4062d48 (diff)
downloadrouter-52bbfd6961b5193f18ad313c63f4d38cfe48e629.zip
router-52bbfd6961b5193f18ad313c63f4d38cfe48e629.tar.gz
router-52bbfd6961b5193f18ad313c63f4d38cfe48e629.tar.bz2
Added test for Runner class. Minor fixes
-rw-r--r--composer.json2
-rw-r--r--src/Router/Runner.php10
-rw-r--r--src/Router/Runner/Callback.php20
-rw-r--r--src/Router/Runner/Controller.php27
-rw-r--r--src/Router/Runner/PhpScript.php52
-rw-r--r--tests/Router/Routes/GlobTest.php7
-rw-r--r--tests/Router/RunnerTest.php76
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']);
+ }
+}