phpmyadmin/tests/unit/Config/Forms/User/FeaturesFormTest.php
Thomas Vincent d0de56088e
fix: remove SuhosinDisableWarning setting and all references
Remove the SuhosinDisableWarning configuration property, which warned about
Suhosin PHP extension conflicts. Suhosin is unmaintained and no longer relevant
to modern PHP environments.

- Remove SuhosinDisableWarning from Settings.php (type shape, property,
  constructor assignment, toArray, setSuhosinDisableWarning method)
- Remove from Descriptions.php, FeaturesForm.php, HomeController.php
- Remove testSuhosinDisableWarning() and related test assertions
- Update phpstan-baseline.neon and psalm-baseline.xml
- Remove FAQ 2.8 Suhosin bullet; add note that Suhosin is no longer relevant
- Add config.rst note that this option was removed

Closes #20167

Signed-off-by: Thomas Vincent <thomasvincent@gmail.com>
2026-04-03 02:19:24 -07:00

200 lines
7.1 KiB
PHP

<?php
declare(strict_types=1);
namespace PhpMyAdmin\Tests\Config\Forms\User;
use PhpMyAdmin\Config;
use PhpMyAdmin\Config\ConfigFile;
use PhpMyAdmin\Config\Form;
use PhpMyAdmin\Config\FormDisplay;
use PhpMyAdmin\Config\Forms\BaseForm;
use PhpMyAdmin\Config\Forms\User\FeaturesForm;
use PhpMyAdmin\Tests\AbstractTestCase;
use PHPUnit\Framework\Attributes\CoversClass;
#[CoversClass(FeaturesForm::class)]
#[CoversClass(BaseForm::class)]
#[CoversClass(FormDisplay::class)]
#[CoversClass(Form::class)]
final class FeaturesFormTest extends AbstractTestCase
{
public function testRegisteredForms(): void
{
Form::resetGroupCounter();
$config = new Config();
$config->set('UserprefsDeveloperTab', true);
Config::$instance = $config;
$featuresForm = new FeaturesForm(new ConfigFile([]), 1);
self::assertSame('Features', FeaturesForm::getName());
$forms = $featuresForm->getRegisteredForms();
self::assertCount(7, $forms);
self::assertArrayHasKey('General', $forms);
$form = $forms['General'];
self::assertSame('General', $form->name);
self::assertSame(1, $form->index);
self::assertSame([], $form->default);
self::assertSame(
[
'VersionCheck' => 'VersionCheck',
'NaturalOrder' => 'NaturalOrder',
'InitialSlidersState' => 'InitialSlidersState',
'LoginCookieValidity' => 'LoginCookieValidity',
'SkipLockedTables' => 'SkipLockedTables',
'DisableMultiTableMaintenance' => 'DisableMultiTableMaintenance',
'ShowHint' => 'ShowHint',
'SendErrorReports' => 'SendErrorReports',
'ConsoleEnterExecutes' => 'ConsoleEnterExecutes',
'DisableShortcutKeys' => 'DisableShortcutKeys',
'FirstDayOfCalendar' => 'FirstDayOfCalendar',
],
$form->fields,
);
self::assertArrayHasKey('Databases', $forms);
$form = $forms['Databases'];
self::assertSame('Databases', $form->name);
self::assertSame(1, $form->index);
self::assertSame([], $form->default);
self::assertSame(
[
'only_db' => 'Servers/1/only_db',
'hide_db' => 'Servers/1/hide_db',
'MaxDbList' => 'MaxDbList',
'MaxTableList' => 'MaxTableList',
'DefaultConnectionCollation' => 'DefaultConnectionCollation',
],
$form->fields,
);
self::assertArrayHasKey('Text_fields', $forms);
$form = $forms['Text_fields'];
self::assertSame('Text_fields', $form->name);
self::assertSame(1, $form->index);
self::assertSame([], $form->default);
self::assertSame(
[
'CharEditing' => 'CharEditing',
'MinSizeForInputField' => 'MinSizeForInputField',
'MaxSizeForInputField' => 'MaxSizeForInputField',
'CharTextareaCols' => 'CharTextareaCols',
'CharTextareaRows' => 'CharTextareaRows',
'TextareaCols' => 'TextareaCols',
'TextareaRows' => 'TextareaRows',
'LongtextDoubleTextarea' => 'LongtextDoubleTextarea',
],
$form->fields,
);
self::assertArrayHasKey('Page_titles', $forms);
$form = $forms['Page_titles'];
self::assertSame('Page_titles', $form->name);
self::assertSame(1, $form->index);
self::assertSame([], $form->default);
self::assertSame(
[
'TitleDefault' => 'TitleDefault',
'TitleTable' => 'TitleTable',
'TitleDatabase' => 'TitleDatabase',
'TitleServer' => 'TitleServer',
],
$form->fields,
);
self::assertArrayHasKey('Warnings', $forms);
$form = $forms['Warnings'];
self::assertSame('Warnings', $form->name);
self::assertSame(1, $form->index);
self::assertSame([], $form->default);
self::assertSame(
[
'PmaNoRelation_DisableWarning' => 'PmaNoRelation_DisableWarning',
'LoginCookieValidityDisableWarning' => 'LoginCookieValidityDisableWarning',
'ReservedWordDisableWarning' => 'ReservedWordDisableWarning',
],
$form->fields,
);
self::assertArrayHasKey('Console', $forms);
$form = $forms['Console'];
self::assertSame('Console', $form->name);
self::assertSame(1, $form->index);
self::assertSame([], $form->default);
self::assertSame(
[
'Mode' => 'Console/Mode',
'StartHistory' => 'Console/StartHistory',
'AlwaysExpand' => 'Console/AlwaysExpand',
'CurrentQuery' => 'Console/CurrentQuery',
'EnterExecutes' => 'Console/EnterExecutes',
'DarkTheme' => 'Console/DarkTheme',
'Height' => 'Console/Height',
'GroupQueries' => 'Console/GroupQueries',
'OrderBy' => 'Console/OrderBy',
'Order' => 'Console/Order',
],
$form->fields,
);
self::assertArrayHasKey('Developer', $forms);
$form = $forms['Developer'];
self::assertSame('Developer', $form->name);
self::assertSame(1, $form->index);
self::assertSame([], $form->default);
self::assertSame(['sql' => 'DBG/sql'], $form->fields);
}
public function testGetFields(): void
{
self::assertSame(
[
'VersionCheck',
'NaturalOrder',
'InitialSlidersState',
'LoginCookieValidity',
'SkipLockedTables',
'DisableMultiTableMaintenance',
'ShowHint',
'SendErrorReports',
'ConsoleEnterExecutes',
'DisableShortcutKeys',
'FirstDayOfCalendar',
'Servers/1/only_db',
'Servers/1/hide_db',
'MaxDbList',
'MaxTableList',
'DefaultConnectionCollation',
'CharEditing',
'MinSizeForInputField',
'MaxSizeForInputField',
'CharTextareaCols',
'CharTextareaRows',
'TextareaCols',
'TextareaRows',
'LongtextDoubleTextarea',
'TitleDefault',
'TitleTable',
'TitleDatabase',
'TitleServer',
'PmaNoRelation_DisableWarning',
'LoginCookieValidityDisableWarning',
'ReservedWordDisableWarning',
'Console/Mode',
'Console/StartHistory',
'Console/AlwaysExpand',
'Console/CurrentQuery',
'Console/EnterExecutes',
'Console/DarkTheme',
'Console/Height',
'Console/GroupQueries',
'Console/OrderBy',
'Console/Order',
],
FeaturesForm::getFields(),
);
}
}