Skip to content
This repository has been archived by the owner on Jan 29, 2020. It is now read-only.

Commit

Permalink
Merge a1c1078 into 1dce37e
Browse files Browse the repository at this point in the history
  • Loading branch information
Maks3w committed Jun 11, 2015
2 parents 1dce37e + a1c1078 commit 37a18ab
Show file tree
Hide file tree
Showing 7 changed files with 47 additions and 291 deletions.
1 change: 1 addition & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
"psr/http-message": "~1.0"
},
"require-dev": {
"maks3w/psr7-assertions": "dev-master",
"phpunit/PHPUnit": "~4.6",
"squizlabs/php_codesniffer": "^2.3.1"
},
Expand Down
17 changes: 8 additions & 9 deletions src/MessageTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -142,8 +142,7 @@ public function getHeader($header)
}

/**
* Retrieves the line for a single header, with the header values as a
* comma-separated string.
* Retrieves a comma-separated string of the values for a single header.
*
* This method returns all of the header values of the given
* case-insensitive header name as a string concatenated together using
Expand All @@ -154,18 +153,18 @@ public function getHeader($header)
* and supply your own delimiter when concatenating.
*
* If the header does not appear in the message, this method MUST return
* a null value.
* an empty string.
*
* @param string $header Case-insensitive header field name.
* @return string|null A string of values as provided for the given header
* @param string $name Case-insensitive header field name.
* @return string A string of values as provided for the given header
* concatenated together using a comma. If the header does not appear in
* the message, this method MUST return a null value.
* the message, this method MUST return an empty string.
*/
public function getHeaderLine($header)
public function getHeaderLine($name)
{
$value = $this->getHeader($header);
$value = $this->getHeader($name);
if (empty($value)) {
return null;
return '';
}

return implode(',', $value);
Expand Down
3 changes: 2 additions & 1 deletion src/RequestTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
* @property array $headers
* @property array $headerNames
* @property StreamInterface $stream
* @method bool hasHeader(string $header)
*/
trait RequestTrait
{
Expand Down Expand Up @@ -251,7 +252,7 @@ public function withUri(UriInterface $uri, $preserveHost = false)
$new = clone $this;
$new->uri = $uri;

if ($preserveHost) {
if ($preserveHost && $this->hasHeader('Host')) {
return $new;
}

Expand Down
84 changes: 5 additions & 79 deletions test/MessageTraitTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,63 +10,24 @@
namespace ZendTest\Diactoros;

use PHPUnit_Framework_TestCase as TestCase;
use Psr\Http\Message\MessageInterface;
use Zend\Diactoros\Request;
use Zend\Diactoros\Stream;

class MessageTraitTest extends TestCase
{
/** @var MessageInterface */
protected $message;

public function setUp()
{
$this->stream = new Stream('php://memory', 'wb+');
$this->message = new Request(null, null, $this->stream);
$this->message = new Request(null, null, $this->getMock('Psr\Http\Message\StreamInterface'));
}

public function testProtocolHasAcceptableDefault()
{
$this->assertEquals('1.1', $this->message->getProtocolVersion());
}

public function testProtocolMutatorReturnsCloneWithChanges()
{
$message = $this->message->withProtocolVersion('1.0');
$this->assertNotSame($this->message, $message);
$this->assertEquals('1.0', $message->getProtocolVersion());
}

public function testUsesStreamProvidedInConstructorAsBody()
{
$this->assertSame($this->stream, $this->message->getBody());
}

public function testBodyMutatorReturnsCloneWithChanges()
{
$stream = new Stream('php://memory', 'wb+');
$message = $this->message->withBody($stream);
$this->assertNotSame($this->message, $message);
$this->assertSame($stream, $message->getBody());
}

public function testGetHeaderReturnsHeaderValueAsArray()
{
$message = $this->message->withHeader('X-Foo', ['Foo', 'Bar']);
$this->assertNotSame($this->message, $message);
$this->assertEquals(['Foo', 'Bar'], $message->getHeader('X-Foo'));
}

public function testGetHeaderLineReturnsHeaderValueAsCommaConcatenatedString()
{
$message = $this->message->withHeader('X-Foo', ['Foo', 'Bar']);
$this->assertNotSame($this->message, $message);
$this->assertEquals('Foo,Bar', $message->getHeaderLine('X-Foo'));
}

public function testGetHeadersKeepsHeaderCaseSensitivity()
{
$message = $this->message->withHeader('X-Foo', ['Foo', 'Bar']);
$this->assertNotSame($this->message, $message);
$this->assertEquals([ 'X-Foo' => [ 'Foo', 'Bar' ] ], $message->getHeaders());
}

public function testGetHeadersReturnsCaseWithWhichHeaderFirstRegistered()
{
$message = $this->message
Expand All @@ -76,18 +37,6 @@ public function testGetHeadersReturnsCaseWithWhichHeaderFirstRegistered()
$this->assertEquals([ 'X-Foo' => [ 'Foo', 'Bar' ] ], $message->getHeaders());
}

public function testHasHeaderReturnsFalseIfHeaderIsNotPresent()
{
$this->assertFalse($this->message->hasHeader('X-Foo'));
}

public function testHasHeaderReturnsTrueIfHeaderIsPresent()
{
$message = $this->message->withHeader('X-Foo', 'Foo');
$this->assertNotSame($this->message, $message);
$this->assertTrue($message->hasHeader('X-Foo'));
}

public function testAddHeaderAppendsToExistingHeader()
{
$message = $this->message->withHeader('X-Foo', 'Foo');
Expand All @@ -97,17 +46,6 @@ public function testAddHeaderAppendsToExistingHeader()
$this->assertEquals('Foo,Bar', $message2->getHeaderLine('X-Foo'));
}

public function testCanRemoveHeaders()
{
$message = $this->message->withHeader('X-Foo', 'Foo');
$this->assertNotSame($this->message, $message);
$this->assertTrue($message->hasHeader('x-foo'));
$message2 = $message->withoutHeader('x-foo');
$this->assertNotSame($this->message, $message2);
$this->assertNotSame($message, $message2);
$this->assertFalse($message2->hasHeader('X-Foo'));
}

public function testHeaderRemovalIsCaseInsensitive()
{
$message = $this->message
Expand Down Expand Up @@ -186,23 +124,11 @@ public function testWithoutHeaderDoesNothingIfHeaderDoesNotExist()
$this->assertFalse($message->hasHeader('X-Foo'));
}

public function testHeadersInitialization()
{
$headers = ['X-Foo' => ['bar']];
$this->message = new Request(null, null, $this->stream, $headers);
$this->assertSame($headers, $this->message->getHeaders());
}

public function testGetHeaderReturnsAnEmptyArrayWhenHeaderDoesNotExist()
{
$this->assertSame([], $this->message->getHeader('X-Foo-Bar'));
}

public function testGetHeaderLineReturnsNullWhenHeaderDoesNotExist()
{
$this->assertNull($this->message->getHeaderLine('X-Foo-Bar'));
}

public function headersWithInjectionVectors()
{
return [
Expand Down
144 changes: 8 additions & 136 deletions test/RequestTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,33 +9,27 @@

namespace ZendTest\Diactoros;

use Maks3w\Psr7Assertions\PhpUnit\RequestInterfaceTestsTrait;
use PHPUnit_Framework_TestCase as TestCase;
use Zend\Diactoros\Request;
use Zend\Diactoros\Stream;
use Zend\Diactoros\Uri;

class RequestTest extends TestCase
{
public function setUp()
{
$this->request = new Request();
}
use RequestInterfaceTestsTrait;

public function testMethodIsNullByDefault()
{
$this->assertNull($this->request->getMethod());
}
/** @var Request */
protected $request;

public function testMethodMutatorReturnsCloneWithChangedMethod()
public function setUp()
{
$request = $this->request->withMethod('GET');
$this->assertNotSame($this->request, $request);
$this->assertEquals('GET', $request->getMethod());
$this->request = $this->createDefaultRequest();
}

public function testUriIsNullByDefault()
protected function createDefaultRequest()
{
$this->assertNull($this->request->getUri());
return new Request();
}

public function testConstructorRaisesExceptionForInvalidStream()
Expand Down Expand Up @@ -269,128 +263,6 @@ public function testSettingNewUriResetsRequestTarget()
$newRequest = $request->withUri(new Uri('http://mwop.net/bar/baz'));
}

/**
* @group 39
*/
public function testGetHeadersContainsHostHeaderIfUriWithHostIsPresent()
{
$request = new Request('http://example.com');
$headers = $request->getHeaders();
$this->assertArrayHasKey('Host', $headers);
$this->assertContains('example.com', $headers['Host']);
}

/**
* @group 39
*/
public function testGetHeadersContainsNoHostHeaderIfNoUriPresent()
{
$request = new Request();
$headers = $request->getHeaders();
$this->assertArrayNotHasKey('Host', $headers);
}

/**
* @group 39
*/
public function testGetHeadersContainsNoHostHeaderIfUriDoesNotContainHost()
{
$request = new Request(new Uri());
$headers = $request->getHeaders();
$this->assertArrayNotHasKey('Host', $headers);
}

/**
* @group 39
*/
public function testGetHostHeaderReturnsUriHostWhenPresent()
{
$request = new Request('http://example.com');
$header = $request->getHeader('host');
$this->assertEquals(['example.com'], $header);
}

/**
* @group 39
*/
public function testGetHostHeaderReturnsEmptyArrayIfNoUriPresent()
{
$request = new Request();
$this->assertSame([], $request->getHeader('host'));
}

/**
* @group 39
*/
public function testGetHostHeaderReturnsEmptyArrayIfUriDoesNotContainHost()
{
$request = new Request(new Uri());
$this->assertSame([], $request->getHeader('host'));
}

/**
* @group 39
*/
public function testGetHostHeaderLineReturnsUriHostWhenPresent()
{
$request = new Request('http://example.com');
$header = $request->getHeaderLine('host');
$this->assertContains('example.com', $header);
}

/**
* @group 39
*/
public function testGetHostHeaderLineReturnsNullIfNoUriPresent()
{
$request = new Request();
$this->assertNull($request->getHeaderLine('host'));
}

/**
* @group 39
*/
public function testGetHostHeaderLineReturnsNullIfUriDoesNotContainHost()
{
$request = new Request(new Uri());
$this->assertNull($request->getHeaderLine('host'));
}

public function testPassingPreserveHostFlagWhenUpdatingUriDoesNotUpdateHostHeader()
{
$request = (new Request())
->withAddedHeader('Host', 'example.com');

$uri = (new Uri())->withHost('www.example.com');
$new = $request->withUri($uri, true);

$this->assertEquals('example.com', $new->getHeaderLine('Host'));
}

public function testNotPassingPreserveHostFlagWhenUpdatingUriWithoutHostDoesNotUpdateHostHeader()
{
$request = (new Request())
->withAddedHeader('Host', 'example.com');

$uri = new Uri();
$new = $request->withUri($uri);

$this->assertEquals('example.com', $new->getHeaderLine('Host'));
}

public function testHostHeaderUpdatesToUriHostAndPortWhenPreserveHostDisabledAndNonStandardPort()
{
$request = (new Request())
->withAddedHeader('Host', 'example.com');

$uri = (new Uri())
->withHost('www.example.com')
->withPort(10081);
$new = $request->withUri($uri);

$this->assertEquals('www.example.com:10081', $new->getHeaderLine('Host'));
}

public function headersWithInjectionVectors()
{
return [
Expand Down
Loading

0 comments on commit 37a18ab

Please sign in to comment.