You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
WF-WEB-API/vendor/slim/psr7/tests/ResponseTest.php

197 lines
5.9 KiB

<?php
/**
* Slim Framework (https://slimframework.com)
*
* @license https://github.com/slimphp/Slim-Psr7/blob/master/LICENSE.md (MIT License)
*/
declare(strict_types=1);
namespace Slim\Tests\Psr7;
use InvalidArgumentException;
use PHPUnit\Framework\TestCase;
use ReflectionProperty;
use Slim\Psr7\Environment;
use Slim\Psr7\Headers;
use Slim\Psr7\Response;
use Slim\Psr7\Stream;
use stdClass;
use function fopen;
use function property_exists;
class ResponseTest extends TestCase
{
public function testConstructorWithDefaultArgs()
{
$response = new Response();
$headersReflection = new ReflectionProperty($response, 'headers');
$headersReflection->setAccessible(true);
$bodyReflection = new ReflectionProperty($response, 'body');
$bodyReflection->setAccessible(true);
$this->assertEquals(200, $response->getStatusCode());
$this->assertInstanceOf(Headers::class, $headersReflection->getValue($response));
$this->assertInstanceOf(Stream::class, $bodyReflection->getValue($response));
}
public function testConstructorWithCustomArgs()
{
$headers = new Headers();
$body = new Stream(fopen('php://temp', 'r+'));
$response = new Response(404, $headers, $body);
$headersReflection = new ReflectionProperty($response, 'headers');
$headersReflection->setAccessible(true);
$bodyReflection = new ReflectionProperty($response, 'body');
$bodyReflection->setAccessible(true);
$this->assertEquals(404, $response->getStatusCode());
$this->assertSame($headers, $headersReflection->getValue($response));
$this->assertSame($body, $bodyReflection->getValue($response));
}
public function testDeepCopyClone()
{
$headers = new Headers();
$body = new Stream(fopen('php://temp', 'r+'));
$response = new Response(404, $headers, $body);
$clone = clone $response;
$headersReflection = new ReflectionProperty($response, 'headers');
$headersReflection->setAccessible(true);
$this->assertEquals(404, $clone->getStatusCode());
$this->assertEquals('1.1', $clone->getProtocolVersion());
$this->assertNotSame($headers, $headersReflection->getValue($clone));
}
public function testDisableSetter()
{
$response = new Response();
$response->foo = 'bar';
$this->assertFalse(property_exists($response, 'foo'));
}
public function testGetStatusCode()
{
$response = new Response();
$responseStatus = new ReflectionProperty($response, 'status');
$responseStatus->setAccessible(true);
$responseStatus->setValue($response, 404);
$this->assertEquals(404, $response->getStatusCode());
}
public function testWithStatus()
{
$response = new Response();
$clone = $response->withStatus(302);
$this->assertEquals(302, $clone->getStatusCode());
}
public function testWithStatusInvalidStatusCodeThrowsException()
{
$this->expectException(InvalidArgumentException::class);
$response = new Response();
$response->withStatus(800);
}
public function testWithStatusInvalidReasonPhraseThrowsException()
{
$this->expectException(InvalidArgumentException::class);
$this->expectExceptionMessage('Response reason phrase must be a string');
$response = new Response();
$response->withStatus(200, null);
}
public function testWithStatusEmptyReasonPhrase()
{
$responseWithNoMessage = new Response(310);
$this->assertEquals('', $responseWithNoMessage->getReasonPhrase());
}
public function testReasonPhraseContainsCarriageReturn()
{
$this->expectException(InvalidArgumentException::class);
$this->expectExceptionMessage('Reason phrase contains one of the following prohibited characters: \r \n');
$response = new Response();
$response = $response->withStatus(404, "Not Found\r");
}
public function testReasonPhraseContainsLineFeed()
{
$this->expectException(InvalidArgumentException::class);
$this->expectExceptionMessage('Reason phrase contains one of the following prohibited characters: \r \n');
$response = new Response();
$response = $response->withStatus(404, "Not Found\n");
}
public function testWithStatusValidReasonPhraseObject()
{
$mock = $this->getMockBuilder(stdClass::class)->addMethods(['__toString'])->getMock();
$mock->expects($this->once())
->method('__toString')
->will($this->returnValue('Slim OK'));
$response = new Response();
$response = $response->withStatus(200, $mock);
$this->assertEquals('Slim OK', $response->getReasonPhrase());
}
public function testGetReasonPhrase()
{
$response = new Response(404);
$this->assertEquals('Not Found', $response->getReasonPhrase());
}
public function testEmptyReasonPhraseForUnrecognisedCode()
{
$response = new Response();
$response = $response->withStatus(199);
$this->assertSame('', $response->getReasonPhrase());
}
public function testSetReasonPhraseForUnrecognisedCode()
{
$response = new Response();
$response = $response->withStatus(199, 'Random Message');
$this->assertEquals('Random Message', $response->getReasonPhrase());
}
public function testGetCustomReasonPhrase()
{
$response = new Response();
$clone = $response->withStatus(200, 'Custom Phrase');
$this->assertEquals('Custom Phrase', $clone->getReasonPhrase());
}
public function testResponseHeadersDoNotContainAuthorizationHeader()
{
$_SERVER = Environment::mock(
[
'PHP_AUTH_USER' => 'foo'
]
);
$response = new Response();
$this->assertEmpty($response->getHeaders());
}
}