From 1be9bfef3f132dec34d5db4b94c199ca5fcf0241 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Wed, 22 May 2024 17:08:13 -0300 Subject: [PATCH 1/5] Remove div#functionConfirmModal from footer.twig MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Creates div#functionConfirmModal when needed instead of including the template for every request. Signed-off-by: Maurício Meneghini Fauth --- resources/js/src/modules/functions.ts | 25 +++++++++++++++++++ resources/templates/footer.twig | 1 - .../templates/modals/function_confirm.twig | 15 ----------- .../JavaScriptMessagesController.php | 1 + tests/unit/FooterTest.php | 6 ++--- 5 files changed, 28 insertions(+), 20 deletions(-) delete mode 100644 resources/templates/modals/function_confirm.twig diff --git a/resources/js/src/modules/functions.ts b/resources/js/src/modules/functions.ts index 342f4d5def..358ab174a7 100644 --- a/resources/js/src/modules/functions.ts +++ b/resources/js/src/modules/functions.ts @@ -1763,6 +1763,29 @@ function sqlPrettyPrint (string) { return output; } +function createFunctionConfirmModal (): void { + if ($('#functionConfirmModal').length > 0) { + return; + } + + const functionConfirmModalTemplate = ''; + $(functionConfirmModalTemplate).appendTo('body'); +} + /** * jQuery function that uses jQueryUI's dialogs to confirm with user. Does not * return a jQuery object yet and hence cannot be chained @@ -1790,6 +1813,8 @@ function confirmDialog (question, url = undefined, callbackFn = undefined, openC return true; } + createFunctionConfirmModal(); + const functionConfirmModal = $('#functionConfirmModal') as JQuery; functionConfirmModal.modal('show'); functionConfirmModal.find('.modal-body').first().html(question); diff --git a/resources/templates/footer.twig b/resources/templates/footer.twig index f9c920c698..3fd8c00343 100644 --- a/resources/templates/footer.twig +++ b/resources/templates/footer.twig @@ -1,4 +1,3 @@ -{{ include('modals/function_confirm.twig') }} {{ include('modals/add_index.twig') }} {{ include('modals/page_settings.twig') }} {% if not is_ajax %} diff --git a/resources/templates/modals/function_confirm.twig b/resources/templates/modals/function_confirm.twig deleted file mode 100644 index a22d17eb39..0000000000 --- a/resources/templates/modals/function_confirm.twig +++ /dev/null @@ -1,15 +0,0 @@ - diff --git a/src/Controllers/JavaScriptMessagesController.php b/src/Controllers/JavaScriptMessagesController.php index 0e79413efe..8b336326b6 100644 --- a/src/Controllers/JavaScriptMessagesController.php +++ b/src/Controllers/JavaScriptMessagesController.php @@ -359,6 +359,7 @@ final class JavaScriptMessagesController implements InvocableController 'strAddingPrimaryKey' => __('Adding primary key'), 'strOK' => __('OK'), 'strDismiss' => __('Click to dismiss this notification'), + 'strConfirm' => __('Confirm'), /* For database/operations.js */ 'strRenamingDatabases' => __('Renaming databases'), diff --git a/tests/unit/FooterTest.php b/tests/unit/FooterTest.php index 69cbfe7f04..42e9836755 100644 --- a/tests/unit/FooterTest.php +++ b/tests/unit/FooterTest.php @@ -106,8 +106,7 @@ class FooterTest extends AbstractTestCase $footer = new Footer($template, Config::getInstance()); $footer->setAjax(true); self::assertSame( - $template->render('modals/function_confirm') . "\n" - . $template->render('modals/add_index') . "\n" + $template->render('modals/add_index') . "\n" . $template->render('modals/page_settings') . "\n", $footer->getDisplay(), ); @@ -147,8 +146,7 @@ class FooterTest extends AbstractTestCase $footer = new Footer($template, Config::getInstance()); $footer->setMinimal(); self::assertSame( - $template->render('modals/function_confirm') . "\n" - . $template->render('modals/add_index') . "\n" + $template->render('modals/add_index') . "\n" . $template->render('modals/page_settings') . "\n \n \n\n", $footer->getDisplay(), From a163d7585613c07fe7648cec8a54240a7d8477a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Wed, 22 May 2024 19:19:37 -0300 Subject: [PATCH 2/5] Remove div#addIndexModal from footer.twig MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Creates div#addIndexModal when needed instead of including the template for every request. Signed-off-by: Maurício Meneghini Fauth --- resources/js/src/modules/indexes.ts | 27 +++++++++++++++++++++++ resources/templates/footer.twig | 1 - resources/templates/modals/add_index.twig | 15 ------------- tests/unit/FooterTest.php | 6 ++--- 4 files changed, 29 insertions(+), 20 deletions(-) delete mode 100644 resources/templates/modals/add_index.twig diff --git a/resources/js/src/modules/indexes.ts b/resources/js/src/modules/indexes.ts index f18e775361..c9671365d1 100644 --- a/resources/js/src/modules/indexes.ts +++ b/resources/js/src/modules/indexes.ts @@ -322,6 +322,8 @@ function showAddIndexDialog (sourceArray, arrayIndex, targetColumns, colIndex, i postData.columns = JSON.stringify(columns); + createAddIndexModal(); + $('#addIndexModalGoButton').on('click', function () { addIndexGo(sourceArray, arrayIndex, index, colIndex); }); @@ -447,6 +449,8 @@ function indexTypeSelectionDialog (sourceArray, indexChoice, colIndex): void { $dialogContent.append($singleColumnRadio); $dialogContent.append($compositeIndexRadio); + createAddIndexModal(); + // 'OK' operation. $('#addIndexModalGoButton').on('click', function () { if ($('#single_column').is(':checked')) { @@ -543,6 +547,29 @@ function off () { }; } +function createAddIndexModal (): void { + if ($('#addIndexModal').length > 0) { + return; + } + + const addIndexModalTemplate = ''; + $(addIndexModalTemplate).appendTo('body'); +} + /** * @return {function} */ diff --git a/resources/templates/footer.twig b/resources/templates/footer.twig index 3fd8c00343..e939de4e60 100644 --- a/resources/templates/footer.twig +++ b/resources/templates/footer.twig @@ -1,4 +1,3 @@ -{{ include('modals/add_index.twig') }} {{ include('modals/page_settings.twig') }} {% if not is_ajax %} diff --git a/resources/templates/modals/add_index.twig b/resources/templates/modals/add_index.twig deleted file mode 100644 index 75c0036b38..0000000000 --- a/resources/templates/modals/add_index.twig +++ /dev/null @@ -1,15 +0,0 @@ - diff --git a/tests/unit/FooterTest.php b/tests/unit/FooterTest.php index 42e9836755..460d3142fb 100644 --- a/tests/unit/FooterTest.php +++ b/tests/unit/FooterTest.php @@ -106,8 +106,7 @@ class FooterTest extends AbstractTestCase $footer = new Footer($template, Config::getInstance()); $footer->setAjax(true); self::assertSame( - $template->render('modals/add_index') . "\n" - . $template->render('modals/page_settings') . "\n", + $template->render('modals/page_settings') . "\n", $footer->getDisplay(), ); } @@ -146,8 +145,7 @@ class FooterTest extends AbstractTestCase $footer = new Footer($template, Config::getInstance()); $footer->setMinimal(); self::assertSame( - $template->render('modals/add_index') . "\n" - . $template->render('modals/page_settings') + $template->render('modals/page_settings') . "\n \n \n\n", $footer->getDisplay(), ); From 50e5350f621359580e185df86cce85f4584ffc94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Wed, 22 May 2024 19:40:45 -0300 Subject: [PATCH 3/5] Remove div#pageSettingsModal from footer.twig MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Creates div#pageSettingsModal when needed instead of including the template for every request. Signed-off-by: Maurício Meneghini Fauth --- resources/js/src/modules/page_settings.ts | 25 +++++++++++++++++++ resources/templates/footer.twig | 1 - resources/templates/modals/page_settings.twig | 15 ----------- tests/unit/FooterTest.php | 11 ++------ 4 files changed, 27 insertions(+), 25 deletions(-) delete mode 100644 resources/templates/modals/page_settings.twig diff --git a/resources/js/src/modules/page_settings.ts b/resources/js/src/modules/page_settings.ts index ce6309a51d..a9e39209af 100644 --- a/resources/js/src/modules/page_settings.ts +++ b/resources/js/src/modules/page_settings.ts @@ -1,5 +1,28 @@ import $ from 'jquery'; +function createPageSettingsModal (): void { + if ($('#pageSettingsModal').length > 0) { + return; + } + + const pageSettingsModalTemplate = ''; + $(pageSettingsModalTemplate).appendTo('body'); +} + /** * @fileoverview function used for page-related settings * @name Page-related settings @@ -8,6 +31,8 @@ import $ from 'jquery'; */ function showSettings (selector) { + createPageSettingsModal(); + // Keeping a clone to restore in case the user cancels the operation var $clone = $(selector + ' .page_settings').clone(true); diff --git a/resources/templates/footer.twig b/resources/templates/footer.twig index e939de4e60..23f6e4528d 100644 --- a/resources/templates/footer.twig +++ b/resources/templates/footer.twig @@ -1,4 +1,3 @@ -{{ include('modals/page_settings.twig') }} {% if not is_ajax %} {% endif %} diff --git a/resources/templates/modals/page_settings.twig b/resources/templates/modals/page_settings.twig deleted file mode 100644 index 95ea17eb40..0000000000 --- a/resources/templates/modals/page_settings.twig +++ /dev/null @@ -1,15 +0,0 @@ - diff --git a/tests/unit/FooterTest.php b/tests/unit/FooterTest.php index 460d3142fb..0126706767 100644 --- a/tests/unit/FooterTest.php +++ b/tests/unit/FooterTest.php @@ -105,10 +105,7 @@ class FooterTest extends AbstractTestCase $template = new Template(); $footer = new Footer($template, Config::getInstance()); $footer->setAjax(true); - self::assertSame( - $template->render('modals/page_settings') . "\n", - $footer->getDisplay(), - ); + self::assertSame('', $footer->getDisplay()); } /** @@ -144,11 +141,7 @@ class FooterTest extends AbstractTestCase $template = new Template(); $footer = new Footer($template, Config::getInstance()); $footer->setMinimal(); - self::assertSame( - $template->render('modals/page_settings') - . "\n \n \n\n", - $footer->getDisplay(), - ); + self::assertSame(" \n \n\n", $footer->getDisplay()); } public function testSetAjax(): void From 4adf5a4cadee3ee7a65fe00901bac0b466b94b24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Wed, 22 May 2024 20:23:53 -0300 Subject: [PATCH 4/5] Remove isAjax from Header and Footer classes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The header and footer will always be empty when the request is ajax, so only the content part is necessary. Signed-off-by: Maurício Meneghini Fauth --- psalm-baseline.xml | 2 -- resources/templates/footer.twig | 6 +----- src/Console.php | 17 +---------------- src/Footer.php | 19 ++----------------- src/Header.php | 27 --------------------------- src/ResponseRenderer.php | 8 +------- tests/unit/ConsoleTest.php | 16 ---------------- tests/unit/FooterTest.php | 21 --------------------- tests/unit/HeaderTest.php | 18 ------------------ tests/unit/ResponseRendererTest.php | 19 ------------------- 10 files changed, 5 insertions(+), 148 deletions(-) diff --git a/psalm-baseline.xml b/psalm-baseline.xml index eda88f983f..6b5d606b44 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -13651,8 +13651,6 @@ - - config->debug->sql]]> diff --git a/resources/templates/footer.twig b/resources/templates/footer.twig index 23f6e4528d..30cfe69bfc 100644 --- a/resources/templates/footer.twig +++ b/resources/templates/footer.twig @@ -1,7 +1,5 @@ -{% if not is_ajax %} -{% endif %} -{% if not is_ajax and not is_minimal %} +{% if not is_minimal %} {% if self_url is not empty %} \n \n\n", $footer->getDisplay()); } - - public function testSetAjax(): void - { - $isAjax = new ReflectionProperty(Footer::class, 'isAjax'); - $footer = new Footer(new Template(), Config::getInstance()); - - self::assertFalse($isAjax->getValue($footer)); - $footer->setAjax(true); - self::assertTrue($isAjax->getValue($footer)); - $footer->setAjax(false); - self::assertFalse($isAjax->getValue($footer)); - } } diff --git a/tests/unit/HeaderTest.php b/tests/unit/HeaderTest.php index 097637a77d..32b63d7cdb 100644 --- a/tests/unit/HeaderTest.php +++ b/tests/unit/HeaderTest.php @@ -269,22 +269,4 @@ class HeaderTest extends AbstractTestCase ]; self::assertSame($expected, $scripts->getFiles()); } - - public function testSetAjax(): void - { - $header = $this->getNewHeaderInstance(); - $console = (new ReflectionProperty(Header::class, 'console'))->getValue($header); - self::assertInstanceOf(Console::class, $console); - $isAjax = new ReflectionProperty(Header::class, 'isAjax'); - $consoleIsAjax = new ReflectionProperty(Console::class, 'isAjax'); - - self::assertFalse($isAjax->getValue($header)); - self::assertFalse($consoleIsAjax->getValue($console)); - $header->setAjax(true); - self::assertTrue($isAjax->getValue($header)); - self::assertTrue($consoleIsAjax->getValue($console)); - $header->setAjax(false); - self::assertFalse($isAjax->getValue($header)); - self::assertFalse($consoleIsAjax->getValue($console)); - } } diff --git a/tests/unit/ResponseRendererTest.php b/tests/unit/ResponseRendererTest.php index fd2a2b3f44..cc639cac8e 100644 --- a/tests/unit/ResponseRendererTest.php +++ b/tests/unit/ResponseRendererTest.php @@ -6,15 +6,12 @@ namespace PhpMyAdmin\Tests; use Fig\Http\Message\StatusCodeInterface; use PhpMyAdmin\DatabaseInterface; -use PhpMyAdmin\Footer; use PhpMyAdmin\Header; use PhpMyAdmin\Html\MySQLDocumentation; use PhpMyAdmin\Message; use PhpMyAdmin\ResponseRenderer; use PhpMyAdmin\Scripts; use PHPUnit\Framework\Attributes\CoversClass; -use PHPUnit\Framework\Attributes\PreserveGlobalState; -use PHPUnit\Framework\Attributes\RunInSeparateProcess; use ReflectionProperty; use function array_column; @@ -31,32 +28,16 @@ class ResponseRendererTest extends AbstractTestCase $GLOBALS['lang'] = 'en'; } - #[RunInSeparateProcess] - #[PreserveGlobalState(false)] public function testSetAjax(): void { $_REQUEST = []; (new ReflectionProperty(ResponseRenderer::class, 'instance'))->setValue(null, null); $response = ResponseRenderer::getInstance(); - $header = $response->getHeader(); - $footer = (new ReflectionProperty(ResponseRenderer::class, 'footer'))->getValue($response); - self::assertInstanceOf(Footer::class, $footer); - $headerIsAjax = new ReflectionProperty(Header::class, 'isAjax'); - $footerIsAjax = new ReflectionProperty(Footer::class, 'isAjax'); - self::assertFalse($response->isAjax()); - self::assertFalse($headerIsAjax->getValue($header)); - self::assertFalse($footerIsAjax->getValue($footer)); - $response->setAjax(true); self::assertTrue($response->isAjax()); - self::assertTrue($headerIsAjax->getValue($header)); - self::assertTrue($footerIsAjax->getValue($footer)); - $response->setAjax(false); self::assertFalse($response->isAjax()); - self::assertFalse($headerIsAjax->getValue($header)); - self::assertFalse($footerIsAjax->getValue($footer)); (new ReflectionProperty(ResponseRenderer::class, 'instance'))->setValue(null, null); } From e4375c250d3477f4dc530ac0547a3f26ae8afb97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Thu, 23 May 2024 00:32:18 -0300 Subject: [PATCH 5/5] Merge header.twig and footer.twig into base.twig 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 | 1 + resources/templates/base.twig | 171 +++++++++++++++++++++++++++++++- resources/templates/footer.twig | 43 -------- resources/templates/header.twig | 124 ----------------------- src/Footer.php | 14 ++- src/Header.php | 12 +-- tests/unit/FooterTest.php | 36 ++++++- tests/unit/HeaderTest.php | 61 ++++++++---- 8 files changed, 254 insertions(+), 208 deletions(-) delete mode 100644 resources/templates/footer.twig delete mode 100644 resources/templates/header.twig diff --git a/psalm-baseline.xml b/psalm-baseline.xml index 6b5d606b44..22d5ac77a5 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -13787,6 +13787,7 @@ + diff --git a/resources/templates/base.twig b/resources/templates/base.twig index 65774b3ff6..2a129c259f 100644 --- a/resources/templates/base.twig +++ b/resources/templates/base.twig @@ -1 +1,170 @@ -{{- header|raw -}}{{- content|raw -}}{{- footer|raw -}} + + + + + + + + + + {% if not header.allow_third_party_framing -%} + + {%- endif %} + + + + + + + + + {{ header.title }} + {{ header.scripts|raw }} + + + +{% endif %} + +{% if header.is_menu_enabled and header.server > 0 %} + {{ header.menu|raw }} + +{% endif %} + +{{ header.console|raw }} + +
+ {{ header.messages|raw }} + + {%- if header.is_logged_in -%} + {{ include('modals/preview_sql_modal.twig') }} + {{ include('modals/enum_set_editor.twig') }} + {{ include('modals/create_view.twig') }} + {%- endif -%} + +{{ content|raw }} +
+ +{% if not footer.is_minimal %} + {% if footer.self_url is not empty %} + + {% endif %} + +
+ {{ footer.error_messages|raw }} +
+ + {{ footer.scripts|raw }} + + {% if footer.is_demo %} +
+ {% apply notice %} + {{ t('phpMyAdmin Demo Server') }}: + {% if footer.git_revision_info is not empty %} + {% set revision_info -%} + {{ footer.git_revision_info.revision }} + {%- endset %} + {% set branch_info -%} + {{ footer.git_revision_info.branch }} + {%- endset %} + {{ t('Currently running Git revision %1$s from the %2$s branch.')|format(revision_info, branch_info)|raw }} + {% else %} + {{ t('Git information missing!') }} + {% endif %} + {% endapply %} +
+ {% endif %} + + {{ footer.footer|raw }} +{% endif %} + + diff --git a/resources/templates/footer.twig b/resources/templates/footer.twig deleted file mode 100644 index 30cfe69bfc..0000000000 --- a/resources/templates/footer.twig +++ /dev/null @@ -1,43 +0,0 @@ - -{% if not is_minimal %} - {% if self_url is not empty %} - - {% endif %} - -
- {{ error_messages|raw }} -
- - {{ scripts|raw }} - - {% if is_demo %} -
- {% apply notice %} - {{ t('phpMyAdmin Demo Server') }}: - {% if git_revision_info is not empty %} - {% set revision_info -%} - {{ git_revision_info.revision }} - {%- endset %} - {% set branch_info -%} - {{ git_revision_info.branch }} - {%- endset %} - {{ t('Currently running Git revision %1$s from the %2$s branch.')|format(revision_info, branch_info)|raw }} - {% else %} - {{ t('Git information missing!') }} - {% endif %} - {% endapply %} -
- {% endif %} - - {{ footer|raw }} -{% endif %} - - diff --git a/resources/templates/header.twig b/resources/templates/header.twig deleted file mode 100644 index b92dc5a34f..0000000000 --- a/resources/templates/header.twig +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - {% if not allow_third_party_framing -%} - - {%- endif %} - - - - - - - - - {{ title }} - {{ scripts|raw }} - - - - {% endif %} - - {% if is_menu_enabled and server > 0 %} - {{ menu|raw }} - - {% endif %} - - {{ console|raw }} - -
- {{ messages|raw }} - - {%- if is_logged_in -%} - {{ include('modals/preview_sql_modal.twig') }} - {{ include('modals/enum_set_editor.twig') }} - {{ include('modals/create_view.twig') }} - {%- endif -%} diff --git a/src/Footer.php b/src/Footer.php index dcf60e8459..29162531cc 100644 --- a/src/Footer.php +++ b/src/Footer.php @@ -35,9 +35,9 @@ class Footer */ private bool $isMinimal = false; - public function __construct(private readonly Template $template, private readonly Config $config) + public function __construct(Template $template, private readonly Config $config) { - $this->scripts = new Scripts($this->template); + $this->scripts = new Scripts($template); } /** @@ -166,10 +166,8 @@ class Footer return $this->scripts; } - /** - * Renders the footer - */ - public function getDisplay(): string + /** @return mixed[] */ + public function getDisplay(): array { if (! $this->isMinimal) { if (Core::getEnv('SCRIPT_NAME') !== '') { @@ -187,7 +185,7 @@ class Footer $footer = Config::renderFooter(); } - return $this->template->render('footer', [ + return [ 'is_minimal' => $this->isMinimal, 'self_url' => $url ?? null, 'error_messages' => $errorMessages ?? '', @@ -195,6 +193,6 @@ class Footer 'is_demo' => $this->config->config->debug->demo, 'git_revision_info' => $gitRevisionInfo ?? [], 'footer' => $footer ?? '', - ]); + ]; } } diff --git a/src/Header.php b/src/Header.php index 46fb75e14e..ce1498130a 100644 --- a/src/Header.php +++ b/src/Header.php @@ -207,12 +207,8 @@ class Header $this->warningsEnabled = false; } - /** - * Generates the header - * - * @return string The header - */ - public function getDisplay(): string + /** @return mixed[] */ + public function getDisplay(): array { $this->sendHttpHeaders(); @@ -284,7 +280,7 @@ class Header $this->scripts->addFile('datetimepicker.js'); $this->scripts->addFile('validator-messages.js'); - return $this->template->render('header', [ + return [ 'lang' => $GLOBALS['lang'], 'allow_third_party_framing' => $this->config->settings['AllowThirdPartyFraming'], 'base_dir' => $baseDir, @@ -310,7 +306,7 @@ class Header 'theme_id' => $theme->getId(), 'current_user' => $dbi->getCurrentUserAndHost(), 'is_mariadb' => $dbi->isMariaDB(), - ]); + ]; } /** diff --git a/tests/unit/FooterTest.php b/tests/unit/FooterTest.php index 743a05e96b..9030edb404 100644 --- a/tests/unit/FooterTest.php +++ b/tests/unit/FooterTest.php @@ -118,10 +118,27 @@ class FooterTest extends AbstractTestCase public function testDisplay(): void { $footer = new Footer(new Template(), Config::getInstance()); - self::assertStringContainsString( - 'Open new phpMyAdmin window', - $footer->getDisplay(), - ); + $scripts = <<<'HTML' + + + + HTML; + + $expected = [ + 'is_minimal' => false, + 'self_url' => 'index.php?route=%2F&server=1&lang=en', + 'error_messages' => '', + 'scripts' => $scripts, + 'is_demo' => false, + 'git_revision_info' => [], + 'footer' => '', + ]; + self::assertSame($expected, $footer->getDisplay()); } /** @@ -132,6 +149,15 @@ class FooterTest extends AbstractTestCase $template = new Template(); $footer = new Footer($template, Config::getInstance()); $footer->setMinimal(); - self::assertSame("
\n \n\n", $footer->getDisplay()); + $expected = [ + 'is_minimal' => true, + 'self_url' => null, + 'error_messages' => '', + 'scripts' => '', + 'is_demo' => false, + 'git_revision_info' => [], + 'footer' => '', + ]; + self::assertSame($expected, $footer->getDisplay()); } } diff --git a/tests/unit/HeaderTest.php b/tests/unit/HeaderTest.php index 32b63d7cdb..ac63c41465 100644 --- a/tests/unit/HeaderTest.php +++ b/tests/unit/HeaderTest.php @@ -12,6 +12,7 @@ use PhpMyAdmin\Current; use PhpMyAdmin\DatabaseInterface; use PhpMyAdmin\Header; use PhpMyAdmin\Template; +use PhpMyAdmin\Version; use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\Attributes\Medium; @@ -64,30 +65,52 @@ class HeaderTest extends AbstractTestCase ); } - /** - * Test for enable - */ public function testEnable(): void { Current::$server = 0; - $header = $this->getNewHeaderInstance(); - self::assertStringContainsString( - 'phpMyAdmin', - $header->getDisplay(), - ); - } + $GLOBALS['message'] = ''; + $config = Config::getInstance(); + $config->settings['CodemirrorEnable'] = false; + $config->settings['SendErrorReports'] = 'never'; + $config->settings['enable_drag_drop_import'] = false; + $config->settings['DisableShortcutKeys'] = true; + $dbi = $this->createDatabaseInterface(); + DatabaseInterface::$instance = $dbi; + $relation = new Relation($dbi); + $template = new Template($config); + $console = new Console($relation, $template, new BookmarkRepository($dbi, $relation)); + $header = new Header($template, $console, $config); - /** - * Test for Set BodyId - */ - public function testSetBodyId(): void - { - $header = $this->getNewHeaderInstance(); $header->setBodyId('PMA_header_id'); - self::assertStringContainsString( - 'PMA_header_id', - $header->getDisplay(), - ); + $actual = $header->getDisplay(); + $expected = [ + 'lang' => 'en', + 'allow_third_party_framing' => false, + 'base_dir' => '', + 'theme_path' => '', + 'version' => 'v=' . Version::VERSION, + 'text_dir' => 'ltr', + 'server' => 0, + 'title' => 'phpMyAdmin', + 'scripts' => $header->getScripts()->getDisplay(), + 'body_id' => 'PMA_header_id', + 'navigation' => '', + 'custom_header' => '', + 'load_user_preferences' => '', + 'show_hint' => true, + 'is_warnings_enabled' => true, + 'is_menu_enabled' => true, + 'is_logged_in' => true, + 'menu' => '', + 'console' => $console->getDisplay(), + 'messages' => '', + 'theme_color_mode' => 'light', + 'theme_color_modes' => ['light'], + 'theme_id' => '', + 'current_user' => ['pma_test', 'localhost'], + 'is_mariadb' => false, + ]; + self::assertSame($expected, $actual); } /**