From 43feb0e1063966b7b88ae23e6dff09c324c160a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Mon, 2 Mar 2026 12:09:56 -0300 Subject: [PATCH] Add unit test for Database\SqlAutoCompleteController MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: MaurĂ­cio Meneghini Fauth --- psalm-baseline.xml | 5 -- .../Database/SqlAutoCompleteController.php | 8 +-- .../SqlAutoCompleteControllerTest.php | 72 +++++++++++++++++++ 3 files changed, 76 insertions(+), 9 deletions(-) create mode 100644 tests/unit/Controllers/Database/SqlAutoCompleteControllerTest.php diff --git a/psalm-baseline.xml b/psalm-baseline.xml index 911f06608b..ceb2baecca 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -924,11 +924,6 @@ Current::$database]]]> - - - - - diff --git a/src/Controllers/Database/SqlAutoCompleteController.php b/src/Controllers/Database/SqlAutoCompleteController.php index 7ab38b0975..bb74cb6ea1 100644 --- a/src/Controllers/Database/SqlAutoCompleteController.php +++ b/src/Controllers/Database/SqlAutoCompleteController.php @@ -19,12 +19,12 @@ use function sprintf; * Table/Column autocomplete in SQL editors. */ #[Route('/database/sql/autocomplete', ['POST'])] -final class SqlAutoCompleteController implements InvocableController +final readonly class SqlAutoCompleteController implements InvocableController { public function __construct( - private readonly ResponseRenderer $response, - private readonly DatabaseInterface $dbi, - private readonly Config $config, + private ResponseRenderer $response, + private DatabaseInterface $dbi, + private Config $config, ) { } diff --git a/tests/unit/Controllers/Database/SqlAutoCompleteControllerTest.php b/tests/unit/Controllers/Database/SqlAutoCompleteControllerTest.php new file mode 100644 index 0000000000..b923124e8a --- /dev/null +++ b/tests/unit/Controllers/Database/SqlAutoCompleteControllerTest.php @@ -0,0 +1,72 @@ +set('EnableAutocompleteForTablesAndColumns', false); + + $request = ServerRequestFactory::create()->createServerRequest('POST', 'https://example.com/') + ->withQueryParams(['route' => '/database/sql/autocomplete']) + ->withParsedBody(['db' => 'test_db']); + + $response = ($this->getSqlAutoCompleteController(config: $config))($request); + + self::assertSame(StatusCodeInterface::STATUS_OK, $response->getStatusCode()); + self::assertSame('{"tables":[],"success":true}', (string) $response->getBody()); + } + + public function testAutoCompleteEnabled(): void + { + $dbiDummy = $this->createDbiDummy(); + // phpcs:disable Generic.Files.LineLength.TooLong + $dbiDummy->addResult( + "SELECT TABLE_NAME, COLUMN_NAME, COLUMN_TYPE, COLUMN_KEY FROM information_schema.columns WHERE table_schema = 'test_db'", + [['test_table', 'id', 'int(11)', 'PRI'], ['test_table', 'name', 'varchar(20)', 'UNI'], ['test_table', 'datetimefield', 'datetime', '']], + ['TABLE_NAME', 'COLUMN_NAME', 'COLUMN_TYPE', 'COLUMN_KEY'], + ); + // phpcs:enable + + $request = ServerRequestFactory::create()->createServerRequest('POST', 'https://example.com/') + ->withQueryParams(['route' => '/database/sql/autocomplete']) + ->withParsedBody(['db' => 'test_db']); + + $response = ($this->getSqlAutoCompleteController($dbiDummy))($request); + + $dbiDummy->assertAllQueriesConsumed(); + self::assertSame(StatusCodeInterface::STATUS_OK, $response->getStatusCode()); + // phpcs:disable Generic.Files.LineLength.TooLong + self::assertSame( + '{"tables":{"test_table":[{"field":"id","columnHint":"int(11) | Primary"},{"field":"name","columnHint":"varchar(20) | Unique"},{"field":"datetimefield","columnHint":"datetime"}]},"success":true}', + (string) $response->getBody(), + ); + // phpcs:enable + } + + private function getSqlAutoCompleteController( + DbiDummy|null $dbiDummy = null, + Config|null $config = null, + ): SqlAutoCompleteController { + $config ??= new Config(); + $dbi = $this->createDatabaseInterface($dbiDummy, $config); + $responseRenderer = new ResponseRenderer(); + $responseRenderer->setAjax(true); + + return new SqlAutoCompleteController($responseRenderer, $dbi, $config); + } +}