Extract ResponseRenderer dependency from ApplicationHandler
Uses DI instead. Signed-off-by: Maurício Meneghini Fauth <mauricio@mfauth.net>
This commit is contained in:
parent
55d6f9acb4
commit
e21bea7650
@ -73,7 +73,10 @@ use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
|
||||
|
||||
return [
|
||||
Advisor::class => ['class' => Advisor::class, 'arguments' => [DatabaseInterface::class, ExpressionLanguage::class]],
|
||||
Application::class => ['class' => Application::class, 'arguments' => [ResponseFactory::class]],
|
||||
Application::class => [
|
||||
'class' => Application::class,
|
||||
'arguments' => [ResponseFactory::class, ResponseRenderer::class],
|
||||
],
|
||||
BrowseForeigners::class => [
|
||||
'class' => BrowseForeigners::class,
|
||||
'arguments' => [Template::class, Config::class, ThemeManager::class],
|
||||
|
||||
@ -55,7 +55,7 @@ use function sprintf;
|
||||
|
||||
readonly class Application
|
||||
{
|
||||
public function __construct(private ResponseFactory $responseFactory)
|
||||
public function __construct(private ResponseFactory $responseFactory, private ResponseRenderer $responseRenderer)
|
||||
{
|
||||
}
|
||||
|
||||
@ -67,7 +67,7 @@ readonly class Application
|
||||
public function run(bool $isSetupPage = false): void
|
||||
{
|
||||
$container = ContainerBuilder::getContainer();
|
||||
$requestHandler = new QueueRequestHandler($container, new ApplicationHandler($this));
|
||||
$requestHandler = new QueueRequestHandler($container, new ApplicationHandler($this, $this->responseRenderer));
|
||||
$requestHandler->add(ErrorHandling::class);
|
||||
$requestHandler->add(OutputBuffering::class);
|
||||
$requestHandler->add(PhpExtensionsChecking::class);
|
||||
|
||||
@ -14,9 +14,9 @@ use Psr\Http\Server\RequestHandlerInterface;
|
||||
|
||||
use function assert;
|
||||
|
||||
final class ApplicationHandler implements RequestHandlerInterface
|
||||
final readonly class ApplicationHandler implements RequestHandlerInterface
|
||||
{
|
||||
public function __construct(private readonly Application $application)
|
||||
public function __construct(private Application $application, private ResponseRenderer $responseRenderer)
|
||||
{
|
||||
}
|
||||
|
||||
@ -26,7 +26,7 @@ final class ApplicationHandler implements RequestHandlerInterface
|
||||
try {
|
||||
return $this->application->handle($request);
|
||||
} catch (ExitException) {
|
||||
return ResponseRenderer::getInstance()->response();
|
||||
return $this->responseRenderer->response();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -9,6 +9,7 @@ use PhpMyAdmin\Config;
|
||||
use PhpMyAdmin\Container\ContainerBuilder;
|
||||
use PhpMyAdmin\Exceptions\ConfigException;
|
||||
use PhpMyAdmin\Http\Factory\ResponseFactory;
|
||||
use PhpMyAdmin\ResponseRenderer;
|
||||
use PhpMyAdmin\Template;
|
||||
use PHPUnit\Framework\Attributes\BackupStaticProperties;
|
||||
use PHPUnit\Framework\Attributes\CoversClass;
|
||||
@ -18,6 +19,7 @@ final class ApplicationTest extends AbstractTestCase
|
||||
{
|
||||
public function testInit(): void
|
||||
{
|
||||
ContainerBuilder::$container = null;
|
||||
$application = ContainerBuilder::getContainer()->get(Application::class);
|
||||
self::assertSame($application, Application::init());
|
||||
}
|
||||
@ -39,7 +41,7 @@ final class ApplicationTest extends AbstractTestCase
|
||||
'error_message' => 'Failed to load phpMyAdmin configuration.',
|
||||
]);
|
||||
|
||||
$application = new Application(ResponseFactory::create());
|
||||
$application = new Application(ResponseFactory::create(), self::createStub(ResponseRenderer::class));
|
||||
$application->run();
|
||||
|
||||
$output = $this->getActualOutputForAssertion();
|
||||
|
||||
@ -13,7 +13,6 @@ use PhpMyAdmin\ResponseRenderer;
|
||||
use PHPUnit\Framework\Attributes\CoversClass;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use ReflectionProperty;
|
||||
|
||||
#[CoversClass(ApplicationHandler::class)]
|
||||
final class ApplicationHandlerTest extends TestCase
|
||||
@ -22,16 +21,13 @@ final class ApplicationHandlerTest extends TestCase
|
||||
{
|
||||
$responseRendererMock = self::createMock(ResponseRenderer::class);
|
||||
$responseRendererMock->expects(self::never())->method('response');
|
||||
$reflectionProperty = new ReflectionProperty(ResponseRenderer::class, 'instance');
|
||||
$reflectionProperty->setValue(null, $responseRendererMock);
|
||||
$request = self::createStub(ServerRequest::class);
|
||||
$responseStub = new Response(self::createStub(ResponseInterface::class));
|
||||
$appMock = self::createMock(Application::class);
|
||||
$appMock->expects(self::once())->method('handle')->with($request)->willReturn($responseStub);
|
||||
$handler = new ApplicationHandler($appMock);
|
||||
$handler = new ApplicationHandler($appMock, $responseRendererMock);
|
||||
$response = $handler->handle($request);
|
||||
self::assertSame($response, $responseStub);
|
||||
$reflectionProperty->setValue(null, null);
|
||||
}
|
||||
|
||||
public function testHandleThrowsExit(): void
|
||||
@ -39,14 +35,11 @@ final class ApplicationHandlerTest extends TestCase
|
||||
$responseStub = new Response(self::createStub(ResponseInterface::class));
|
||||
$responseRendererMock = self::createMock(ResponseRenderer::class);
|
||||
$responseRendererMock->expects(self::once())->method('response')->willReturn($responseStub);
|
||||
$reflectionProperty = new ReflectionProperty(ResponseRenderer::class, 'instance');
|
||||
$reflectionProperty->setValue(null, $responseRendererMock);
|
||||
$request = self::createStub(ServerRequest::class);
|
||||
$appMock = self::createMock(Application::class);
|
||||
$appMock->expects(self::once())->method('handle')->with($request)->willThrowException(new ExitException());
|
||||
$handler = new ApplicationHandler($appMock);
|
||||
$handler = new ApplicationHandler($appMock, $responseRendererMock);
|
||||
$response = $handler->handle($request);
|
||||
self::assertSame($response, $responseStub);
|
||||
$reflectionProperty->setValue(null, null);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user