Skip to content

Commit

Permalink
Merge branch '4.x' into maintenance/duplicate-code
Browse files Browse the repository at this point in the history
  • Loading branch information
l0gicgate committed Aug 18, 2019
2 parents 706f3be + a139440 commit 772c5ad
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 124 deletions.
46 changes: 0 additions & 46 deletions Slim/DeferredCallable.php

This file was deleted.

19 changes: 17 additions & 2 deletions Slim/Handlers/ErrorHandler.php
Expand Up @@ -42,6 +42,11 @@ class ErrorHandler implements ErrorHandlerInterface
*/
protected $defaultErrorRenderer = HtmlErrorRenderer::class;

/**
* @var ErrorRendererInterface|string|callable
*/
protected $logErrorRenderer = PlainTextErrorRenderer::class;

/**
* @var array
*/
Expand Down Expand Up @@ -259,15 +264,25 @@ public function setDefaultErrorRenderer(string $contentType, $errorRenderer): vo
$this->defaultErrorRenderer = $errorRenderer;
}

/**
* Set the renderer for the error logger
*
* @param ErrorRendererInterface|string|callable $logErrorRenderer
*/
public function setLogErrorRenderer($logErrorRenderer): void
{
$this->logErrorRenderer = $logErrorRenderer;
}

/**
* Write to the error log if $logErrors has been set to true
*
* @return void
*/
protected function writeToErrorLog(): void
{
$renderer = new PlainTextErrorRenderer();
$error = $renderer->__invoke($this->exception, $this->logErrorDetails);
$renderer = $this->callableResolver->resolve($this->logErrorRenderer);
$error = $renderer($this->exception, $this->logErrorDetails);
$error .= "\nView in rendered output by enabling the \"displayErrorDetails\" setting.\n";
$this->logError($error);
}
Expand Down
71 changes: 0 additions & 71 deletions tests/DeferredCallableTest.php

This file was deleted.

31 changes: 30 additions & 1 deletion tests/Handlers/ErrorHandlerTest.php
Expand Up @@ -11,13 +11,17 @@

use Psr\Http\Message\ResponseInterface;
use ReflectionClass;
use ReflectionMethod;
use ReflectionProperty;
use RuntimeException;
use Slim\Error\Renderers\HtmlErrorRenderer;
use Slim\Error\Renderers\JsonErrorRenderer;
use Slim\Error\Renderers\PlainTextErrorRenderer;
use Slim\Error\Renderers\XmlErrorRenderer;
use Slim\Exception\HttpMethodNotAllowedException;
use Slim\Exception\HttpNotFoundException;
use Slim\Handlers\ErrorHandler;
use Slim\Interfaces\CallableResolverInterface;
use Slim\Tests\Mocks\MockCustomException;
use Slim\Tests\TestCase;

Expand Down Expand Up @@ -322,12 +326,37 @@ public function testDefaultErrorRenderer()
->withHeader('Accept', 'application/unknown');

$handler = new ErrorHandler($this->getCallableResolver(), $this->getResponseFactory());
$exception = new \RuntimeException();
$exception = new RuntimeException();

/** @var ResponseInterface $res */
$res = $handler->__invoke($request, $exception, true, true, true);

$this->assertTrue($res->hasHeader('Content-Type'));
$this->assertEquals('text/html', $res->getHeaderLine('Content-Type'));
}

public function testLogErrorRenderer()
{
$renderer = function () {
return '';
};

$callableResolverProphecy = $this->prophesize(CallableResolverInterface::class);
$callableResolverProphecy
->resolve('logErrorRenderer')
->willReturn($renderer)
->shouldBeCalledOnce();

$handler = new ErrorHandler($callableResolverProphecy->reveal(), $this->getResponseFactory());
$handler->setLogErrorRenderer('logErrorRenderer');

$exception = new RuntimeException();
$exceptionProperty = new ReflectionProperty($handler, 'exception');
$exceptionProperty->setAccessible(true);
$exceptionProperty->setValue($handler, $exception);

$writeToErrorLogMethod = new ReflectionMethod($handler, 'writeToErrorLog');
$writeToErrorLogMethod->setAccessible(true);
$writeToErrorLogMethod->invoke($handler);
}
}
6 changes: 2 additions & 4 deletions tests/Routing/RouteTest.php
Expand Up @@ -17,10 +17,8 @@
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\StreamInterface;
use Psr\Http\Message\UriInterface;
use Psr\Http\Server\RequestHandlerInterface;
use Slim\CallableResolver;
use Slim\DeferredCallable;
use Slim\Handlers\Strategies\RequestHandler;
use Slim\Handlers\Strategies\RequestResponse;
use Slim\Interfaces\CallableResolverInterface;
Expand Down Expand Up @@ -390,7 +388,7 @@ public function testControllerMethodAsStringResolvesWithoutContainer()
$callableResolver = new CallableResolver();
$responseFactory = $this->getResponseFactory();

$deferred = new DeferredCallable('\Slim\Tests\Mocks\CallableTest:toCall', $callableResolver);
$deferred = $callableResolver->resolve('\Slim\Tests\Mocks\CallableTest:toCall');
$route = new Route(['GET'], '/', $deferred, $responseFactory, $callableResolver);

CallableTest::$CalledCount = 0;
Expand All @@ -410,7 +408,6 @@ public function testControllerMethodAsStringResolvesWithContainer()
$callableResolverProphecy = $this->prophesize(CallableResolverInterface::class);

$callable = 'CallableTest:toCall';
$deferred = new DeferredCallable($callable, $callableResolverProphecy->reveal());

$callableResolverProphecy
->resolve($callable)
Expand All @@ -426,6 +423,7 @@ public function testControllerMethodAsStringResolvesWithContainer()
})
->shouldBeCalledOnce();

$deferred = $callableResolverProphecy->reveal()->resolve($callable);
$callableResolverProphecy
->resolve($deferred)
->willReturn($deferred)
Expand Down

0 comments on commit 772c5ad

Please sign in to comment.