From 5427ee385dc2ff117a1130eb606f78e708949c8f Mon Sep 17 00:00:00 2001 From: Igor Scheller Date: Thu, 16 Aug 2018 18:13:53 +0200 Subject: Made Engelsystem\Http\Request PSR-7 RequestInterface compatible --- tests/Unit/Http/MessageTraitRequestTest.php | 50 +++++++ tests/Unit/Http/MessageTraitResponseTest.php | 159 +++++++++++++++++++++ tests/Unit/Http/MessageTraitTest.php | 159 --------------------- tests/Unit/Http/RequestTest.php | 90 ++++++++++++ .../Unit/Http/Stub/MessageTraitImplementation.php | 12 -- .../Stub/MessageTraitRequestImplementation.php | 12 ++ .../Stub/MessageTraitResponseImplementation.php | 12 ++ 7 files changed, 323 insertions(+), 171 deletions(-) create mode 100644 tests/Unit/Http/MessageTraitRequestTest.php create mode 100644 tests/Unit/Http/MessageTraitResponseTest.php delete mode 100644 tests/Unit/Http/MessageTraitTest.php delete mode 100644 tests/Unit/Http/Stub/MessageTraitImplementation.php create mode 100644 tests/Unit/Http/Stub/MessageTraitRequestImplementation.php create mode 100644 tests/Unit/Http/Stub/MessageTraitResponseImplementation.php (limited to 'tests/Unit') diff --git a/tests/Unit/Http/MessageTraitRequestTest.php b/tests/Unit/Http/MessageTraitRequestTest.php new file mode 100644 index 00000000..7430b5d7 --- /dev/null +++ b/tests/Unit/Http/MessageTraitRequestTest.php @@ -0,0 +1,50 @@ +withProtocolVersion('0.1'); + $this->assertNotEquals($message, $newMessage); + $this->assertEquals('0.1', $newMessage->getProtocolVersion()); + } + + /** + * @covers \Engelsystem\Http\MessageTrait::getHeaders + */ + public function testGetHeaders() + { + $message = new MessageTraitRequestImplementation(); + $newMessage = $message->withHeader('lorem', 'ipsum'); + + $this->assertNotEquals($message, $newMessage); + $this->assertArraySubset(['lorem' => ['ipsum']], $newMessage->getHeaders()); + } + + /** + * @covers \Engelsystem\Http\MessageTrait::withBody + */ + public function testWithBody() + { + /** @var Stream $stream */ + $stream = new Stream('php://memory', 'wb+'); + $stream->write('Test content'); + $stream->rewind(); + + $message = new MessageTraitRequestImplementation(); + $newMessage = $message->withBody($stream); + + $this->assertNotEquals($message, $newMessage); + $this->assertEquals('Test content', $newMessage->getContent()); + } +} diff --git a/tests/Unit/Http/MessageTraitResponseTest.php b/tests/Unit/Http/MessageTraitResponseTest.php new file mode 100644 index 00000000..f60360a3 --- /dev/null +++ b/tests/Unit/Http/MessageTraitResponseTest.php @@ -0,0 +1,159 @@ +assertInstanceOf(MessageInterface::class, $message); + $this->assertInstanceOf(SymfonyResponse::class, $message); + } + + /** + * @covers \Engelsystem\Http\MessageTrait::getProtocolVersion + * @covers \Engelsystem\Http\MessageTrait::withProtocolVersion + */ + public function testGetProtocolVersion() + { + $message = new MessageTraitResponseImplementation(); + $newMessage = $message->withProtocolVersion('0.1'); + $this->assertNotEquals($message, $newMessage); + $this->assertEquals('0.1', $newMessage->getProtocolVersion()); + } + + /** + * @covers \Engelsystem\Http\MessageTrait::getHeaders + */ + public function testGetHeaders() + { + $message = new MessageTraitResponseImplementation(); + $newMessage = $message->withHeader('Foo', 'bar'); + + $this->assertNotEquals($message, $newMessage); + $this->assertArraySubset(['Foo' => ['bar']], $newMessage->getHeaders()); + + $newMessage = $message->withHeader('lorem', ['ipsum', 'dolor']); + $this->assertArraySubset(['lorem' => ['ipsum', 'dolor']], $newMessage->getHeaders()); + } + + /** + * @covers \Engelsystem\Http\MessageTrait::hasHeader + */ + public function testHasHeader() + { + $message = new MessageTraitResponseImplementation(); + $this->assertFalse($message->hasHeader('test')); + + $newMessage = $message->withHeader('test', '12345'); + $this->assertTrue($newMessage->hasHeader('Test')); + $this->assertTrue($newMessage->hasHeader('test')); + } + + /** + * @covers \Engelsystem\Http\MessageTrait::getHeader + */ + public function testGetHeader() + { + $message = new MessageTraitResponseImplementation(); + $newMessage = $message->withHeader('foo', 'bar'); + + $this->assertEquals(['bar'], $newMessage->getHeader('Foo')); + $this->assertEquals([], $newMessage->getHeader('LoremIpsum')); + } + + /** + * @covers \Engelsystem\Http\MessageTrait::getHeaderLine + */ + public function testGetHeaderLine() + { + $message = new MessageTraitResponseImplementation(); + $newMessage = $message->withHeader('foo', ['bar', 'bla']); + + $this->assertEquals('', $newMessage->getHeaderLine('Lorem-Ipsum')); + $this->assertEquals('bar,bla', $newMessage->getHeaderLine('Foo')); + } + + /** + * @covers \Engelsystem\Http\MessageTrait::withHeader + */ + public function testWithHeader() + { + $message = new MessageTraitResponseImplementation(); + $newMessage = $message->withHeader('foo', 'bar'); + + $this->assertNotEquals($message, $newMessage); + $this->assertArraySubset(['foo' => ['bar']], $newMessage->getHeaders()); + + $newMessage = $newMessage->withHeader('Foo', ['lorem', 'ipsum']); + $this->assertArraySubset(['Foo' => ['lorem', 'ipsum']], $newMessage->getHeaders()); + } + + /** + * @covers \Engelsystem\Http\MessageTrait::withAddedHeader + */ + public function testWithAddedHeader() + { + $message = new MessageTraitResponseImplementation(); + $newMessage = $message->withHeader('foo', 'bar'); + + $this->assertNotEquals($message, $newMessage); + $this->assertArraySubset(['foo' => ['bar']], $newMessage->getHeaders()); + + $newMessage = $newMessage->withAddedHeader('Foo', ['lorem', 'ipsum']); + $this->assertArraySubset(['Foo' => ['bar', 'lorem', 'ipsum']], $newMessage->getHeaders()); + } + + /** + * @covers \Engelsystem\Http\MessageTrait::withoutHeader + */ + public function testWithoutHeader() + { + $message = (new MessageTraitResponseImplementation())->withHeader('foo', 'bar'); + $this->assertTrue($message->hasHeader('foo')); + + $newMessage = $message->withoutHeader('Foo'); + $this->assertNotEquals($message, $newMessage); + $this->assertFalse($newMessage->hasHeader('foo')); + } + + /** + * @covers \Engelsystem\Http\MessageTrait::getBody + */ + public function testGetBody() + { + $message = (new MessageTraitResponseImplementation())->setContent('Foo bar!'); + $body = $message->getBody(); + + $this->assertInstanceOf(StreamInterface::class, $body); + $this->assertEquals('Foo bar!', $body->getContents()); + } + + /** + * @covers \Engelsystem\Http\MessageTrait::withBody + */ + public function testWithBody() + { + /** @var Stream $stream */ + $stream = new Stream('php://memory', 'wb+'); + $stream->write('Test content'); + $stream->rewind(); + + $message = new MessageTraitResponseImplementation(); + $newMessage = $message->withBody($stream); + + $this->assertNotEquals($message, $newMessage); + $this->assertEquals('Test content', $newMessage->getContent()); + } +} diff --git a/tests/Unit/Http/MessageTraitTest.php b/tests/Unit/Http/MessageTraitTest.php deleted file mode 100644 index 46076a67..00000000 --- a/tests/Unit/Http/MessageTraitTest.php +++ /dev/null @@ -1,159 +0,0 @@ -assertInstanceOf(MessageInterface::class, $message); - $this->assertInstanceOf(SymfonyResponse::class, $message); - } - - /** - * @covers \Engelsystem\Http\MessageTrait::getProtocolVersion - * @covers \Engelsystem\Http\MessageTrait::withProtocolVersion - */ - public function testGetProtocolVersion() - { - $message = new MessageTraitImplementation(); - $newMessage = $message->withProtocolVersion('0.1'); - $this->assertNotEquals($message, $newMessage); - $this->assertEquals('0.1', $newMessage->getProtocolVersion()); - } - - /** - * @covers \Engelsystem\Http\MessageTrait::getHeaders - */ - public function testGetHeaders() - { - $message = new MessageTraitImplementation(); - $newMessage = $message->withHeader('Foo', 'bar'); - - $this->assertNotEquals($message, $newMessage); - $this->assertArraySubset(['Foo' => ['bar']], $newMessage->getHeaders()); - - $newMessage = $message->withHeader('lorem', ['ipsum', 'dolor']); - $this->assertArraySubset(['lorem' => ['ipsum', 'dolor']], $newMessage->getHeaders()); - } - - /** - * @covers \Engelsystem\Http\MessageTrait::hasHeader - */ - public function testHasHeader() - { - $message = new MessageTraitImplementation(); - $this->assertFalse($message->hasHeader('test')); - - $newMessage = $message->withHeader('test', '12345'); - $this->assertTrue($newMessage->hasHeader('Test')); - $this->assertTrue($newMessage->hasHeader('test')); - } - - /** - * @covers \Engelsystem\Http\MessageTrait::getHeader - */ - public function testGetHeader() - { - $message = new MessageTraitImplementation(); - $newMessage = $message->withHeader('foo', 'bar'); - - $this->assertEquals(['bar'], $newMessage->getHeader('Foo')); - $this->assertEquals([], $newMessage->getHeader('LoremIpsum')); - } - - /** - * @covers \Engelsystem\Http\MessageTrait::getHeaderLine - */ - public function testGetHeaderLine() - { - $message = new MessageTraitImplementation(); - $newMessage = $message->withHeader('foo', ['bar', 'bla']); - - $this->assertEquals('', $newMessage->getHeaderLine('Lorem-Ipsum')); - $this->assertEquals('bar,bla', $newMessage->getHeaderLine('Foo')); - } - - /** - * @covers \Engelsystem\Http\MessageTrait::withHeader - */ - public function testWithHeader() - { - $message = new MessageTraitImplementation(); - $newMessage = $message->withHeader('foo', 'bar'); - - $this->assertNotEquals($message, $newMessage); - $this->assertArraySubset(['foo' => ['bar']], $newMessage->getHeaders()); - - $newMessage = $newMessage->withHeader('Foo', ['lorem', 'ipsum']); - $this->assertArraySubset(['Foo' => ['lorem', 'ipsum']], $newMessage->getHeaders()); - } - - /** - * @covers \Engelsystem\Http\MessageTrait::withAddedHeader - */ - public function testWithAddedHeader() - { - $message = new MessageTraitImplementation(); - $newMessage = $message->withHeader('foo', 'bar'); - - $this->assertNotEquals($message, $newMessage); - $this->assertArraySubset(['foo' => ['bar']], $newMessage->getHeaders()); - - $newMessage = $newMessage->withAddedHeader('Foo', ['lorem', 'ipsum']); - $this->assertArraySubset(['Foo' => ['bar', 'lorem', 'ipsum']], $newMessage->getHeaders()); - } - - /** - * @covers \Engelsystem\Http\MessageTrait::withoutHeader - */ - public function testWithoutHeader() - { - $message = (new MessageTraitImplementation())->withHeader('foo', 'bar'); - $this->assertTrue($message->hasHeader('foo')); - - $newMessage = $message->withoutHeader('Foo'); - $this->assertNotEquals($message, $newMessage); - $this->assertFalse($newMessage->hasHeader('foo')); - } - - /** - * @covers \Engelsystem\Http\MessageTrait::getBody - */ - public function testGetBody() - { - $message = (new MessageTraitImplementation())->setContent('Foo bar!'); - $body = $message->getBody(); - - $this->assertInstanceOf(StreamInterface::class, $body); - $this->assertEquals('Foo bar!', $body->getContents()); - } - - /** - * @covers \Engelsystem\Http\MessageTrait::withBody - */ - public function testWithBody() - { - /** @var Stream $stream */ - $stream = new Stream('php://memory', 'wb+'); - $stream->write('Test content'); - $stream->rewind(); - - $message = new MessageTraitImplementation(); - $newMessage = $message->withBody($stream); - - $this->assertNotEquals($message, $newMessage); - $this->assertEquals('Test content', $newMessage->getContent()); - } -} diff --git a/tests/Unit/Http/RequestTest.php b/tests/Unit/Http/RequestTest.php index f8444b84..f7d69aff 100644 --- a/tests/Unit/Http/RequestTest.php +++ b/tests/Unit/Http/RequestTest.php @@ -5,6 +5,8 @@ namespace Engelsystem\Test\Unit\Http; use Engelsystem\Http\Request; use PHPUnit\Framework\TestCase; use PHPUnit_Framework_MockObject_MockObject as MockObject; +use Psr\Http\Message\RequestInterface; +use Psr\Http\Message\UriInterface; use Symfony\Component\HttpFoundation\Request as SymfonyRequest; class RequestTest extends TestCase @@ -16,6 +18,7 @@ class RequestTest extends TestCase { $response = new Request(); $this->assertInstanceOf(SymfonyRequest::class, $response); + $this->assertInstanceOf(RequestInterface::class, $response); } /** @@ -106,4 +109,91 @@ class RequestTest extends TestCase $this->assertEquals('http://foo.bar/bla/foo', $request->url()); $this->assertEquals('https://lorem.ipsum/dolor/sit', $request->url()); } + + /** + * @covers \Engelsystem\Http\Request::getRequestTarget + */ + public function testGetRequestTarget() + { + /** @var Request|MockObject $request */ + $request = $this + ->getMockBuilder(Request::class) + ->setMethods(['getQueryString', 'path']) + ->getMock(); + + $request->expects($this->exactly(2)) + ->method('getQueryString') + ->willReturnOnConsecutiveCalls(null, 'foo=bar&lorem=ipsum'); + $request->expects($this->exactly(2)) + ->method('path') + ->willReturn('foo/bar'); + + $this->assertEquals('/foo/bar', $request->getRequestTarget()); + $this->assertEquals('/foo/bar?foo=bar&lorem=ipsum', $request->getRequestTarget()); + } + + /** + * @covers \Engelsystem\Http\Request::withRequestTarget + */ + public function testWithRequestTarget() + { + $request = new Request(); + foreach ( + [ + '*', + '/foo/bar', + 'https://lorem.ipsum/test?lor=em' + ] as $target + ) { + $new = $request->withRequestTarget($target); + $this->assertNotEquals($request, $new); + } + } + + /** + * @covers \Engelsystem\Http\Request::withMethod + */ + public function testWithMethod() + { + $request = new Request(); + + $new = $request->withMethod('PUT'); + + $this->assertNotEquals($request, $new); + $this->assertEquals('PUT', $new->getMethod()); + } + + /** + * @covers \Engelsystem\Http\Request::withUri + */ + public function testWithUri() + { + /** @var UriInterface|MockObject $uri */ + $uri = $this->getMockForAbstractClass(UriInterface::class); + + $uri->expects($this->atLeastOnce()) + ->method('__toString') + ->willReturn('http://foo.bar/bla?foo=bar'); + + $request = Request::create('http://lor.em/'); + + $new = $request->withUri($uri); + $this->assertNotEquals($request, $new); + $this->assertEquals('http://foo.bar/bla?foo=bar', (string)$new->getUri()); + + $new = $request->withUri($uri, true); + $this->assertEquals('http://lor.em/bla?foo=bar', (string)$new->getUri()); + } + + /** + * @covers \Engelsystem\Http\Request::getUri + */ + public function testGetUri() + { + $request = Request::create('http://lor.em/test?bla=foo'); + + $uri = $request->getUri(); + $this->assertInstanceOf(UriInterface::class, $uri); + $this->assertEquals('http://lor.em/test?bla=foo', (string)$uri); + } } diff --git a/tests/Unit/Http/Stub/MessageTraitImplementation.php b/tests/Unit/Http/Stub/MessageTraitImplementation.php deleted file mode 100644 index d78fd0b2..00000000 --- a/tests/Unit/Http/Stub/MessageTraitImplementation.php +++ /dev/null @@ -1,12 +0,0 @@ -