From 39b8ab9693413739071f4364bffe7d660e586729 Mon Sep 17 00:00:00 2001 From: Mike's Pub Date: Sun, 17 Dec 2023 13:38:37 +0100 Subject: [PATCH] Update dependencies + add support for psr/http-message 2.x (#27) * update dependencies * baseline of phpstan mess for factory * update docs * update github actions * remove .gitremotes --- .github/workflows/main.yaml | 17 +++++------ .php_cs => .php-cs-fixer.php | 0 CHANGELOG.md | 6 ++++ composer.json | 27 ++++++++--------- phpstan-baseline.neon | 36 ++++++++++++++++++++++ phpstan.neon | 6 ++++ phpunit.xml.dist | 37 ++++++++++------------- src/Factory.php | 6 ++++ src/FactoryDiscovery.php | 14 ++++----- src/HttpErrorException.php | 2 +- src/RequestHandlerContainer.php | 2 +- tests/Assets/RequestHandlerController.php | 5 +++ tests/Assets/TestCase.php | 18 +++++++++++ tests/Factory/FactoryDiactorosTest.php | 12 ++++---- tests/Factory/FactorySunriseTest.php | 8 ++--- 15 files changed, 131 insertions(+), 65 deletions(-) rename .php_cs => .php-cs-fixer.php (100%) create mode 100644 phpstan-baseline.neon create mode 100644 tests/Assets/TestCase.php diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index e13e54c..bf01580 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -13,14 +13,14 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Validate composer.json and composer.lock run: composer validate - name: Cache Composer packages id: composer-cache - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: vendor key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }} @@ -41,18 +41,15 @@ jobs: strategy: matrix: php: - - 7.2 - - 7.3 - - 7.4 + - 8.1 + - 8.2 + - 8.3 composer-args: [ "" ] - include: - - php: 8.0 - composer-args: --ignore-platform-reqs fail-fast: false steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Install PHP uses: shivammathur/setup-php@v2 @@ -60,7 +57,7 @@ jobs: php-version: ${{ matrix.php }} - name: Cache PHP dependencies - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: vendor key: ${{ runner.os }}-php-${{ matrix.php }}-composer-${{ hashFiles('**/composer.json') }} diff --git a/.php_cs b/.php-cs-fixer.php similarity index 100% rename from .php_cs rename to .php-cs-fixer.php diff --git a/CHANGELOG.md b/CHANGELOG.md index 87342fa..5a63d04 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). +## [3.4.0] - 2023-12-15 +### Added +- Support for psr/http-message 2.x (if you don't use slim/psr7 or sunrise/http-message as factory) +### Changed +- Updated dependencies and tests + ## [3.3.0] - 2021-07-04 ### Added - Support for psr/container v2.x [#26] diff --git a/composer.json b/composer.json index 811cec9..cb08d2b 100644 --- a/composer.json +++ b/composer.json @@ -16,26 +16,23 @@ "issues": "https://github.com/middlewares/utils/issues" }, "require": { - "php": "^7.2 || ^8.0", - "psr/http-message": "^1.0", + "php": ">=8.1", + "psr/http-message": "^1.0 || ^2.0", "psr/http-server-middleware": "^1.0", "psr/container": "^1.0 || ^2.0", "psr/http-factory": "^1.0" }, "require-dev": { - "phpunit/phpunit": "^8|^9", - "phpstan/phpstan": "^0.12", - "laminas/laminas-diactoros": "^2.4", - "friendsofphp/php-cs-fixer": "^v2.16", - "oscarotero/php-cs-fixer-config": "^1.0", - "squizlabs/php_codesniffer": "^3.5", - "slim/psr7": "^1.4", - "guzzlehttp/psr7": "^2.0", - "sunrise/stream": "^1.0.15", - "sunrise/uri": "^1.0.15", - "sunrise/http-message": "^1.0", - "sunrise/http-server-request": "^1.0", - "nyholm/psr7": "^1.0" + "phpunit/phpunit": "^10.5", + "phpstan/phpstan": "^1.10", + "laminas/laminas-diactoros": "^3.3", + "friendsofphp/php-cs-fixer": "^3.41", + "oscarotero/php-cs-fixer-config": "^2.0", + "squizlabs/php_codesniffer": "^3.8", + "slim/psr7": "^1.6", + "guzzlehttp/psr7": "^2.6", + "sunrise/http-message": "^3.0", + "nyholm/psr7": "^1.8" }, "autoload": { "psr-4": { diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon new file mode 100644 index 0000000..2dc90b4 --- /dev/null +++ b/phpstan-baseline.neon @@ -0,0 +1,36 @@ +parameters: + ignoreErrors: + - + message: "#^Unsafe usage of new static\\(\\)\\.$#" + count: 1 + path: src/Dispatcher.php + + - + message: "#^Negated boolean expression is always false\\.$#" + count: 1 + path: src/Factory.php + + - + message: "#^Method Middlewares\\\\Utils\\\\FactoryDiscovery\\:\\:getFactory\\(\\) has no return type specified\\.$#" + count: 1 + path: src/FactoryDiscovery.php + + - + message: "#^Parameter \\#1 \\$class of function class_exists expects string, array\\\\|string given\\.$#" + count: 1 + path: src/FactoryDiscovery.php + + - + message: "#^Property Middlewares\\\\Utils\\\\FactoryDiscovery\\:\\:\\$factory has no type specified\\.$#" + count: 1 + path: src/FactoryDiscovery.php + + - + message: "#^Unsafe usage of new static\\(\\)\\.$#" + count: 1 + path: src/HttpErrorException.php + + - + message: "#^Method Middlewares\\\\Utils\\\\RequestHandlerContainer\\:\\:resolve\\(\\) has no return type specified\\.$#" + count: 1 + path: src/RequestHandlerContainer.php diff --git a/phpstan.neon b/phpstan.neon index 8dde912..9b59a57 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -1,3 +1,9 @@ +# +# phpstan at max level leaves a mess for factory +# +includes: + - phpstan-baseline.neon + parameters: level: max checkMissingIterableValueType: false diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 64510b7..9d272da 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -1,23 +1,18 @@ - - - - ./src - - - ./tests - ./vendor - - - - - tests - - + + + + + tests + + + + + ./src + + + ./tests + ./vendor + + diff --git a/src/Factory.php b/src/Factory.php index 0d3f20b..75b5852 100644 --- a/src/Factory.php +++ b/src/Factory.php @@ -43,6 +43,9 @@ public static function getRequestFactory(): RequestFactoryInterface return self::getFactory()->getRequestFactory(); } + /** + * @param UriInterface|string $uri + */ public static function createRequest(string $method, $uri): RequestInterface { return self::getRequestFactory()->createRequest($method, $uri); @@ -63,6 +66,9 @@ public static function getServerRequestFactory(): ServerRequestFactoryInterface return self::getFactory()->getServerRequestFactory(); } + /** + * @param UriInterface|string $uri + */ public static function createServerRequest(string $method, $uri, array $serverParams = []): ServerRequestInterface { return self::getServerRequestFactory()->createServerRequest($method, $uri, $serverParams); diff --git a/src/FactoryDiscovery.php b/src/FactoryDiscovery.php index b871c68..87c7484 100644 --- a/src/FactoryDiscovery.php +++ b/src/FactoryDiscovery.php @@ -26,7 +26,7 @@ class FactoryDiscovery implements FactoryInterface 'uri' => '\Laminas\Diactoros\UriFactory', ]; - /** @var array */ + /** @var string */ public const GUZZLE = '\GuzzleHttp\Psr7\HttpFactory'; /** @var array */ @@ -39,20 +39,20 @@ class FactoryDiscovery implements FactoryInterface 'uri' => '\Slim\Psr7\Factory\UriFactory', ]; - /** @var array */ + /** @var string */ public const NYHOLM = '\Nyholm\Psr7\Factory\Psr17Factory'; /** @var array */ public const SUNRISE = [ 'request' => '\Sunrise\Http\Message\RequestFactory', 'response' => '\Sunrise\Http\Message\ResponseFactory', - 'serverRequest' => '\Sunrise\Http\ServerRequest\ServerRequestFactory', - 'stream' => '\Sunrise\Stream\StreamFactory', - 'uploadedFile' => '\Sunrise\Http\ServerRequest\UploadedFileFactory', - 'uri' => '\Sunrise\Uri\UriFactory', + 'serverRequest' => '\Sunrise\Http\Message\ServerRequestFactory', + 'stream' => '\Sunrise\Http\Message\StreamFactory', + 'uploadedFile' => '\Sunrise\Http\Message\UploadedFileFactory', + 'uri' => '\Sunrise\Http\Message\UriFactory', ]; - /** @var array> */ + /** @var array|string> */ private $strategies = [ self::DIACTOROS, self::GUZZLE, diff --git a/src/HttpErrorException.php b/src/HttpErrorException.php index 8366d67..e2df49f 100644 --- a/src/HttpErrorException.php +++ b/src/HttpErrorException.php @@ -9,7 +9,7 @@ class HttpErrorException extends Exception { - /** @var array */ + /** @var array */ private static $phrases = [ // CLIENT ERROR 400 => 'Bad Request', diff --git a/src/RequestHandlerContainer.php b/src/RequestHandlerContainer.php index c4c21e0..346437a 100644 --- a/src/RequestHandlerContainer.php +++ b/src/RequestHandlerContainer.php @@ -36,7 +36,7 @@ public function has($id): bool } /** - * @param mixed $id + * @param string $id * @return RequestHandlerInterface */ public function get($id) diff --git a/tests/Assets/RequestHandlerController.php b/tests/Assets/RequestHandlerController.php index d37ff29..624edfd 100644 --- a/tests/Assets/RequestHandlerController.php +++ b/tests/Assets/RequestHandlerController.php @@ -11,5 +11,10 @@ final class RequestHandlerController implements RequestHandlerInterface { public function handle(ServerRequestInterface $request): ResponseInterface { + $testcase = new TestCase('controller'); + /** @var ResponseInterface $stub */ + $stub = $testcase->makeStub(ResponseInterface::class); + + return $stub; } } diff --git a/tests/Assets/TestCase.php b/tests/Assets/TestCase.php new file mode 100644 index 0000000..4301050 --- /dev/null +++ b/tests/Assets/TestCase.php @@ -0,0 +1,18 @@ +createStub($className); + } +} diff --git a/tests/Factory/FactoryDiactorosTest.php b/tests/Factory/FactoryDiactorosTest.php index 268eb2a..113a092 100644 --- a/tests/Factory/FactoryDiactorosTest.php +++ b/tests/Factory/FactoryDiactorosTest.php @@ -3,6 +3,12 @@ namespace Middlewares\Tests\Factory; +use Laminas\Diactoros\RequestFactory; +use Laminas\Diactoros\ResponseFactory; +use Laminas\Diactoros\ServerRequestFactory; +use Laminas\Diactoros\StreamFactory; +use Laminas\Diactoros\UploadedFileFactory; +use Laminas\Diactoros\UriFactory; use Middlewares\Utils\FactoryDiscovery; use PHPUnit\Framework\TestCase; use Psr\Http\Message\RequestFactoryInterface; @@ -11,12 +17,6 @@ use Psr\Http\Message\StreamFactoryInterface; use Psr\Http\Message\UploadedFileFactoryInterface; use Psr\Http\Message\UriFactoryInterface; -use Laminas\Diactoros\RequestFactory; -use Laminas\Diactoros\ResponseFactory; -use Laminas\Diactoros\ServerRequestFactory; -use Laminas\Diactoros\StreamFactory; -use Laminas\Diactoros\UploadedFileFactory; -use Laminas\Diactoros\UriFactory; class FactoryDiactorosTest extends TestCase { diff --git a/tests/Factory/FactorySunriseTest.php b/tests/Factory/FactorySunriseTest.php index f8d10c2..41c0b74 100644 --- a/tests/Factory/FactorySunriseTest.php +++ b/tests/Factory/FactorySunriseTest.php @@ -13,10 +13,10 @@ use Psr\Http\Message\UriFactoryInterface; use Sunrise\Http\Message\RequestFactory; use Sunrise\Http\Message\ResponseFactory; -use Sunrise\Http\ServerRequest\ServerRequestFactory; -use Sunrise\Http\ServerRequest\UploadedFileFactory; -use Sunrise\Stream\StreamFactory; -use Sunrise\Uri\UriFactory; +use Sunrise\Http\Message\ServerRequestFactory; +use Sunrise\Http\Message\StreamFactory; +use Sunrise\Http\Message\UploadedFileFactory; +use Sunrise\Http\Message\UriFactory; class FactorySunriseTest extends TestCase {