Knocked out unit tests for the new Router
This commit is contained in:
parent
273af98883
commit
da379d0849
4 changed files with 54 additions and 58 deletions
|
@ -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">
|
||||||
|
|
|
@ -374,8 +374,7 @@ class Resource extends Object
|
||||||
}
|
}
|
||||||
catch (\Exception $e)
|
catch (\Exception $e)
|
||||||
{
|
{
|
||||||
$this->status = 400;
|
throw $e;
|
||||||
$this->message = $e->getMessage();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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."}');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue