Remove ResponseRenderer::disable from ChangePrefixFormController

Creates a new Response object instead of using the response from
ResponseRenderer class.

Signed-off-by: Maurício Meneghini Fauth <mauricio@fauth.dev>
This commit is contained in:
Maurício Meneghini Fauth 2024-05-05 20:36:20 -03:00
parent 5c7667369f
commit 4d0565b7cd
No known key found for this signature in database
GPG Key ID: 6A16FD38AFC89CC8
4 changed files with 57 additions and 13 deletions

View File

@ -251,7 +251,7 @@ return [
],
Database\Structure\ChangePrefixFormController::class => [
'class' => Database\Structure\ChangePrefixFormController::class,
'arguments' => ['$response' => '@response'],
'arguments' => ['@response', '@' . ResponseFactory::class, '@template'],
],
Database\Structure\CopyFormController::class => [
'class' => Database\Structure\CopyFormController::class,

View File

@ -1329,11 +1329,6 @@
<code><![CDATA[__construct]]></code>
</PossiblyUnusedMethod>
</file>
<file src="src/Controllers/Database/Structure/ChangePrefixFormController.php">
<PossiblyUnusedMethod>
<code><![CDATA[__construct]]></code>
</PossiblyUnusedMethod>
</file>
<file src="src/Controllers/Database/Structure/CopyFormController.php">
<DeprecatedMethod>
<code><![CDATA[DatabaseInterface::getInstance()]]></code>

View File

@ -6,16 +6,21 @@ namespace PhpMyAdmin\Controllers\Database\Structure;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Factory\ResponseFactory;
use PhpMyAdmin\Http\Response;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use function __;
final class ChangePrefixFormController implements InvocableController
{
public function __construct(private readonly ResponseRenderer $response)
{
public function __construct(
private readonly ResponseRenderer $response,
private readonly ResponseFactory $responseFactory,
private readonly Template $template,
) {
}
public function __invoke(ServerRequest $request): Response|null
@ -40,12 +45,14 @@ final class ChangePrefixFormController implements InvocableController
$urlParams['selected'][] = $selectedValue;
}
$this->response->disable();
$this->response->render('database/structure/change_prefix_form', [
$response = $this->responseFactory->createResponse();
foreach ($this->response->getHeader()->getHttpHeaders() as $name => $value) {
$response = $response->withHeader($name, $value);
}
return $response->write($this->template->render('database/structure/change_prefix_form', [
'route' => $route,
'url_params' => $urlParams,
]);
return null;
]));
}
}

View File

@ -0,0 +1,42 @@
<?php
declare(strict_types=1);
namespace PhpMyAdmin\Tests\Controllers\Database\Structure;
use Fig\Http\Message\StatusCodeInterface;
use PhpMyAdmin\Controllers\Database\Structure\ChangePrefixFormController;
use PhpMyAdmin\Current;
use PhpMyAdmin\Http\Factory\ResponseFactory;
use PhpMyAdmin\Http\Factory\ServerRequestFactory;
use PhpMyAdmin\Template;
use PhpMyAdmin\Tests\AbstractTestCase;
use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
use PHPUnit\Framework\Attributes\CoversClass;
#[CoversClass(ChangePrefixFormController::class)]
final class ChangePrefixFormControllerTest extends AbstractTestCase
{
public function testChangePrefixModal(): void
{
Current::$database = 'test_db';
$request = ServerRequestFactory::create()->createServerRequest('POST', 'http://example.com/')
->withQueryParams(['db' => 'test_db'])
->withParsedBody(['selected_tbl' => ['test_table']]);
$template = new Template();
$controller = new ChangePrefixFormController(new ResponseRenderer(), ResponseFactory::create(), $template);
$response = $controller($request);
$expected = $template->render('database/structure/change_prefix_form', [
'route' => '/database/structure/replace-prefix',
'url_params' => ['db' => 'test_db', 'selected' => ['test_table']],
]);
self::assertNotNull($response);
self::assertSame(StatusCodeInterface::STATUS_OK, $response->getStatusCode());
self::assertSame(['text/html; charset=utf-8'], $response->getHeader('Content-Type'));
self::assertSame($expected, (string) $response->getBody());
}
}