wellrested/test/tests/unit/Message/ServerRequestTest.php

301 lines
9.6 KiB
PHP

<?php
namespace WellRESTed\Test\Unit\Message;
use WellRESTed\Message\ServerRequest;
/**
* @uses WellRESTed\Message\ServerRequest
* @uses WellRESTed\Message\Request
* @uses WellRESTed\Message\Message
* @uses WellRESTed\Message\HeaderCollection
* @uses WellRESTed\Stream\Stream
*/
class ServerRequestTest extends \PHPUnit_Framework_TestCase
{
/**
* @covers WellRESTed\Message\ServerRequest::__construct
*/
public function testCreatesInstance()
{
$request = new ServerRequest();
$this->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\StreamableInterface');
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"]);
}
}
// ----------------------------------------------------------------------------
class MockServerRequestTest extends ServerRequest
{
public static $bodyStream;
protected function getStreamForBody()
{
return self::$bodyStream;
}
}