From dce4bdf5726a86c89d9302a18603a51c514ce362 Mon Sep 17 00:00:00 2001 From: PJ Dietz Date: Sun, 26 Apr 2015 20:08:13 -0400 Subject: [PATCH] ServerRequest provides proper defaults and throws exception for bad parsed body --- src/Message/ServerRequest.php | 15 +++- test/tests/unit/Message/ServerRequestTest.php | 73 +++++++++++++++++++ 2 files changed, 84 insertions(+), 4 deletions(-) diff --git a/src/Message/ServerRequest.php b/src/Message/ServerRequest.php index 28de84c..06cc869 100644 --- a/src/Message/ServerRequest.php +++ b/src/Message/ServerRequest.php @@ -11,14 +11,14 @@ class ServerRequest extends Request implements ServerRequestInterface private $attributes; /** @var array */ private $cookieParams; - /** @var array */ - private $uploadedFiles; + /** @var mixed */ + private $parsedBody; /** @var array */ private $queryParams; /** @var array */ private $serverParams; - /** @var mixed */ - private $parsedBody; + /** @var array */ + private $uploadedFiles; // ------------------------------------------------------------------------ @@ -26,6 +26,9 @@ class ServerRequest extends Request implements ServerRequestInterface { parent::__construct(); $this->attributes = []; + $this->cookieParams = []; + $this->queryParams = []; + $this->serverParams = []; $this->uploadedFiles = []; } @@ -224,6 +227,10 @@ class ServerRequest extends Request implements ServerRequestInterface */ 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->parsedBody = $data; return $request; diff --git a/test/tests/unit/Message/ServerRequestTest.php b/test/tests/unit/Message/ServerRequestTest.php index 514891d..cd94062 100644 --- a/test/tests/unit/Message/ServerRequestTest.php +++ b/test/tests/unit/Message/ServerRequestTest.php @@ -161,6 +161,15 @@ class ServerRequestTest extends \PHPUnit_Framework_TestCase // ------------------------------------------------------------------------ // Server Params + /** + * @covers WellRESTed\Message\ServerRequest::getServerParams + */ + public function testServerParamsIsEmptyByDefault() + { + $request = new ServerRequest(); + $this->assertEquals([], $request->getServerParams()); + } + /** * @covers WellRESTed\Message\ServerRequest::getServerParams * @depends testGetServerRequestReadsFromRequest @@ -174,6 +183,15 @@ class ServerRequestTest extends \PHPUnit_Framework_TestCase // ------------------------------------------------------------------------ // Cookies + /** + * @covers WellRESTed\Message\ServerRequest::getCookieParams + */ + public function testCookieParamsIsEmptyByDefault() + { + $request = new ServerRequest(); + $this->assertEquals([], $request->getCookieParams()); + } + /** * @covers WellRESTed\Message\ServerRequest::getCookieParams * @depends testGetServerRequestReadsFromRequest @@ -201,6 +219,15 @@ class ServerRequestTest extends \PHPUnit_Framework_TestCase // ------------------------------------------------------------------------ // Query + /** + * @covers WellRESTed\Message\ServerRequest::getQueryParams + */ + public function testQueryParamsIsEmptyByDefault() + { + $request = new ServerRequest(); + $this->assertEquals([], $request->getQueryParams()); + } + /** * @covers WellRESTed\Message\ServerRequest::getQueryParams * @depends testGetServerRequestReadsFromRequest @@ -228,6 +255,15 @@ class ServerRequestTest extends \PHPUnit_Framework_TestCase // ------------------------------------------------------------------------ // Uploaded Files + /** + * @covers WellRESTed\Message\ServerRequest::getUploadedFiles + */ + public function testUploadedFilesIsEmptyByDefault() + { + $request = new ServerRequest(); + $this->assertEquals([], $request->getUploadedFiles()); + } + /** * @covers WellRESTed\Message\ServerRequest::getUploadedFiles * @preserveGlobalState disabled @@ -384,6 +420,15 @@ class ServerRequestTest extends \PHPUnit_Framework_TestCase // ------------------------------------------------------------------------ // 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::getParsedBody @@ -431,6 +476,25 @@ class ServerRequestTest extends \PHPUnit_Framework_TestCase $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 */ @@ -450,6 +514,15 @@ class ServerRequestTest extends \PHPUnit_Framework_TestCase // ------------------------------------------------------------------------ // Attributes + /** + * @covers WellRESTed\Message\ServerRequest::getAttributes + */ + public function testAttributesIsEmptyByDefault() + { + $request = new ServerRequest(); + $this->assertEquals([], $request->getAttributes()); + } + /** * @covers WellRESTed\Message\ServerRequest::getAttribute * @depends testGetServerRequestReadsFromRequest