Commit 6e91a09d authored by Taddeus Kroes's avatar Taddeus Kroes

Unit tested handlers.php, solving some bugs

parent a733b45e
...@@ -10,28 +10,30 @@ namespace webbasics; ...@@ -10,28 +10,30 @@ namespace webbasics;
require_once 'router.php'; require_once 'router.php';
class BaseHandler implements RouteHandler { abstract class BaseHandler implements RouteHandler {
function handleRequest(array $data) { function handleRequest(array $data) {
$request_type = strtolower($_SERVER['REQUEST_METHOD']); $request_type = strtolower($_SERVER['REQUEST_METHOD']);
// Try to use first match value as method name, e.g. getAction() if // Try to use first match value as method name, e.g. getAction() if
// first match value is "action" // first match value is "action"
if (count($data)) { if (count($data)) {
$method_name = $request_type . Inflector::capitalize(array_splice($data, 0, 1)); $method_name = $request_type . camelize($data[0], true);
if (method_exists($this, $method_name)) { if (method_exists($this, $method_name)) {
array_shift($data);
if (count($data)) if (count($data))
$this->$method_name($data); return $this->$method_name($data);
else else
$this->$method_name(); return $this->$method_name();
} }
// get($data) or post($data) // get($data) or post($data)
$this->$request_type($data); return $this->$request_type($data);
} }
// get() or post() // get() or post()
$this->$request_type(); return $this->$request_type();
} }
} }
......
<?php
require_once 'handlers.php';
class MyHandler extends webbasics\BaseHandler {
function get(array $args=array()) {
return 'get ' . implode('-', $args);
}
function getFoo() {
return 'getFoo';
}
function getBar(array $args) {
return 'getBar ' . implode('-', $args);
}
function post(array $args=array()) {
return 'post ' . implode('-', $args);
}
function postFoo() {
return 'postFoo';
}
function postBar(array $args) {
return 'postBar ' . implode('-', $args);
}
}
class HandlersTest extends PHPUnit_Framework_TestCase {
private $myhandler;
function setUp() {
$this->myhandler = new MyHandler;
}
function testBaseHandlerGetNoMethodNoArgs() {
$this->assertHandlesGet('get ', $this->myhandler, array());
}
function testBaseHandlerGetNoMethodArgs() {
$this->assertHandlesGet('get baz', $this->myhandler, array('baz'));
}
function testBaseHandlerGetMethodNoArgs() {
$this->assertHandlesGet('getFoo', $this->myhandler, array('foo'));
}
function testBaseHandlerGetMethodArgs() {
$this->assertHandlesGet('getBar foo-baz', $this->myhandler, array('bar', 'foo', 'baz'));
}
function testBaseHandlerPostNoMethodNoArgs() {
$this->assertHandlesPost('post ', $this->myhandler, array());
}
function testBaseHandlerPostNoMethodArgs() {
$this->assertHandlesPost('post baz', $this->myhandler, array('baz'));
}
function testBaseHandlerPostMethodNoArgs() {
$this->assertHandlesPost('postFoo', $this->myhandler, array('foo'));
}
function testBaseHandlerPostMethodArgs() {
$this->assertHandlesPost('postBar foo-baz', $this->myhandler, array('bar', 'foo', 'baz'));
}
function assertHandlesGet($result, $handler, array $args=array()) {
$this->assertHandlesMethod($result, $handler, $args, 'GET');
}
function assertHandlesPost($result, $handler, array $args=array()) {
$this->assertHandlesMethod($result, $handler, $args, 'POST');
}
function assertHandlesMethod($result, $handler, array $args, $request_method) {
$_SERVER['REQUEST_METHOD'] = $request_method;
$this->assertEquals($result, $handler->handleRequest($args));
}
}
?>
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment