ServerRequest provides proper defaults and throws exception for bad parsed body

This commit is contained in:
PJ Dietz 2015-04-26 20:08:13 -04:00
parent 534bd43d9b
commit dce4bdf572
2 changed files with 84 additions and 4 deletions

View File

@ -11,14 +11,14 @@ class ServerRequest extends Request implements ServerRequestInterface
private $attributes; private $attributes;
/** @var array */ /** @var array */
private $cookieParams; private $cookieParams;
/** @var array */ /** @var mixed */
private $uploadedFiles; private $parsedBody;
/** @var array */ /** @var array */
private $queryParams; private $queryParams;
/** @var array */ /** @var array */
private $serverParams; private $serverParams;
/** @var mixed */ /** @var array */
private $parsedBody; private $uploadedFiles;
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
@ -26,6 +26,9 @@ class ServerRequest extends Request implements ServerRequestInterface
{ {
parent::__construct(); parent::__construct();
$this->attributes = []; $this->attributes = [];
$this->cookieParams = [];
$this->queryParams = [];
$this->serverParams = [];
$this->uploadedFiles = []; $this->uploadedFiles = [];
} }
@ -224,6 +227,10 @@ class ServerRequest extends Request implements ServerRequestInterface
*/ */
public function withParsedBody($data) public function withParsedBody($data)
{ {
if (!(is_null($data) || is_array($data) || is_object($data))) {
throw new \InvalidArgumentException("Parsed body must be null, array, or object.");
}
$request = clone $this; $request = clone $this;
$request->parsedBody = $data; $request->parsedBody = $data;
return $request; return $request;

View File

@ -161,6 +161,15 @@ class ServerRequestTest extends \PHPUnit_Framework_TestCase
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
// Server Params // Server Params
/**
* @covers WellRESTed\Message\ServerRequest::getServerParams
*/
public function testServerParamsIsEmptyByDefault()
{
$request = new ServerRequest();
$this->assertEquals([], $request->getServerParams());
}
/** /**
* @covers WellRESTed\Message\ServerRequest::getServerParams * @covers WellRESTed\Message\ServerRequest::getServerParams
* @depends testGetServerRequestReadsFromRequest * @depends testGetServerRequestReadsFromRequest
@ -174,6 +183,15 @@ class ServerRequestTest extends \PHPUnit_Framework_TestCase
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
// Cookies // Cookies
/**
* @covers WellRESTed\Message\ServerRequest::getCookieParams
*/
public function testCookieParamsIsEmptyByDefault()
{
$request = new ServerRequest();
$this->assertEquals([], $request->getCookieParams());
}
/** /**
* @covers WellRESTed\Message\ServerRequest::getCookieParams * @covers WellRESTed\Message\ServerRequest::getCookieParams
* @depends testGetServerRequestReadsFromRequest * @depends testGetServerRequestReadsFromRequest
@ -201,6 +219,15 @@ class ServerRequestTest extends \PHPUnit_Framework_TestCase
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
// Query // Query
/**
* @covers WellRESTed\Message\ServerRequest::getQueryParams
*/
public function testQueryParamsIsEmptyByDefault()
{
$request = new ServerRequest();
$this->assertEquals([], $request->getQueryParams());
}
/** /**
* @covers WellRESTed\Message\ServerRequest::getQueryParams * @covers WellRESTed\Message\ServerRequest::getQueryParams
* @depends testGetServerRequestReadsFromRequest * @depends testGetServerRequestReadsFromRequest
@ -228,6 +255,15 @@ class ServerRequestTest extends \PHPUnit_Framework_TestCase
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
// Uploaded Files // Uploaded Files
/**
* @covers WellRESTed\Message\ServerRequest::getUploadedFiles
*/
public function testUploadedFilesIsEmptyByDefault()
{
$request = new ServerRequest();
$this->assertEquals([], $request->getUploadedFiles());
}
/** /**
* @covers WellRESTed\Message\ServerRequest::getUploadedFiles * @covers WellRESTed\Message\ServerRequest::getUploadedFiles
* @preserveGlobalState disabled * @preserveGlobalState disabled
@ -384,6 +420,15 @@ class ServerRequestTest extends \PHPUnit_Framework_TestCase
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
// Parsed Body // Parsed Body
/**
* @covers WellRESTed\Message\ServerRequest::getParsedBody
*/
public function testParsedBodyIsNullByDefault()
{
$request = new ServerRequest();
$this->assertNull($request->getParsedBody());
}
/** /**
* @covers WellRESTed\Message\ServerRequest::getServerRequest * @covers WellRESTed\Message\ServerRequest::getServerRequest
* @covers WellRESTed\Message\ServerRequest::getParsedBody * @covers WellRESTed\Message\ServerRequest::getParsedBody
@ -431,6 +476,25 @@ class ServerRequestTest extends \PHPUnit_Framework_TestCase
$this->assertEquals("Clyde", $body2["guinea_pig"]); $this->assertEquals("Clyde", $body2["guinea_pig"]);
} }
/**
* @covers WellRESTed\Message\ServerRequest::withParsedBody
* @expectedException \InvalidArgumentException
* @dataProvider invalidParsedBodyProvider
*/
public function testWithParsedBodyThrowsExceptionWithInvalidType($body)
{
$request = new ServerRequest();
$request->withParsedBody($body);
}
public function invalidParsedBodyProvider()
{
return [
[false],
[1]
];
}
/** /**
* @covers WellRESTed\Message\ServerRequest::__clone * @covers WellRESTed\Message\ServerRequest::__clone
*/ */
@ -450,6 +514,15 @@ class ServerRequestTest extends \PHPUnit_Framework_TestCase
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
// Attributes // Attributes
/**
* @covers WellRESTed\Message\ServerRequest::getAttributes
*/
public function testAttributesIsEmptyByDefault()
{
$request = new ServerRequest();
$this->assertEquals([], $request->getAttributes());
}
/** /**
* @covers WellRESTed\Message\ServerRequest::getAttribute * @covers WellRESTed\Message\ServerRequest::getAttribute
* @depends testGetServerRequestReadsFromRequest * @depends testGetServerRequestReadsFromRequest