diff --git a/src/Message/Request.php b/src/Message/Request.php index 964ad7d..bf409ad 100644 --- a/src/Message/Request.php +++ b/src/Message/Request.php @@ -3,12 +3,13 @@ namespace WellRESTed\Message; use Psr\Http\Message\RequestInterface; +use Psr\Http\Message\StreamInterface; use Psr\Http\Message\UriInterface; class Request extends Message implements RequestInterface { /** @var string */ - protected $method = "GET"; + protected $method; /** @var string */ protected $requestTarget; /** @var UriInterface */ @@ -16,10 +17,39 @@ class Request extends Message implements RequestInterface // ------------------------------------------------------------------------ - public function __construct() - { + /** + * @param UriInterface $uri + * @param string $method + * @param array $headers + * @param StreamInterface $body + */ + public function __construct( + UriInterface $uri = null, + $method = "GET", + array $headers = null, + StreamInterface $body = null + ) { parent::__construct(); - $this->uri = new Uri(); + + if ($uri !== null) { + $this->uri = $uri; + } else { + $this->uri = new Uri(); + } + + $this->method = $method; + + if ($headers) { + foreach ($headers as $name => $values) { + foreach ($values as $value) { + $this->headers[$name] = $value; + } + } + } + + if ($body !== null) { + $this->body = $body; + } } public function __clone() diff --git a/test/tests/unit/Message/RequestTest.php b/test/tests/unit/Message/RequestTest.php index 526558d..e88092d 100644 --- a/test/tests/unit/Message/RequestTest.php +++ b/test/tests/unit/Message/RequestTest.php @@ -15,6 +15,7 @@ use WellRESTed\Message\Uri; class RequestTest extends \PHPUnit_Framework_TestCase { // ------------------------------------------------------------------------ + // Construction /** * @covers WellRESTed\Message\Request::__construct @@ -25,6 +26,48 @@ class RequestTest extends \PHPUnit_Framework_TestCase $this->assertNotNull($request); } + /** + * @covers WellRESTed\Message\Request::__construct + */ + public function testCreatesInstanceWithUri() + { + $uri = $this->prophesize('Psr\Http\Message\UriInterface'); + $uri = $uri->reveal(); + $request = new Request($uri); + $this->assertSame($uri, $request->getUri()); + } + + /** + * @covers WellRESTed\Message\Request::__construct + */ + public function testCreatesInstanceWithMethod() + { + $method = "POST"; + $request = new Request(null, $method); + $this->assertSame($method, $request->getMethod()); + } + + /** + * @covers WellRESTed\Message\Request::__construct + */ + public function testSetsHeadersOnConstruction() + { + $request = new Request(null, null, [ + "X-foo" => ["bar","baz"] + ]); + $this->assertEquals(["bar","baz"], $request->getHeader("X-foo")); + } + + /** + * @covers WellRESTed\Message\Request::__construct + */ + public function testSetsBodyOnConstruction() + { + $body = $this->prophesize('\Psr\Http\Message\StreamInterface'); + $request = new Request(null, null, [], $body->reveal()); + $this->assertSame($body->reveal(), $request->getBody()); + } + // ------------------------------------------------------------------------ // Request Target