[FEATURE] Added ExceptionHandling functionality + tests.

- Somehow the ExceptionHandling functionality never really get implemented and/or got lost in translation, it's back whup!
- Added some basic tests for Middleware + routing.
This commit is contained in:
Simon Sessingø
2016-04-09 07:05:49 +02:00
parent 2f2c3ca3ca
commit fc4fd0edf1
9 changed files with 183 additions and 23 deletions

View File

@@ -0,0 +1,9 @@
<?php
class DummyController {
public function start() {
echo static::class . '@' .'start() OK';
}
}

View File

@@ -0,0 +1,14 @@
<?php
require_once 'Exceptions/MiddlewareLoadedException.php';
use Pecee\Http\Middleware\IMiddleware;
use Pecee\Http\Request;
class DummyMiddleware implements IMiddleware {
public function handle(Request $request) {
throw new MiddlewareLoadedException('Middleware loaded!');
}
}

View File

@@ -0,0 +1,2 @@
<?php
class MiddlewareLoadedException extends \Exception {}

39
test/MiddlewareTest.php Normal file
View File

@@ -0,0 +1,39 @@
<?php
require_once 'Dummy/DummyMiddleware.php';
require_once 'Dummy/DummyController.php';
class MiddlewareTest extends PHPUnit_Framework_TestCase {
public function __construct() {
// Initial setup
$_SERVER['HTTP_HOST'] = 'example.com';
$_SERVER['REQUEST_URI'] = '/my/test/url';
$_SERVER['REQUEST_METHOD'] = 'get';
}
public function testMiddlewareFound() {
\Pecee\Http\Request::getInstance()->setMethod('get');
$router = new \Pecee\SimpleRouter\RouterBase();
$route = new \Pecee\SimpleRouter\RouterRoute('/my/test/url', 'DummyController@start');
$route->setRequestMethods(array(\Pecee\SimpleRouter\RouterRoute::REQUEST_TYPE_GET));
$route->addSettings(['middleware' => 'DummyMiddleware']);
$router->addRoute($route);
try {
$router->routeRequest();
}catch(Exception $e) {
$this->assertTrue(($e instanceof MiddlewareLoadedException));
return;
}
throw new Exception('Middleware not loaded');
}
}

82
test/RouterRouteTest.php Normal file
View File

@@ -0,0 +1,82 @@
<?php
require_once 'Dummy/DummyMiddleware.php';
require_once 'Dummy/DummyController.php';
class RouterRouteTest extends PHPUnit_Framework_TestCase {
public function __construct() {
// Initial setup
$_SERVER['HTTP_HOST'] = 'example.com';
$_SERVER['REQUEST_URI'] = '/my/test/url';
$_SERVER['REQUEST_METHOD'] = 'get';
}
public function testGet() {
\Pecee\Http\Request::getInstance()->setMethod('get');
$router = new \Pecee\SimpleRouter\RouterBase();
$route = new \Pecee\SimpleRouter\RouterRoute('/my/test/url', 'DummyController@start');
$route->setRequestMethods(array(\Pecee\SimpleRouter\RouterRoute::REQUEST_TYPE_GET));
$router->addRoute($route);
$router->routeRequest();
}
public function testPost() {
\Pecee\Http\Request::getInstance()->setMethod('post');
$router = new \Pecee\SimpleRouter\RouterBase();
$route = new \Pecee\SimpleRouter\RouterRoute('/my/test/url', 'DummyController@start');
$route->addSettings(array());
$route->setRequestMethods(array(\Pecee\SimpleRouter\RouterRoute::REQUEST_TYPE_POST));
$router->addRoute($route);
$router->routeRequest();
}
public function testPut() {
\Pecee\Http\Request::getInstance()->setMethod('put');
$router = new \Pecee\SimpleRouter\RouterBase();
$route = new \Pecee\SimpleRouter\RouterRoute('/my/test/url', 'DummyController@start');
$route->addSettings(array());
$route->setRequestMethods(array(\Pecee\SimpleRouter\RouterRoute::REQUEST_TYPE_PUT));
$router->addRoute($route);
$router->routeRequest();
}
public function testDelete() {
\Pecee\Http\Request::getInstance()->setMethod('delete');
$router = new \Pecee\SimpleRouter\RouterBase();
$route = new \Pecee\SimpleRouter\RouterRoute('/my/test/url', 'DummyController@start');
$route->addSettings(array());
$route->setRequestMethods(array(\Pecee\SimpleRouter\RouterRoute::REQUEST_TYPE_DELETE));
$router->addRoute($route);
$router->routeRequest();
}
public function testMethodNotAllowed() {
\Pecee\Http\Request::getInstance()->setMethod('post');
\Pecee\SimpleRouter\SimpleRouter::get('/my/test/url', 'DummyController@start');
try {
\Pecee\SimpleRouter\SimpleRouter::start();
} catch(\Exception $e) {
$this->assertEquals(403, $e->getCode());
}
}
}