From e58f5d28c2f7cf7204f3c1f95b5d9e52c7429159 Mon Sep 17 00:00:00 2001
From: Thomas Flori <t.flori@sportradar.com>
Date: Thu, 7 Mar 2024 14:00:44 +0100
Subject: [PATCH] fix dependencies and incompatibilites to new guzzle version

---
 .gitignore                   |  1 +
 composer.json                |  3 +--
 src/MessageTrait.php         | 26 ++++++++++++++------------
 src/Request.php              | 15 ++++++++-------
 src/Response.php             |  9 +++++----
 src/ServerRequest.php        | 26 ++++++++++++++------------
 tests/ClientRequestTest.php  | 10 +++-------
 tests/ClientResponseTest.php |  4 ++--
 tests/ServerResponseTest.php |  2 +-
 9 files changed, 49 insertions(+), 47 deletions(-)

diff --git a/.gitignore b/.gitignore
index c8153b5..8f7045c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
 /composer.lock
 /vendor/
+/.phpunit.result.cache
diff --git a/composer.json b/composer.json
index eed8fa3..664a226 100644
--- a/composer.json
+++ b/composer.json
@@ -10,8 +10,7 @@
         "coverage": "phpunit --stderr --coverage-text"
     },
     "require": {
-        "guzzlehttp/psr7": "^2.6.1",
-        "ralouphie/getallheaders": "^2.0.5"
+        "guzzlehttp/psr7": "^2.6.1"
     },
     "require-dev": {
         "phpunit/phpunit": "*",
diff --git a/src/MessageTrait.php b/src/MessageTrait.php
index 513154b..b9a784d 100644
--- a/src/MessageTrait.php
+++ b/src/MessageTrait.php
@@ -2,6 +2,8 @@
 
 namespace Tal;
 
+use GuzzleHttp\Psr7\Utils;
+use Psr\Http\Message\MessageInterface;
 use function GuzzleHttp\Psr7\stream_for;
 use Psr\Http\Message\StreamInterface;
 
@@ -22,12 +24,12 @@ trait MessageTrait
     /** @var StreamInterface */
     protected $stream;
 
-    public function getProtocolVersion()
+    public function getProtocolVersion(): string
     {
         return $this->protocol;
     }
 
-    public function withProtocolVersion($version)
+    public function withProtocolVersion($version): MessageInterface
     {
         if ($this->protocol === $version) {
             return $this;
@@ -37,17 +39,17 @@ trait MessageTrait
         return $new->setProtocolVersion($version);
     }
 
-    public function getHeaders()
+    public function getHeaders(): array
     {
         return $this->headers;
     }
 
-    public function hasHeader($header)
+    public function hasHeader($header): bool
     {
         return isset($this->headerNames[strtolower($header)]);
     }
 
-    public function getHeader($header)
+    public function getHeader($header): array
     {
         $header = strtolower($header);
 
@@ -60,24 +62,24 @@ trait MessageTrait
         return $this->headers[$header];
     }
 
-    public function getHeaderLine($header)
+    public function getHeaderLine($header): string
     {
         return implode(', ', $this->getHeader($header));
     }
 
-    public function withHeader($header, $value)
+    public function withHeader($header, $value): MessageInterface
     {
         $new = clone $this;
         return $new->setHeader($header, $value);
     }
 
-    public function withAddedHeader($header, $value)
+    public function withAddedHeader($header, $value): MessageInterface
     {
         $new = clone $this;
         return $new->addHeader($header, $value);
     }
 
-    public function withoutHeader($header)
+    public function withoutHeader($header): MessageInterface
     {
         $normalized = strtolower($header);
 
@@ -89,16 +91,16 @@ trait MessageTrait
         return $new->deleteHeader($header);
     }
 
-    public function getBody()
+    public function getBody(): StreamInterface
     {
         if (!$this->stream) {
-            $this->stream = stream_for('');
+            $this->stream = Utils::streamFor('');
         }
 
         return $this->stream;
     }
 
-    public function withBody(StreamInterface $body)
+    public function withBody(StreamInterface $body): MessageInterface
     {
         if ($body === $this->stream) {
             return $this;
diff --git a/src/Request.php b/src/Request.php
index a2ba489..f91a61f 100644
--- a/src/Request.php
+++ b/src/Request.php
@@ -2,6 +2,7 @@
 
 namespace Tal;
 
+use GuzzleHttp\Psr7\Utils;
 use function GuzzleHttp\Psr7\stream_for;
 use GuzzleHttp\Psr7\Uri;
 use InvalidArgumentException;
@@ -53,11 +54,11 @@ abstract class Request implements RequestInterface
         }
 
         if ($body !== '' && $body !== null) {
-            $this->stream = stream_for($body);
+            $this->stream = Utils::streamFor($body);
         }
     }
 
-    public function getRequestTarget()
+    public function getRequestTarget(): string
     {
         if ($this->requestTarget !== null) {
             return $this->requestTarget;
@@ -74,29 +75,29 @@ abstract class Request implements RequestInterface
         return $target;
     }
 
-    public function withRequestTarget($requestTarget)
+    public function withRequestTarget(string $requestTarget): RequestInterface
     {
         $new = clone $this;
         return $new->setRequestTarget($requestTarget);
     }
 
-    public function getMethod()
+    public function getMethod(): string
     {
         return $this->method;
     }
 
-    public function withMethod($method)
+    public function withMethod(string $method): RequestInterface
     {
         $new = clone $this;
         return $new->setMethod($method);
     }
 
-    public function getUri()
+    public function getUri(): UriInterface
     {
         return $this->uri;
     }
 
-    public function withUri(UriInterface $uri, $preserveHost = false)
+    public function withUri(UriInterface $uri, bool $preserveHost = false): RequestInterface
     {
         if ($uri === $this->uri) {
             return $this;
diff --git a/src/Response.php b/src/Response.php
index 20b8ff4..96e9f44 100644
--- a/src/Response.php
+++ b/src/Response.php
@@ -2,6 +2,7 @@
 
 namespace Tal;
 
+use GuzzleHttp\Psr7\Utils;
 use function GuzzleHttp\Psr7\stream_for;
 use Psr\Http\Message\ResponseInterface;
 use Psr\Http\Message\StreamInterface;
@@ -98,7 +99,7 @@ abstract class Response implements ResponseInterface
         $this->statusCode = (int) $status;
 
         if ($body !== '' && $body !== null) {
-            $this->stream = stream_for($body);
+            $this->stream = Utils::streamFor($body);
         }
 
         $this->setHeaders($headers);
@@ -111,17 +112,17 @@ abstract class Response implements ResponseInterface
         $this->protocol = $version;
     }
 
-    public function getStatusCode()
+    public function getStatusCode(): int
     {
         return $this->statusCode;
     }
 
-    public function getReasonPhrase()
+    public function getReasonPhrase(): string
     {
         return $this->reasonPhrase;
     }
 
-    public function withStatus($code, $reasonPhrase = '')
+    public function withStatus(int $code, string $reasonPhrase = ''): ResponseInterface
     {
         $new = clone $this;
         return $new->setStatus($code, $reasonPhrase);
diff --git a/src/ServerRequest.php b/src/ServerRequest.php
index 5d1ccc3..c9bd025 100644
--- a/src/ServerRequest.php
+++ b/src/ServerRequest.php
@@ -7,6 +7,8 @@ use GuzzleHttp\Psr7\LazyOpenStream;
 use GuzzleHttp\Psr7\UploadedFile;
 use GuzzleHttp\Psr7\Uri;
 use InvalidArgumentException;
+use Psr\Http\Message\RequestInterface;
+use Psr\Http\Message\ServerRequestInterface as PsrServerRequestInterface;
 use Psr\Http\Message\UriInterface;
 use Psr\Http\Message\StreamInterface;
 use Psr\Http\Message\UploadedFileInterface;
@@ -234,7 +236,7 @@ class ServerRequest extends Request implements ServerRequestInterface
     /**
      * {@inheritdoc}
      */
-    public function getServerParams()
+    public function getServerParams(): array
     {
         return $this->serverParams;
     }
@@ -242,7 +244,7 @@ class ServerRequest extends Request implements ServerRequestInterface
     /**
      * {@inheritdoc}
      */
-    public function getUploadedFiles()
+    public function getUploadedFiles(): array
     {
         return $this->uploadedFiles;
     }
@@ -250,7 +252,7 @@ class ServerRequest extends Request implements ServerRequestInterface
     /**
      * {@inheritdoc}
      */
-    public function withUploadedFiles(array $uploadedFiles)
+    public function withUploadedFiles(array $uploadedFiles): PsrServerRequestInterface
     {
         $new = clone $this;
         $new->uploadedFiles = $uploadedFiles;
@@ -261,7 +263,7 @@ class ServerRequest extends Request implements ServerRequestInterface
     /**
      * {@inheritdoc}
      */
-    public function getCookieParams()
+    public function getCookieParams(): array
     {
         return $this->cookieParams;
     }
@@ -269,7 +271,7 @@ class ServerRequest extends Request implements ServerRequestInterface
     /**
      * {@inheritdoc}
      */
-    public function withCookieParams(array $cookies)
+    public function withCookieParams(array $cookies): PsrServerRequestInterface
     {
         $new = clone $this;
         $new->cookieParams = $cookies;
@@ -280,7 +282,7 @@ class ServerRequest extends Request implements ServerRequestInterface
     /**
      * {@inheritdoc}
      */
-    public function getQueryParams()
+    public function getQueryParams(): array
     {
         return $this->queryParams;
     }
@@ -288,7 +290,7 @@ class ServerRequest extends Request implements ServerRequestInterface
     /**
      * {@inheritdoc}
      */
-    public function withQueryParams(array $query)
+    public function withQueryParams(array $query): PsrServerRequestInterface
     {
         $new = clone $this;
         $new->queryParams = $query;
@@ -307,7 +309,7 @@ class ServerRequest extends Request implements ServerRequestInterface
     /**
      * {@inheritdoc}
      */
-    public function withParsedBody($data)
+    public function withParsedBody($data): PsrServerRequestInterface
     {
         $new = clone $this;
         $new->parsedBody = $data;
@@ -318,7 +320,7 @@ class ServerRequest extends Request implements ServerRequestInterface
     /**
      * {@inheritdoc}
      */
-    public function getAttributes()
+    public function getAttributes(): array
     {
         return $this->attributes;
     }
@@ -326,7 +328,7 @@ class ServerRequest extends Request implements ServerRequestInterface
     /**
      * {@inheritdoc}
      */
-    public function getAttribute($attribute, $default = null)
+    public function getAttribute(string $attribute, $default = null)
     {
         if (false === array_key_exists($attribute, $this->attributes)) {
             return $default;
@@ -338,7 +340,7 @@ class ServerRequest extends Request implements ServerRequestInterface
     /**
      * {@inheritdoc}
      */
-    public function withAttribute($attribute, $value)
+    public function withAttribute(string $attribute, $value): PsrServerRequestInterface
     {
         $new = clone $this;
         $new->attributes[$attribute] = $value;
@@ -349,7 +351,7 @@ class ServerRequest extends Request implements ServerRequestInterface
     /**
      * {@inheritdoc}
      */
-    public function withoutAttribute($attribute)
+    public function withoutAttribute(string $attribute): PsrServerRequestInterface
     {
         if (false === array_key_exists($attribute, $this->attributes)) {
             return $this;
diff --git a/tests/ClientRequestTest.php b/tests/ClientRequestTest.php
index c35d1ba..07c74e1 100644
--- a/tests/ClientRequestTest.php
+++ b/tests/ClientRequestTest.php
@@ -22,11 +22,9 @@ class RequestTest extends TestCase
         $this->assertSame($uri, $r->getUri());
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testValidateRequestUri()
     {
+        $this->expectException(\InvalidArgumentException::class);
         new Request('GET', '///');
     }
 
@@ -54,7 +52,7 @@ class RequestTest extends TestCase
     public function testConstructorDoesNotReadStreamBody()
     {
         $streamIsRead = false;
-        $body = Psr7\FnStream::decorate(Psr7\stream_for(''), [
+        $body = Psr7\FnStream::decorate(Psr7\Utils::streamFor(''), [
             '__toString' => function () use (&$streamIsRead) {
                 $streamIsRead = true;
                 return '';
@@ -104,11 +102,9 @@ class RequestTest extends TestCase
         $this->assertEquals('/', $r1->getRequestTarget());
     }
 
-    /**
-     * @expectedException \InvalidArgumentException
-     */
     public function testRequestTargetDoesNotAllowSpaces()
     {
+        $this->expectException(\InvalidArgumentException::class);
         $r1 = new Request('GET', '/');
         $r1->withRequestTarget('/foo bar');
     }
diff --git a/tests/ClientResponseTest.php b/tests/ClientResponseTest.php
index 7b89db4..936ff72 100644
--- a/tests/ClientResponseTest.php
+++ b/tests/ClientResponseTest.php
@@ -29,7 +29,7 @@ class ClientResponseTest extends TestCase
     public function testConstructorDoesNotReadStreamBody()
     {
         $streamIsRead = false;
-        $body = Psr7\FnStream::decorate(Psr7\stream_for(''), [
+        $body = Psr7\FnStream::decorate(Psr7\Utils::streamFor(''), [
             '__toString' => function () use (&$streamIsRead) {
                 $streamIsRead = true;
                 return '';
@@ -137,7 +137,7 @@ class ClientResponseTest extends TestCase
 
     public function testWithBody()
     {
-        $b = Psr7\stream_for('0');
+        $b = Psr7\Utils::streamFor('0');
         $r = (new Response())->withBody($b);
         $this->assertInstanceOf('Psr\Http\Message\StreamInterface', $r->getBody());
         $this->assertSame('0', (string) $r->getBody());
diff --git a/tests/ServerResponseTest.php b/tests/ServerResponseTest.php
index 2092873..e2a4e05 100644
--- a/tests/ServerResponseTest.php
+++ b/tests/ServerResponseTest.php
@@ -16,7 +16,7 @@ class ServerResponseTest extends MockeryTestCase
     /**
      * @inheritDoc
      */
-    protected function setUp()
+    protected function setUp(): void
     {
         $this->server = m::mock(Server::class);
         $this->server->shouldReceive('header')->byDefault();
-- 
GitLab