diff --git a/.gitattributes b/.gitattributes index 8b8ecd0..65a1495 100644 --- a/.gitattributes +++ b/.gitattributes @@ -5,6 +5,10 @@ /.travis.yml export-ignore /phpcs.xml export-ignore /phpunit.xml.dist export-ignore +/phpstan.neon export-ignore +/docker-compose.yml export-ignore +/docker-compose.override.yml.dist export-ignore +/indocker export-ignore /composer.lock export-ignore /infection.json export-ignore /CHANGELOG.md export-ignore diff --git a/.gitignore b/.gitignore index 37515b9..a1d6272 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ vendor composer.lock build +docker-compose.override.yml +.phpunit.result.cache diff --git a/.travis.yml b/.travis.yml index 93dbc33..2eb6297 100644 --- a/.travis.yml +++ b/.travis.yml @@ -37,8 +37,8 @@ install: script: - mkdir build - - if [[ $DEPS == 'latest' ]]; then composer ac:ci ; fi - - if [[ $DEPS == 'lowest' ]]; then composer ac:test ; fi + - if [[ $DEPS == 'latest' ]]; then composer ci ; fi + - if [[ $DEPS == 'lowest' ]]; then composer test ; fi after_success: - if [[ $DEPS == 'latest' ]]; then wget https://scrutinizer-ci.com/ocular.phar ; fi diff --git a/CHANGELOG.md b/CHANGELOG.md index 0bfeeda..d66727f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,31 @@ # CHANGELOG +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com), and this project adheres to [Semantic Versioning](https://semver.org). + +## [Unreleased] + +#### Added + +* [#14](https://github.com/acelaya/ze-content-based-error-handler/issues/14) Added PHP 7.3 to build matrix + +#### Changed + +* [#16](https://github.com/acelaya/ze-content-based-error-handler/issues/16) Added compatibility with expressive 3 + +#### Deprecated + +* *Nothing* + +#### Removed + +* *Nothing* + +#### Fixed + +* *Nothing* + ## 2.2.0 - 2018-03-25 diff --git a/README.md b/README.md index c514994..31bacf3 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,10 @@ [![Build Status](https://img.shields.io/travis/acelaya/ze-content-based-error-handler/master.svg?style=flat-square)](https://travis-ci.org/acelaya/ze-content-based-error-handler) [![Code Coverage](https://img.shields.io/scrutinizer/coverage/g/acelaya/ze-content-based-error-handler.svg?style=flat-square)](https://scrutinizer-ci.com/g/acelaya/ze-content-based-error-handler/?branch=master) [![Scrutinizer Code Quality](https://img.shields.io/scrutinizer/g/acelaya/ze-content-based-error-handler.svg?style=flat-square)](https://scrutinizer-ci.com/g/acelaya/ze-content-based-error-handler/?branch=master) -[![Latest Stable Version](https://poser.pugx.org/acelaya/ze-content-based-error-handler/v/stable?format=flat-square)](https://packagist.org/packages/acelaya/ze-content-based-error-handler) -[![Total Downloads](https://poser.pugx.org/acelaya/ze-content-based-error-handler/downloads?format=flat-square)](https://packagist.org/packages/acelaya/ze-content-based-error-handler) -[![License](https://poser.pugx.org/acelaya/ze-content-based-error-handler/license?format=flat-square)](LICENSE) +[![Latest Stable Version](https://img.shields.io/github/release/acelaya/ze-content-based-error-handler.svg?style=flat-square)](https://packagist.org/packages/acelaya/ze-content-based-error-handler) +[![Total Downloads](https://img.shields.io/packagist/dt/acelaya/ze-content-based-error-handler.svg?style=flat-square)](https://packagist.org/packages/acelaya/ze-content-based-error-handler) +[![License](https://img.shields.io/github/license/acelaya/ze-content-based-error-handler.svg?style=flat-square)](https://github.com/acelaya/ze-content-based-error-handler/blob/master/LICENSE) +[![Paypal Donate](https://img.shields.io/badge/Donate-paypal-blue.svg?style=flat-square&logo=paypal&colorA=cccccc)](https://acel.me/donate) A Zend Expressive error response generator which allows to implement different strategies to render error responses based on the accepted content-types. diff --git a/composer.json b/composer.json index 1c77dc2..9439f5f 100644 --- a/composer.json +++ b/composer.json @@ -16,11 +16,10 @@ "zendframework/zend-servicemanager": "^3.0" }, "require-dev": { - "infection/infection": "^0.9.0", - "phpstan/phpstan": "^0.10.0", - "phpunit/phpunit": "^7.0", - "slevomat/coding-standard": "^4.1", - "squizlabs/php_codesniffer": "^3.1" + "infection/infection": "^0.12.0", + "phpstan/phpstan": "^0.11.1", + "phpunit/phpunit": "^8.0 || ^7.5", + "shlinkio/php-coding-standard": "1.0.0" }, "license": "MIT", "authors": [ @@ -40,20 +39,24 @@ } }, "scripts": { - "ac:ci": [ - "@ac:cs", - "@ac:stan", - "@ac:test", - "@ac:infection" + "ci": [ + "@cs", + "@stan", + "@test:ci", + "@infection:ci" ], - "ac:cs": "phpcs", - "ac:cs-fix": "phpcbf", - "ac:stan": "phpstan analyse src/ --level=6", - "ac:test": "phpdbg -qrr vendor/bin/phpunit --coverage-clover build/clover.xml --colors=always", - "ac:pretty-test": "phpdbg -qrr vendor/bin/phpunit --coverage-html build/coverage", - "ac:infection": "phpdbg -qrr vendor/bin/infection --threads=4 --min-msi=90 --log-verbosity=2 --only-covered", - "ac:infection-show": "phpdbg -qrr vendor/bin/infection --threads=4 --min-msi=90 --log-verbosity=2 --only-covered --show-mutations" + "cs": "phpcs", + "cs:fix": "phpcbf", + "stan": "phpstan analyse src/ --level=6", + + "test": "phpdbg -qrr vendor/bin/phpunit --colors=always", + "test:pretty": "phpdbg -qrr vendor/bin/phpunit --coverage-html build/coverage", + "test:ci": "phpdbg -qrr vendor/bin/phpunit --colors=always --coverage-clover=build/clover.xml --coverage-xml=build/coverage-xml --log-junit=build/phpunit.junit.xml", + + "infection": "phpdbg -qrr vendor/bin/infection --threads=4 --min-msi=80 --log-verbosity=default --only-covered", + "infection:ci": "phpdbg -qrr vendor/bin/infection --threads=4 --min-msi=80 --log-verbosity=default --only-covered --coverage=build", + "infection:show": "phpdbg -qrr vendor/bin/infection --threads=4 --min-msi=80 --log-verbosity=default --only-covered --show-mutations" }, "extra": { "zf": { diff --git a/docker-compose.override.yml.dist b/docker-compose.override.yml.dist new file mode 100644 index 0000000..4709930 --- /dev/null +++ b/docker-compose.override.yml.dist @@ -0,0 +1,8 @@ +version: '3' + +services: + ze_cbeh_php: + user: 1000:1000 + volumes: + - /etc/passwd:/etc/passwd:ro + - /etc/group:/etc/group:ro diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..c02bef8 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,8 @@ +version: '3' + +services: + ze_cbeh_php: + container_name: ze_cbeh_php + image: composer:1.8.3 + volumes: + - ./:/app diff --git a/indocker b/indocker new file mode 100755 index 0000000..13acbe5 --- /dev/null +++ b/indocker @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +docker-compose run ze_cbeh_php /bin/sh -c "$*" diff --git a/infection.json b/infection.json index df4e0c4..b0c4d84 100644 --- a/infection.json +++ b/infection.json @@ -4,7 +4,7 @@ "src" ] }, - "timeout": 10, + "timeout": 5, "logs": { "text": "build/infection/infection-log.txt", "summary": "build/infection/summary-log.txt", @@ -15,6 +15,7 @@ }, "mutators": { "@default": true, - "IdenticalEqual": false + "IdenticalEqual": false, + "NotIdenticalNotEqual": false } } diff --git a/phpcs.xml b/phpcs.xml index 9a1a154..0e3d18c 100644 --- a/phpcs.xml +++ b/phpcs.xml @@ -1,44 +1,13 @@ Coding standard specification - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + src diff --git a/src/ErrorHandler/ContentBasedErrorResponseGenerator.php b/src/ErrorHandler/ContentBasedErrorResponseGenerator.php index 67f4de4..16565c6 100644 --- a/src/ErrorHandler/ContentBasedErrorResponseGenerator.php +++ b/src/ErrorHandler/ContentBasedErrorResponseGenerator.php @@ -8,26 +8,22 @@ use Psr\Http\Message\ResponseInterface as Response; use Psr\Http\Message\ServerRequestInterface as Request; use Psr\Log\LoggerInterface; +use Throwable; +use function explode; +use function implode; +use function sprintf; class ContentBasedErrorResponseGenerator implements ErrorResponseGeneratorInterface { private const DEFAULT_CONTENT = 'text/html'; - /** - * @var ErrorResponseGeneratorManagerInterface - */ + /** @var ErrorResponseGeneratorManagerInterface */ private $errorHandlerManager; - /** - * @var LoggerInterface - */ + /** @var LoggerInterface */ private $logger; - /** - * @var LogMessageBuilderInterface - */ + /** @var LogMessageBuilderInterface */ private $logMessageBuilder; - /** - * @var string - */ + /** @var string */ private $defaultContentType; /** @@ -58,7 +54,7 @@ public function __construct( * @return Response * @throws InvalidArgumentException */ - public function __invoke(?\Throwable $e, Request $request, Response $response): Response + public function __invoke(?Throwable $e, Request $request, Response $response): Response { // Try to get an error handler for provided request accepted type $errorHandler = $this->resolveErrorHandlerFromAcceptHeader($request); @@ -78,7 +74,7 @@ private function resolveErrorHandlerFromAcceptHeader(Request $request): callable // Try to find an error handler for one of the accepted content types $accepts = $request->hasHeader('Accept') ? $request->getHeaderLine('Accept') : $this->defaultContentType; /** @var array $accepts */ - $accepts = \explode(',', $accepts); + $accepts = explode(',', $accepts); foreach ($accepts as $accept) { if (! $this->errorHandlerManager->has($accept)) { continue; @@ -93,10 +89,10 @@ private function resolveErrorHandlerFromAcceptHeader(Request $request): callable } // It wasn't possible to find an error handler - throw new InvalidArgumentException(\sprintf( + throw new InvalidArgumentException(sprintf( 'It wasn\'t possible to find an error handler for ["%s"] content types. ' . 'Make sure you have registered at least the default "%s" content type', - \implode('", "', $accepts), + implode('", "', $accepts), $this->defaultContentType )); } diff --git a/src/ErrorHandler/ErrorResponseGeneratorInterface.php b/src/ErrorHandler/ErrorResponseGeneratorInterface.php index 886cc53..1934ace 100644 --- a/src/ErrorHandler/ErrorResponseGeneratorInterface.php +++ b/src/ErrorHandler/ErrorResponseGeneratorInterface.php @@ -5,6 +5,7 @@ use Psr\Http\Message\ResponseInterface as Response; use Psr\Http\Message\ServerRequestInterface as Request; +use Throwable; interface ErrorResponseGeneratorInterface { @@ -16,5 +17,5 @@ interface ErrorResponseGeneratorInterface * @param Response $response * @return Response */ - public function __invoke(?\Throwable $e, Request $request, Response $response); + public function __invoke(?Throwable $e, Request $request, Response $response); } diff --git a/src/ErrorHandler/ErrorResponseGeneratorManager.php b/src/ErrorHandler/ErrorResponseGeneratorManager.php index bb18091..81b5926 100644 --- a/src/ErrorHandler/ErrorResponseGeneratorManager.php +++ b/src/ErrorHandler/ErrorResponseGeneratorManager.php @@ -5,6 +5,11 @@ use Zend\ServiceManager\AbstractPluginManager; use Zend\ServiceManager\Exception\InvalidServiceException; +use function get_class; +use function gettype; +use function is_callable; +use function is_object; +use function sprintf; class ErrorResponseGeneratorManager extends AbstractPluginManager implements ErrorResponseGeneratorManagerInterface { @@ -14,14 +19,14 @@ class ErrorResponseGeneratorManager extends AbstractPluginManager implements Err */ public function validate($instance) { - if (\is_callable($instance)) { + if (is_callable($instance)) { return; } - throw new InvalidServiceException(\sprintf( + throw new InvalidServiceException(sprintf( 'Only callables are valid plugins for "%s", but "%s" was provided', __CLASS__, - \is_object($instance) ? \get_class($instance) : \gettype($instance) + is_object($instance) ? get_class($instance) : gettype($instance) )); } } diff --git a/src/Exception/ExceptionInterface.php b/src/Exception/ExceptionInterface.php index 8c27eab..71c84d5 100644 --- a/src/Exception/ExceptionInterface.php +++ b/src/Exception/ExceptionInterface.php @@ -3,6 +3,8 @@ namespace Acelaya\ExpressiveErrorHandler\Exception; -interface ExceptionInterface extends \Throwable +use Throwable; + +interface ExceptionInterface extends Throwable { } diff --git a/src/Exception/InvalidArgumentException.php b/src/Exception/InvalidArgumentException.php index 769b0d3..e44fe0f 100644 --- a/src/Exception/InvalidArgumentException.php +++ b/src/Exception/InvalidArgumentException.php @@ -3,6 +3,8 @@ namespace Acelaya\ExpressiveErrorHandler\Exception; -class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface +use InvalidArgumentException as SplInvalidArgumentException; + +class InvalidArgumentException extends SplInvalidArgumentException implements ExceptionInterface { } diff --git a/src/Log/BasicLogMessageBuilder.php b/src/Log/BasicLogMessageBuilder.php index 966ce8f..76b6ddb 100644 --- a/src/Log/BasicLogMessageBuilder.php +++ b/src/Log/BasicLogMessageBuilder.php @@ -5,6 +5,9 @@ use Psr\Http\Message\ResponseInterface as Response; use Psr\Http\Message\ServerRequestInterface as Request; +use Throwable; +use const PHP_EOL; +use function sprintf; class BasicLogMessageBuilder implements LogMessageBuilderInterface { @@ -16,13 +19,13 @@ class BasicLogMessageBuilder implements LogMessageBuilderInterface * @param \Throwable|null $err * @return string */ - public function buildMessage(Request $request, Response $response, \Throwable $err = null): string + public function buildMessage(Request $request, Response $response, Throwable $err = null): string { $base = 'Error occurred while dispatching request'; if ($err === null) { return $base; } - return \sprintf('%s:%s%s', $base, PHP_EOL, $err); + return sprintf('%s:%s%s', $base, PHP_EOL, $err); } } diff --git a/src/Log/LogMessageBuilderInterface.php b/src/Log/LogMessageBuilderInterface.php index 8f3feb1..d132352 100644 --- a/src/Log/LogMessageBuilderInterface.php +++ b/src/Log/LogMessageBuilderInterface.php @@ -5,6 +5,7 @@ use Psr\Http\Message\ResponseInterface as Response; use Psr\Http\Message\ServerRequestInterface as Request; +use Throwable; interface LogMessageBuilderInterface { @@ -16,5 +17,5 @@ interface LogMessageBuilderInterface * @param \Throwable|null $err * @return string */ - public function buildMessage(Request $request, Response $response, \Throwable $err = null): string; + public function buildMessage(Request $request, Response $response, Throwable $err = null): string; } diff --git a/test/ConfigProviderTest.php b/test/ConfigProviderTest.php index 7eeeb7c..ba6678b 100644 --- a/test/ConfigProviderTest.php +++ b/test/ConfigProviderTest.php @@ -8,12 +8,10 @@ class ConfigProviderTest extends TestCase { - /** - * @var ConfigProvider - */ + /** @var ConfigProvider */ protected $configProvider; - public function setUp() + public function setUp(): void { $this->configProvider = new ConfigProvider(); } @@ -21,7 +19,7 @@ public function setUp() /** * @test */ - public function configIsCorrect() + public function configIsCorrect(): void { $config = $this->configProvider->__invoke(); $this->assertCount(2, $config); diff --git a/test/ErrorHandler/ContentBasedErrorHandlerTest.php b/test/ErrorHandler/ContentBasedErrorHandlerTest.php index 0fd6bd8..059df70 100644 --- a/test/ErrorHandler/ContentBasedErrorHandlerTest.php +++ b/test/ErrorHandler/ContentBasedErrorHandlerTest.php @@ -5,6 +5,7 @@ use Acelaya\ExpressiveErrorHandler\ErrorHandler\ContentBasedErrorResponseGenerator; use Acelaya\ExpressiveErrorHandler\ErrorHandler\ErrorResponseGeneratorManager; +use Acelaya\ExpressiveErrorHandler\Exception\InvalidArgumentException; use Acelaya\ExpressiveErrorHandler\Log\BasicLogMessageBuilder; use PHPUnit\Framework\TestCase; use Psr\Log\NullLogger; @@ -14,12 +15,10 @@ class ContentBasedErrorHandlerTest extends TestCase { - /** - * @var ContentBasedErrorResponseGenerator - */ + /** @var ContentBasedErrorResponseGenerator */ protected $errorHandler; - public function setUp() + public function setUp(): void { $this->errorHandler = new ContentBasedErrorResponseGenerator( new ErrorResponseGeneratorManager(new ServiceManager(), [ @@ -33,7 +32,7 @@ public function setUp() ); } - public function factory($container, $name) + public function factory($container, $name): callable { return function () use ($name) { return (new Response())->withHeader('Content-type', $name); @@ -43,7 +42,7 @@ public function factory($container, $name) /** * @test */ - public function correctAcceptHeaderValueInvokesErrorHandler() + public function correctAcceptHeaderValueInvokesErrorHandler(): void { $request = ServerRequestFactory::fromGlobals()->withHeader('Accept', 'foo/bar,application/json'); $result = $this->errorHandler->__invoke(null, $request, new Response()); @@ -53,7 +52,7 @@ public function correctAcceptHeaderValueInvokesErrorHandler() /** * @test */ - public function defaultContentTypeIsUsedWhenNoAcceptHeaderIsPresent() + public function defaultContentTypeIsUsedWhenNoAcceptHeaderIsPresent(): void { $request = ServerRequestFactory::fromGlobals(); $result = $this->errorHandler->__invoke(null, $request, new Response()); @@ -63,7 +62,7 @@ public function defaultContentTypeIsUsedWhenNoAcceptHeaderIsPresent() /** * @test */ - public function defaultContentTypeIsUsedWhenAcceptedContentIsNotSupported() + public function defaultContentTypeIsUsedWhenAcceptedContentIsNotSupported(): void { $request = ServerRequestFactory::fromGlobals()->withHeader('Accept', 'foo/bar,text/xml'); $result = $this->errorHandler->__invoke(null, $request, new Response()); @@ -72,9 +71,8 @@ public function defaultContentTypeIsUsedWhenAcceptedContentIsNotSupported() /** * @test - * @expectedException \Acelaya\ExpressiveErrorHandler\Exception\InvalidArgumentException */ - public function ifNoErrorHandlerIsFoundAnExceptionIsThrown() + public function ifNoErrorHandlerIsFoundAnExceptionIsThrown(): void { $this->errorHandler = new ContentBasedErrorResponseGenerator( new ErrorResponseGeneratorManager(new ServiceManager(), []), @@ -82,13 +80,15 @@ public function ifNoErrorHandlerIsFoundAnExceptionIsThrown() new BasicLogMessageBuilder() ); $request = ServerRequestFactory::fromGlobals()->withHeader('Accept', 'foo/bar,text/xml'); + + $this->expectException(InvalidArgumentException::class); $this->errorHandler->__invoke(null, $request, new Response()); } /** * @test */ - public function providedDefaultContentTypeIsUsed() + public function providedDefaultContentTypeIsUsed(): void { $this->errorHandler = new ContentBasedErrorResponseGenerator( new ErrorResponseGeneratorManager(new ServiceManager(), [ diff --git a/test/ErrorHandler/ErrorHandlerManagerTest.php b/test/ErrorHandler/ErrorHandlerManagerTest.php index 5e8ca4a..2a8637b 100644 --- a/test/ErrorHandler/ErrorHandlerManagerTest.php +++ b/test/ErrorHandler/ErrorHandlerManagerTest.php @@ -4,17 +4,18 @@ namespace AcelayaTest\ExpressiveErrorHandler\ErrorHandler; use Acelaya\ExpressiveErrorHandler\ErrorHandler\ErrorResponseGeneratorManager; +use Closure; use PHPUnit\Framework\TestCase; +use stdClass; +use Zend\ServiceManager\Exception\InvalidServiceException; use Zend\ServiceManager\ServiceManager; class ErrorHandlerManagerTest extends TestCase { - /** - * @var ErrorResponseGeneratorManager - */ + /** @var ErrorResponseGeneratorManager */ protected $pluginManager; - public function setUp() + public function setUp(): void { $this->pluginManager = new ErrorResponseGeneratorManager(new ServiceManager(), [ 'services' => [ @@ -22,7 +23,7 @@ public function setUp() }, ], 'invokables' => [ - 'invalid' => \stdClass::class, + 'invalid' => stdClass::class, ], ]); } @@ -30,18 +31,18 @@ public function setUp() /** * @test */ - public function callablesAreReturned() + public function callablesAreReturned(): void { $instance = $this->pluginManager->get('foo'); - $this->assertInstanceOf(\Closure::class, $instance); + $this->assertInstanceOf(Closure::class, $instance); } /** * @test - * @expectedException \Zend\ServiceManager\Exception\InvalidServiceException */ public function nonCallablesThrowException() { + $this->expectException(InvalidServiceException::class); $this->pluginManager->get('invalid'); } } diff --git a/test/ErrorHandler/Factory/ContentBasedErrorHandlerFactoryTest.php b/test/ErrorHandler/Factory/ContentBasedErrorHandlerFactoryTest.php index 3b73a13..b2b79ea 100644 --- a/test/ErrorHandler/Factory/ContentBasedErrorHandlerFactoryTest.php +++ b/test/ErrorHandler/Factory/ContentBasedErrorHandlerFactoryTest.php @@ -9,16 +9,15 @@ use Acelaya\ExpressiveErrorHandler\Log\LogMessageBuilderInterface; use PHPUnit\Framework\TestCase; use Psr\Log\LoggerInterface; +use ReflectionObject; use Zend\ServiceManager\ServiceManager; class ContentBasedErrorHandlerFactoryTest extends TestCase { - /** - * @var ContentBasedErrorResponseGeneratorFactory - */ + /** @var ContentBasedErrorResponseGeneratorFactory */ protected $factory; - public function setUp() + public function setUp(): void { $this->factory = new ContentBasedErrorResponseGeneratorFactory(); } @@ -26,7 +25,7 @@ public function setUp() /** * @test */ - public function serviceIsCreated() + public function serviceIsCreated(): void { $instance = $this->factory->__invoke(new ServiceManager(['services' => [ ErrorResponseGeneratorManager::class => $this->prophesize(ErrorResponseGeneratorManager::class)->reveal(), @@ -45,7 +44,7 @@ public function serviceIsCreated() /** * @test */ - public function defaultContentTypeIsSetWhenDefined() + public function defaultContentTypeIsSetWhenDefined(): void { /** @var ContentBasedErrorResponseGenerator $instance */ $instance = $this->factory->__invoke(new ServiceManager(['services' => [ @@ -58,7 +57,7 @@ public function defaultContentTypeIsSetWhenDefined() ], ]])); - $ref = new \ReflectionObject($instance); + $ref = new ReflectionObject($instance); $prop = $ref->getProperty('defaultContentType'); $prop->setAccessible(true); $this->assertEquals('application/json', $prop->getValue($instance)); diff --git a/test/ErrorHandler/Factory/ErrorHandlerManagerFactoryTest.php b/test/ErrorHandler/Factory/ErrorHandlerManagerFactoryTest.php index 03f7aa0..5afa977 100644 --- a/test/ErrorHandler/Factory/ErrorHandlerManagerFactoryTest.php +++ b/test/ErrorHandler/Factory/ErrorHandlerManagerFactoryTest.php @@ -10,12 +10,10 @@ class ErrorHandlerManagerFactoryTest extends TestCase { - /** - * @var ErrorHandlerManagerFactory - */ + /** @var ErrorHandlerManagerFactory */ protected $factory; - public function setUp() + public function setUp(): void { $this->factory = new ErrorHandlerManagerFactory(); } @@ -23,7 +21,7 @@ public function setUp() /** * @test */ - public function serviceIsCreated() + public function serviceIsCreated(): void { $instance = $this->factory->__invoke(new ServiceManager(['services' => [ 'config' => [ diff --git a/test/ErrorHandler/Factory/PlainTextResponseGeneratorFactoryTest.php b/test/ErrorHandler/Factory/PlainTextResponseGeneratorFactoryTest.php index 8f7cb1b..2123bbd 100644 --- a/test/ErrorHandler/Factory/PlainTextResponseGeneratorFactoryTest.php +++ b/test/ErrorHandler/Factory/PlainTextResponseGeneratorFactoryTest.php @@ -5,17 +5,16 @@ use Acelaya\ExpressiveErrorHandler\ErrorHandler\Factory\PlainTextResponseGeneratorFactory; use PHPUnit\Framework\TestCase; +use ReflectionObject; use Zend\ServiceManager\ServiceManager; use Zend\Stratigility\Middleware\ErrorResponseGenerator; class PlainTextResponseGeneratorFactoryTest extends TestCase { - /** - * @var PlainTextResponseGeneratorFactory - */ + /** @var PlainTextResponseGeneratorFactory */ protected $factory; - public function setUp() + public function setUp(): void { $this->factory = new PlainTextResponseGeneratorFactory(); } @@ -23,16 +22,14 @@ public function setUp() /** * @test * @dataProvider provideDebugs - * @param array $config - * @param bool $expectedIsDev */ - public function serviceIsCreated(array $config, bool $expectedIsDev) + public function serviceIsCreated(array $config, bool $expectedIsDev): void { $instance = $this->factory->__invoke(new ServiceManager(['services' => [ 'config' => $config, ]])); - $ref = new \ReflectionObject($instance); + $ref = new ReflectionObject($instance); $isDev = $ref->getProperty('isDevelopmentMode'); $isDev->setAccessible(true); @@ -40,12 +37,10 @@ public function serviceIsCreated(array $config, bool $expectedIsDev) $this->assertEquals($expectedIsDev, $isDev->getValue($instance)); } - public function provideDebugs(): array + public function provideDebugs(): iterable { - return [ - [[], false], - [['debug' => true], true], - [['debug' => false], false], - ]; + yield [[], false]; + yield [['debug' => true], true]; + yield [['debug' => false], false]; } } diff --git a/test/Log/BasicLogMessageBuilderTest.php b/test/Log/BasicLogMessageBuilderTest.php index 248d2c8..bc1512c 100644 --- a/test/Log/BasicLogMessageBuilderTest.php +++ b/test/Log/BasicLogMessageBuilderTest.php @@ -4,18 +4,18 @@ namespace AcelayaTest\ExpressiveErrorHandler\Log; use Acelaya\ExpressiveErrorHandler\Log\BasicLogMessageBuilder; +use Exception; use PHPUnit\Framework\TestCase; use Zend\Diactoros\Response; use Zend\Diactoros\ServerRequestFactory; +use const PHP_EOL; class BasicLogMessageBuilderTest extends TestCase { - /** - * @var BasicLogMessageBuilder - */ + /** @var BasicLogMessageBuilder */ protected $messageBuilder; - public function setUp() + public function setUp(): void { $this->messageBuilder = new BasicLogMessageBuilder(); } @@ -23,7 +23,7 @@ public function setUp() /** * @test */ - public function onlyBaseIsProvidedWithNoError() + public function onlyBaseIsProvidedWithNoError(): void { $message = $this->messageBuilder->buildMessage(ServerRequestFactory::fromGlobals(), new Response()); $this->assertEquals('Error occurred while dispatching request', $message); @@ -32,9 +32,9 @@ public function onlyBaseIsProvidedWithNoError() /** * @test */ - public function errorIsIncludedWhenProvided() + public function errorIsIncludedWhenProvided(): void { - $err = new \Exception('A super critical error'); + $err = new Exception('A super critical error'); $message = $this->messageBuilder->buildMessage(ServerRequestFactory::fromGlobals(), new Response(), $err); $this->assertEquals('Error occurred while dispatching request:' . PHP_EOL . $err, $message); }