assertNotNull($request); } /** * @covers WellRESTed\Message\ServerRequest::getServerRequest * @covers WellRESTed\Message\ServerRequest::getServerRequestHeaders * @covers WellRESTed\Message\ServerRequest::readFromServerRequest * @covers WellRESTed\Message\ServerRequest::getStreamForBody * @preserveGlobalState disabled */ public function testGetServerRequestReadsFromRequest() { $_SERVER = [ "HTTP_HOST" => "localhost", "HTTP_ACCEPT" => "application/json", "HTTP_CONTENT_TYPE" => "application/x-www-form-urlencoded", "QUERY_STRING" => "guinea_pig=Claude&hamster=Fizzgig" ]; $_COOKIE = [ "cat" => "Molly" ]; $_FILES = [ "file" => [ "name" => "MyFile.jpg", "type" => "image/jpeg", "tmp_name" => "/tmp/php/php6hst32", "error" => "UPLOAD_ERR_OK", "size" => 98174 ] ]; $_POST = [ "dog" => "Bear" ]; $attributes = ["guinea_pig" => "Claude"]; $request = ServerRequest::getServerRequest($attributes); $this->assertNotNull($request); return $request; } /** * @covers WellRESTed\Message\ServerRequest::getServerParams * @depends testGetServerRequestReadsFromRequest */ public function testServerRequestProvidesServerParams($request) { /** @var ServerRequest $request */ $this->assertEquals("localhost", $request->getServerParams()["HTTP_HOST"]); } /** * @covers WellRESTed\Message\ServerRequest::getCookieParams * @depends testGetServerRequestReadsFromRequest */ public function testServerRequestProvidesCookieParams($request) { /** @var ServerRequest $request */ $this->assertEquals("Molly", $request->getCookieParams()["cat"]); } /** * @covers WellRESTed\Message\ServerRequest::getQueryParams * @depends testGetServerRequestReadsFromRequest */ public function testServerRequestProvidesQueryParams($request) { /** @var ServerRequest $request */ $this->assertEquals("Claude", $request->getQueryParams()["guinea_pig"]); } /** * @covers WellRESTed\Message\ServerRequest::getFileParams * @depends testGetServerRequestReadsFromRequest */ public function testServerRequestProvidesFilesParams($request) { /** @var ServerRequest $request */ $this->assertEquals("MyFile.jpg", $request->getFileParams()["file"]["name"]); } /** * @covers WellRESTed\Message\ServerRequest::getHeader * @depends testGetServerRequestReadsFromRequest */ public function testServerRequestProvidesHeaders($request) { /** @var ServerRequest $request */ $this->assertEquals(["application/json"], $request->getHeader("Accept")); } public function testServerRequestProvidesBody() { $body = $this->prophesize('Psr\Http\Message\StreamInterface'); MockServerRequestTest::$bodyStream = $body->reveal(); $request = MockServerRequestTest::getServerRequest(); $this->assertSame($body->reveal(), $request->getBody()); } /** * @covers WellRESTed\Message\ServerRequest::getAttribute * @depends testGetServerRequestReadsFromRequest */ public function testServerRequestProvidesAttributesIfPassed($request) { /** @var ServerRequest $request */ $this->assertEquals("Claude", $request->getAttribute("guinea_pig")); } /** * @covers WellRESTed\Message\ServerRequest::withCookieParams * @depends testGetServerRequestReadsFromRequest */ public function testWithCookieParamsCreatesNewInstance($request1) { /** @var ServerRequest $request1 */ $request2 = $request1->withCookieParams([ "cat" => "Oscar" ]); $this->assertEquals("Molly", $request1->getCookieParams()["cat"]); $this->assertEquals("Oscar", $request2->getCookieParams()["cat"]); } /** * @covers WellRESTed\Message\ServerRequest::withQueryParams * @depends testGetServerRequestReadsFromRequest */ public function testWithQueryParamsCreatesNewInstance($request1) { /** @var ServerRequest $request1 */ $request2 = $request1->withQueryParams([ "guinea_pig" => "Clyde" ]); $this->assertEquals("Claude", $request1->getQueryParams()["guinea_pig"]); $this->assertEquals("Clyde", $request2->getQueryParams()["guinea_pig"]); } /** * @covers WellRESTed\Message\ServerRequest::withParsedBody * @depends testGetServerRequestReadsFromRequest */ public function testWithParsedBodyCreatesNewInstance($request1) { /** @var ServerRequest $request1 */ $body1 = $request1->getParsedBody(); $request2 = $request1->withParsedBody([ "guinea_pig" => "Clyde" ]); $body2 = $request2->getParsedBody(); $this->assertEquals("Bear", $body1["dog"]); $this->assertEquals("Clyde", $body2["guinea_pig"]); } /** * @covers WellRESTed\Message\ServerRequest::getServerRequest * @covers WellRESTed\Message\ServerRequest::getParsedBody * @preserveGlobalState disabled * @dataProvider formContentTypeProvider */ public function testGetServerRequestParsesFormBody($contentType) { $_SERVER = [ "HTTP_HOST" => "localhost", "HTTP_CONTENT_TYPE" => $contentType, ]; $_COOKIE = []; $_FILES = []; $_POST = [ "dog" => "Bear" ]; $request = ServerRequest::getServerRequest(); $this->assertEquals("Bear", $request->getParsedBody()["dog"]); } public function formContentTypeProvider() { return [ ["application/x-www-form-urlencoded"], ["multipart/form-data"] ]; } /** * @covers WellRESTed\Message\ServerRequest::__clone */ public function testCloneMakesDeepCopiesOfParsedBody() { $body = (object) [ "cat" => "Dog" ]; $request1 = new ServerRequest(); $request1 = $request1->withParsedBody($body); $request2 = $request1->withHeader("X-extra", "hello world"); $this->assertEquals($request1->getParsedBody(), $request2->getParsedBody()); $this->assertNotSame($request1->getParsedBody(), $request2->getParsedBody()); } /** * @covers WellRESTed\Message\ServerRequest::withAttribute * @covers WellRESTed\Message\ServerRequest::getAttribute */ public function testWithAttributeCreatesNewInstance() { $request = new ServerRequest(); $request = $request->withAttribute("cat", "Molly"); $this->assertEquals("Molly", $request->getAttribute("cat")); } /** * @covers WellRESTed\Message\ServerRequest::withAttribute */ public function testWithAttributePreserversOtherAttributes() { $request = new ServerRequest(); $request = $request->withAttribute("cat", "Molly"); $request = $request->withAttribute("dog", "Bear"); $this->assertEquals("Molly", $request->getAttribute("cat")); $this->assertEquals("Bear", $request->getAttribute("dog")); } /** * @covers WellRESTed\Message\ServerRequest::getAttribute */ public function testGetAttributeReturnsDefaultIfNotSet() { $request = new ServerRequest(); $this->assertEquals("Oscar", $request->getAttribute("cat", "Oscar")); } /** * @covers WellRESTed\Message\ServerRequest::withoutAttribute */ public function testWithoutAttributeCreatesNewInstance() { $request = new ServerRequest(); $request = $request->withAttribute("cat", "Molly"); $request = $request->withoutAttribute("cat"); $this->assertEquals("Oscar", $request->getAttribute("cat", "Oscar")); } /** * @covers WellRESTed\Message\ServerRequest::withoutAttribute */ public function testWithoutAttributePreservesOtherAttributes() { $request = new ServerRequest(); $request = $request->withAttribute("cat", "Molly"); $request = $request->withAttribute("dog", "Bear"); $request = $request->withoutAttribute("cat"); $this->assertEquals("Bear", $request->getAttribute("dog")); $this->assertEquals("Oscar", $request->getAttribute("cat", "Oscar")); } /** * @covers WellRESTed\Message\ServerRequest::getAttributes */ public function testGetAttributesReturnsAllAttributes() { $request = new ServerRequest(); $request = $request->withAttribute("cat", "Molly"); $request = $request->withAttribute("dog", "Bear"); $attributes = $request->getAttributes(); $this->assertEquals("Molly", $attributes["cat"]); $this->assertEquals("Bear", $attributes["dog"]); } /** * @covers WellRESTed\Message\ServerRequest::getServerRequestHeaders * @runInSeparateProcess * @preserveGlobalState disabled */ public function testReadsApacheRequestHeaders() { // This file adds a dummy apache_request_headers in the global namespace. require_once(__DIR__ . "/../../../src/apache_request_headers.php"); $_SERVER = [ "HTTP_HOST" => "localhost", "HTTP_ACCEPT" => "application/json", "QUERY_STRING" => "guinea_pig=Claude&hamster=Fizzgig" ]; $_COOKIE = [ "cat" => "Molly" ]; $_FILES = [ "file" => [ "name" => "MyFile.jpg", "type" => "image/jpeg", "tmp_name" => "/tmp/php/php6hst32", "error" => "UPLOAD_ERR_OK", "size" => 98174 ] ]; $_POST = [ "dog" => "Bear" ]; $request = ServerRequest::getServerRequest(); $headers = $request->getHeaders(); $this->assertNotNull($headers); } /** * @covers WellRESTed\Message\ServerRequest::readFromServerRequest * @preserveGlobalState disabled * @dataProvider protocolVersionProvider */ public function testReadsProtocolVersionFromFromRequest($expectedProtocol, $serverProtocol) { $_SERVER = [ "HTTP_HOST" => "localhost", "SERVER_PROTOCOL" => $serverProtocol, "REQUEST_METHOD" => "GET" ]; $request = ServerRequest::getServerRequest(); $this->assertEquals($expectedProtocol, $request->getProtocolVersion()); } public function protocolVersionProvider() { return [ ["1.1", "HTTP/1.1"], ["1.0", "HTTP/1.0"], ["1.1", null], ["1.1", "INVALID"] ]; } /** * @covers WellRESTed\Message\ServerRequest::readFromServerRequest * @preserveGlobalState disabled * @dataProvider methodProvider */ public function testReadsMethodFromFromRequest($exectedMethod, $serverMethod) { $_SERVER = [ "HTTP_HOST" => "localhost", "REQUEST_METHOD" => $serverMethod ]; $request = ServerRequest::getServerRequest(); $this->assertEquals($exectedMethod, $request->getMethod()); } public function methodProvider() { return [ ["GET", "GET"], ["POST", "POST"], ["DELETE", "DELETE"], ["PUT", "PUT"], ["OPTIONS", "OPTIONS"], ["GET", null] ]; } /** * @covers WellRESTed\Message\ServerRequest::readFromServerRequest * @preserveGlobalState disabled * @dataProvider requestTargetProvider */ public function testReadsRequestTargetFromServer($exectedRequestTarget, $serverRequestUri) { $_SERVER = [ "HTTP_HOST" => "localhost", "REQUEST_URI" => $serverRequestUri ]; $request = ServerRequest::getServerRequest(); $this->assertEquals($exectedRequestTarget, $request->getRequestTarget()); } public function requestTargetProvider() { return [ ["/", "/"], ["/hello", "/hello"], ["/my/path.txt", "/my/path.txt"], ["/", null] ]; } } // ---------------------------------------------------------------------------- class MockServerRequestTest extends ServerRequest { public static $bodyStream; protected function getStreamForBody() { return self::$bodyStream; } }