158 lines
4.6 KiB
PHP
158 lines
4.6 KiB
PHP
<?php
|
|
namespace GuzzleHttp\Tests\Psr7;
|
|
|
|
use GuzzleHttp\Psr7\Request;
|
|
use GuzzleHttp\Psr7\Uri;
|
|
|
|
/**
|
|
* @covers GuzzleHttp\Psr7\Request
|
|
*/
|
|
class RequestTest extends \PHPUnit_Framework_TestCase
|
|
{
|
|
public function testRequestUriMayBeString()
|
|
{
|
|
$r = new Request('GET', '/');
|
|
$this->assertEquals('/', (string) $r->getUri());
|
|
}
|
|
|
|
public function testRequestUriMayBeUri()
|
|
{
|
|
$uri = new Uri('/');
|
|
$r = new Request('GET', $uri);
|
|
$this->assertSame($uri, $r->getUri());
|
|
}
|
|
|
|
/**
|
|
* @expectedException \InvalidArgumentException
|
|
*/
|
|
public function testValidateRequestUri()
|
|
{
|
|
new Request('GET', true);
|
|
}
|
|
|
|
public function testCanConstructWithBody()
|
|
{
|
|
$r = new Request('GET', '/', [], 'baz');
|
|
$this->assertEquals('baz', (string) $r->getBody());
|
|
}
|
|
|
|
public function testCapitalizesMethod()
|
|
{
|
|
$r = new Request('get', '/');
|
|
$this->assertEquals('GET', $r->getMethod());
|
|
}
|
|
|
|
public function testCapitalizesWithMethod()
|
|
{
|
|
$r = new Request('GET', '/');
|
|
$this->assertEquals('PUT', $r->withMethod('put')->getMethod());
|
|
}
|
|
|
|
public function testWithUri()
|
|
{
|
|
$r1 = new Request('GET', '/');
|
|
$u1 = $r1->getUri();
|
|
$u2 = new Uri('http://www.example.com');
|
|
$r2 = $r1->withUri($u2);
|
|
$this->assertNotSame($r1, $r2);
|
|
$this->assertSame($u2, $r2->getUri());
|
|
$this->assertSame($u1, $r1->getUri());
|
|
}
|
|
|
|
public function testSameInstanceWhenSameUri()
|
|
{
|
|
$r1 = new Request('GET', 'http://foo.com');
|
|
$r2 = $r1->withUri($r1->getUri());
|
|
$this->assertSame($r1, $r2);
|
|
}
|
|
|
|
public function testWithRequestTarget()
|
|
{
|
|
$r1 = new Request('GET', '/');
|
|
$r2 = $r1->withRequestTarget('*');
|
|
$this->assertEquals('*', $r2->getRequestTarget());
|
|
$this->assertEquals('/', $r1->getRequestTarget());
|
|
}
|
|
|
|
/**
|
|
* @expectedException \InvalidArgumentException
|
|
*/
|
|
public function testRequestTargetDoesNotAllowSpaces()
|
|
{
|
|
$r1 = new Request('GET', '/');
|
|
$r1->withRequestTarget('/foo bar');
|
|
}
|
|
|
|
public function testRequestTargetDefaultsToSlash()
|
|
{
|
|
$r1 = new Request('GET', '');
|
|
$this->assertEquals('/', $r1->getRequestTarget());
|
|
$r2 = new Request('GET', '*');
|
|
$this->assertEquals('*', $r2->getRequestTarget());
|
|
$r3 = new Request('GET', 'http://foo.com/bar baz/');
|
|
$this->assertEquals('/bar%20baz/', $r3->getRequestTarget());
|
|
}
|
|
|
|
public function testBuildsRequestTarget()
|
|
{
|
|
$r1 = new Request('GET', 'http://foo.com/baz?bar=bam');
|
|
$this->assertEquals('/baz?bar=bam', $r1->getRequestTarget());
|
|
}
|
|
|
|
public function testHostIsAddedFirst()
|
|
{
|
|
$r = new Request('GET', 'http://foo.com/baz?bar=bam', ['Foo' => 'Bar']);
|
|
$this->assertEquals([
|
|
'Host' => ['foo.com'],
|
|
'Foo' => ['Bar']
|
|
], $r->getHeaders());
|
|
}
|
|
|
|
public function testCanGetHeaderAsCsv()
|
|
{
|
|
$r = new Request('GET', 'http://foo.com/baz?bar=bam', [
|
|
'Foo' => ['a', 'b', 'c']
|
|
]);
|
|
$this->assertEquals('a, b, c', $r->getHeaderLine('Foo'));
|
|
$this->assertEquals('', $r->getHeaderLine('Bar'));
|
|
}
|
|
|
|
public function testHostIsNotOverwrittenWhenPreservingHost()
|
|
{
|
|
$r = new Request('GET', 'http://foo.com/baz?bar=bam', ['Host' => 'a.com']);
|
|
$this->assertEquals(['Host' => ['a.com']], $r->getHeaders());
|
|
$r2 = $r->withUri(new Uri('http://www.foo.com/bar'), true);
|
|
$this->assertEquals('a.com', $r2->getHeaderLine('Host'));
|
|
}
|
|
|
|
public function testOverridesHostWithUri()
|
|
{
|
|
$r = new Request('GET', 'http://foo.com/baz?bar=bam');
|
|
$this->assertEquals(['Host' => ['foo.com']], $r->getHeaders());
|
|
$r2 = $r->withUri(new Uri('http://www.baz.com/bar'));
|
|
$this->assertEquals('www.baz.com', $r2->getHeaderLine('Host'));
|
|
}
|
|
|
|
public function testAggregatesHeaders()
|
|
{
|
|
$r = new Request('GET', 'http://foo.com', [
|
|
'ZOO' => 'zoobar',
|
|
'zoo' => ['foobar', 'zoobar']
|
|
]);
|
|
$this->assertEquals('zoobar, foobar, zoobar', $r->getHeaderLine('zoo'));
|
|
}
|
|
|
|
public function testAddsPortToHeader()
|
|
{
|
|
$r = new Request('GET', 'http://foo.com:8124/bar');
|
|
$this->assertEquals('foo.com:8124', $r->getHeaderLine('host'));
|
|
}
|
|
|
|
public function testAddsPortToHeaderAndReplacePreviousPort()
|
|
{
|
|
$r = new Request('GET', 'http://foo.com:8124/bar');
|
|
$r = $r->withUri(new Uri('http://foo.com:8125/bar'));
|
|
$this->assertEquals('foo.com:8125', $r->getHeaderLine('host'));
|
|
}
|
|
}
|