Knocked out unit tests for the new Router

This commit is contained in:
Josh Sherman 2014-09-28 08:24:02 -04:00
parent 273af98883
commit da379d0849
4 changed files with 54 additions and 58 deletions

View file

@ -4,6 +4,7 @@
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.2/phpunit.xsd" xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.2/phpunit.xsd"
bootstrap="tests/Bootstrap.php" bootstrap="tests/Bootstrap.php"
colors="true" colors="true"
stderr="true"
> >
<testsuites> <testsuites>
<testsuite name="Pickles Test Suite"> <testsuite name="Pickles Test Suite">

View file

@ -374,8 +374,7 @@ class Resource extends Object
} }
catch (\Exception $e) catch (\Exception $e)
{ {
$this->status = 400; throw $e;
$this->message = $e->getMessage();
} }
} }

View file

@ -66,6 +66,12 @@ class Router extends Object
array_unshift($nouns, '', $this->config->pickles['namespace'], 'Resources', $version); array_unshift($nouns, '', $this->config->pickles['namespace'], 'Resources', $version);
$class = implode('\\', $nouns); $class = implode('\\', $nouns);
// Strips preceding slashs when there is no namespace
if (strpos($class, '\\\\') === 0)
{
$class = substr($class, 2);
}
// Checks that the file is present and contains our class // Checks that the file is present and contains our class
if (!class_exists($class)) if (!class_exists($class))
{ {
@ -85,7 +91,13 @@ class Router extends Object
$code = $e->getCode(); $code = $e->getCode();
$resource->status = $code ? $code : 400; // Anything below 200 is probably a PHP error
if ($code < 200)
{
$code = 500;
}
$resource->status = $code;
$resource->message = $e->getMessage(); $resource->message = $e->getMessage();
} }

View file

@ -1,63 +1,47 @@
<?php <?php
class RouterTest extends PHPUnit_Framework_TestCase namespace Resources\v1
{ {
private $config; class resource extends \Pickles\Resource
public function setUp()
{ {
$this->config = Pickles\Config::getInstance();
$this->config->data['pickles']['disabled'] = false;
$this->config->data['pickles']['profiler'] = false;
setUpRequest('home'); }
}
$module = '<?php class home extends Resource { }';
namespace
file_put_contents(SITE_MODULE_PATH . 'home.php', $module); {
} class RouterTest extends PHPUnit_Framework_TestCase
{
public function testForceSecure() public function testServerError()
{ {
setUpRequest('secure'); $this->expectOutputRegex('/{"status":500,"message":"Undefined index: request"}/');
$module = '<?php class secure extends Resource { public $secure = true; }'; $_SERVER['REQUEST_METHOD'] = 'GET';
file_put_contents(SITE_MODULE_PATH . 'secure.php', $module); new Pickles\Router();
}
new Pickles\Router();
public function testNotFound()
$this->assertTrue(in_array('Location: https://testsite.com/secure', xdebug_get_headers())); {
} $this->expectOutputRegex('/{"status":404,"message":"Not Found."}/');
public function testForceInsecure() $_SERVER['REQUEST_METHOD'] = 'GET';
{ $_REQUEST['request'] = 'v1/test';
setUpRequest('insecure');
$_SERVER['HTTPS'] = 'on'; new Pickles\Router();
}
$module = '<?php class insecure extends Resource { public $secure = false; }';
// We're just testing that the class can be loaded, not that it will
file_put_contents(SITE_MODULE_PATH . 'insecure.php', $module); // work. That logic is off in ResourceTest
public function testFound()
new Pickles\Router(); {
$this->expectOutputRegex('/{"status":405,"message":"Method not allowed."}/');
$this->assertTrue(in_array('Location: http://testsite.com/insecure', xdebug_get_headers()));
} $_SERVER['REQUEST_METHOD'] = 'GET';
$_REQUEST['request'] = 'v1/resource/1';
public function testValidationErrors()
{ new Pickles\Router();
setUpRequest('validationerrors'); }
$module = '<?php class validationerrors extends Resource { '
. 'public $validate = ["test"];'
. 'public function __default() { return ["foo" => "bar"]; }'
. '}';
file_put_contents(SITE_MODULE_PATH . 'validationerrors.php', $module);
new Pickles\Router();
$this->expectOutputString('{"status":"error","message":"The test field is required."}');
} }
} }