createDatabaseInterface(); Current::$lang = 'en'; } public function testSetAjax(): void { $_REQUEST = []; (new ReflectionProperty(ResponseRenderer::class, 'instance'))->setValue(null, null); $response = ResponseRenderer::getInstance(); self::assertFalse($response->isAjax()); $response->setAjax(true); self::assertTrue($response->isAjax()); $response->setAjax(false); self::assertFalse($response->isAjax()); (new ReflectionProperty(ResponseRenderer::class, 'instance'))->setValue(null, null); } public function testAddScriptFiles(): void { (new ReflectionProperty(ResponseRenderer::class, 'instance'))->setValue(null, null); $response = ResponseRenderer::getInstance(); $headerScripts = $response->getHeader()->getScripts(); $files = array_column($headerScripts->getFiles(), 'name'); self::assertNotContains('server/privileges.js', $files); self::assertNotContains('vendor/zxcvbn-ts.js', $files); $response->addScriptFiles(['server/privileges.js', 'vendor/zxcvbn-ts.js']); $files = array_column($headerScripts->getFiles(), 'name'); self::assertContains('server/privileges.js', $files); self::assertContains('vendor/zxcvbn-ts.js', $files); (new ReflectionProperty(ResponseRenderer::class, 'instance'))->setValue(null, null); } public function testMissingParameterError(): void { (new ReflectionProperty(ResponseRenderer::class, 'instance'))->setValue(null, null); $responseRenderer = ResponseRenderer::getInstance(); $responseRenderer->setAjax(false); $message = 'Missing parameter: param_name'; $message .= MySQLDocumentation::showDocumentation('faq', 'faqmissingparameters', true); $message .= '[br]'; $expected = Message::error($message)->getDisplay(); $response = $responseRenderer->missingParameterError('param_name'); self::assertStringContainsString($expected, (string) $response->getBody()); self::assertSame(StatusCodeInterface::STATUS_BAD_REQUEST, $response->getStatusCode()); (new ReflectionProperty(ResponseRenderer::class, 'instance'))->setValue(null, null); } public function testHtmlResponse(): void { (new ReflectionProperty(ResponseRenderer::class, 'instance'))->setValue(null, null); $_SERVER['SCRIPT_NAME'] = 'index.php'; Current::$server = 0; Current::$message = null; $responseRenderer = ResponseRenderer::getInstance(); $responseRenderer->setAjax(false); $responseRenderer->addHTML('
TEST
'); $response = $responseRenderer->response(); self::assertSame(StatusCodeInterface::STATUS_OK, $response->getStatusCode()); self::assertSame('text/html; charset=utf-8', $response->getHeaderLine('Content-Type')); $header = $responseRenderer->getHeader(); self::assertSame( (new Template(new Config()))->render('base', [ 'header' => [ 'lang' => 'en', 'allow_third_party_framing' => false, 'codemirror_enable' => true, 'lint_enable' => true, 'theme_path' => '', 'server' => 0, 'title' => 'phpMyAdmin', 'scripts' => $header->getScripts()->getDisplay(), 'body_id' => '', 'navigation' => '', 'custom_header' => '', 'load_user_preferences' => '', 'show_hint' => true, 'is_warnings_enabled' => true, 'is_menu_enabled' => true, 'is_logged_in' => true, 'menu' => '', 'console' => $header->getConsole()->getDisplay(), 'messages' => '', 'theme_color_mode' => 'light', 'theme_color_modes' => ['light'], 'theme_id' => '', 'current_user' => ['pma_test', 'localhost'], 'is_mariadb' => false, ], 'content' => '
TEST
', 'footer' => [ 'is_minimal' => false, 'self_url' => 'index.php?route=%2F&server=0&lang=en', 'error_messages' => '', 'scripts' => <<<'HTML' HTML, 'is_demo' => false, 'git_revision_info' => [], 'footer' => '', ], ]), (string) $response->getBody(), ); (new ReflectionProperty(ResponseRenderer::class, 'instance'))->setValue(null, null); } public function testJsonResponse(): void { (new ReflectionProperty(ResponseRenderer::class, 'instance'))->setValue(null, null); $_SERVER['SCRIPT_NAME'] = 'index.php'; Current::$server = 0; Current::$message = null; $responseRenderer = ResponseRenderer::getInstance(); $responseRenderer->setAjax(true); $responseRenderer->addJSON('message', 'test message'); $responseRenderer->addJSON('test', 'test'); $response = $responseRenderer->response(); self::assertSame(StatusCodeInterface::STATUS_OK, $response->getStatusCode()); self::assertSame('application/json; charset=UTF-8', $response->getHeaderLine('Content-Type')); $body = (string) $response->getBody(); self::assertJson($body); $header = $responseRenderer->getHeader(); self::assertEquals( [ 'message' => 'test message', 'test' => 'test', 'success' => true, 'title' => 'phpMyAdmin', 'menu' => $header->getMenu()->getDisplay(), 'scripts' => $header->getScripts()->getFiles(), 'selflink' => 'index.php?route=%2F&server=0&lang=en', 'displayMessage' => '', 'debug' => "'false'", 'promptPhpErrors' => false, 'reloadQuerywindow' => ['db' => '', 'table' => '', 'sql_query' => ''], 'params' => $header->getJsParams(), ], json_decode($body, true), ); (new ReflectionProperty(ResponseRenderer::class, 'instance'))->setValue(null, null); } }