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.

187 lines
4.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\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
use Slim\Psr7\Headers;
use Slim\Psr7\Stream;
use Slim\Tests\Psr7\Mocks\MessageStub;
class MessageTest extends TestCase
{
public function testGetProtocolVersion()
{
$message = new MessageStub();
$message->protocolVersion = '1.0';
$this->assertEquals('1.0', $message->getProtocolVersion());
}
public function testWithProtocolVersion()
{
$message = new MessageStub();
$clone = $message->withProtocolVersion('1.0');
$this->assertEquals('1.0', $clone->protocolVersion);
}
public function testWithProtocolVersionInvalidThrowsException()
{
$this->expectException(InvalidArgumentException::class);
$message = new MessageStub();
$message->withProtocolVersion('3.0');
}
public function testGetHeaders()
{
$headers = new Headers();
$headers->addHeader('X-Foo', 'one');
$headers->addHeader('X-Foo', 'two');
$headers->addHeader('X-Foo', 'three');
$message = new MessageStub();
$message->headers = $headers;
$shouldBe = [
'X-Foo' => [
'one',
'two',
'three',
],
];
$this->assertEquals($shouldBe, $message->getHeaders());
}
public function testHasHeader()
{
$headers = new Headers();
$headers->addHeader('X-Foo', 'one');
$message = new MessageStub();
$message->headers = $headers;
$this->assertTrue($message->hasHeader('X-Foo'));
$this->assertFalse($message->hasHeader('X-Bar'));
}
public function testGetHeaderLine()
{
$headers = new Headers();
$headers->addHeader('X-Foo', 'one');
$headers->addHeader('X-Foo', 'two');
$headers->addHeader('X-Foo', 'three');
$message = new MessageStub();
$message->headers = $headers;
$this->assertEquals('one,two,three', $message->getHeaderLine('X-Foo'));
$this->assertEquals('', $message->getHeaderLine('X-Bar'));
}
public function testGetHeader()
{
$headers = new Headers();
$headers->addHeader('X-Foo', 'one');
$headers->addHeader('X-Foo', 'two');
$headers->addHeader('X-Foo', 'three');
$message = new MessageStub();
$message->headers = $headers;
$this->assertEquals(['one', 'two', 'three'], $message->getHeader('X-Foo'));
$this->assertEquals([], $message->getHeader('X-Bar'));
}
public function testWithHeader()
{
$headers = new Headers();
$headers->addHeader('X-Foo', 'one');
$message = new MessageStub();
$message->headers = $headers;
$clone = $message->withHeader('X-Foo', 'bar');
$this->assertEquals('bar', $clone->getHeaderLine('X-Foo'));
}
public function testWithAddedHeader()
{
$headers = new Headers();
$headers->addHeader('X-Foo', 'one');
$message = new MessageStub();
$message->headers = $headers;
$clone = $message->withAddedHeader('X-Foo', 'two');
$this->assertEquals('one,two', $clone->getHeaderLine('X-Foo'));
}
public function testWithoutHeader()
{
$headers = new Headers();
$headers->addHeader('X-Foo', 'one');
$headers->addHeader('X-Bar', 'two');
$response = new MessageStub();
$response->headers = $headers;
$clone = $response->withoutHeader('X-Foo');
$shouldBe = [
'X-Bar' => ['two'],
];
$this->assertEquals($shouldBe, $clone->getHeaders());
}
/**
* @doesNotPerformAssertions
*/
public function testWithoutHeaderByIncompatibleStringWithRFC()
{
$headers = new Headers();
$response = new MessageStub();
$response->headers = $headers;
$response->withoutHeader('<incompatible with RFC');
}
public function testGetBody()
{
$body = $this->getBody();
$message = new MessageStub();
$message->body = $body;
$this->assertSame($body, $message->getBody());
}
public function testWithBody()
{
$body = $this->getBody();
$body2 = $this->getBody();
$message = new MessageStub();
$message->body = $body;
$clone = $message->withBody($body2);
$this->assertSame($body, $message->body);
$this->assertSame($body2, $clone->body);
}
/**
* @return MockObject|Stream
*/
protected function getBody()
{
return $this
->getMockBuilder(Stream::class)
->disableOriginalConstructor()
->getMock();
}
}