phpmyadmin/tests/unit/Config/Forms/Setup/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

287 lines
11 KiB
PHP

<?php
declare(strict_types=1);
namespace PhpMyAdmin\Tests\Config\Forms\Setup;
use PhpMyAdmin\Config\ConfigFile;
use PhpMyAdmin\Config\Form;
use PhpMyAdmin\Config\FormDisplay;
use PhpMyAdmin\Config\Forms\BaseForm;
use PhpMyAdmin\Config\Forms\Setup\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();
$featuresForm = new FeaturesForm(new ConfigFile([]), 1);
self::assertSame('Features', FeaturesForm::getName());
$forms = $featuresForm->getRegisteredForms();
self::assertCount(10, $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(
[
'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(['UserprefsDeveloperTab' => 'UserprefsDeveloperTab', 'sql' => 'DBG/sql'], $form->fields);
self::assertArrayHasKey('Import_export', $forms);
$form = $forms['Import_export'];
self::assertSame('Import_export', $form->name);
self::assertSame(1, $form->index);
self::assertSame(['RecodingEngine' => ':group'], $form->default);
self::assertSame(
[
'UploadDir' => 'UploadDir',
'SaveDir' => 'SaveDir',
'RecodingEngine' => 'RecodingEngine',
'IconvExtraParams' => 'IconvExtraParams',
':group:end:0' => ':group:end:0',
'ZipDump' => 'ZipDump',
'GZipDump' => 'GZipDump',
'BZipDump' => 'BZipDump',
'CompressOnFly' => 'CompressOnFly',
],
$form->fields,
);
self::assertArrayHasKey('Security', $forms);
$form = $forms['Security'];
self::assertSame('Security', $form->name);
self::assertSame(1, $form->index);
self::assertSame([], $form->default);
self::assertSame(
[
'blowfish_secret' => 'blowfish_secret',
'CheckConfigurationPermissions' => 'CheckConfigurationPermissions',
'TrustedProxies' => 'TrustedProxies',
'AllowUserDropDatabase' => 'AllowUserDropDatabase',
'AllowArbitraryServer' => 'AllowArbitraryServer',
'ArbitraryServerRegexp' => 'ArbitraryServerRegexp',
'LoginCookieRecall' => 'LoginCookieRecall',
'LoginCookieStore' => 'LoginCookieStore',
'LoginCookieDeleteAll' => 'LoginCookieDeleteAll',
'CaptchaLoginPublicKey' => 'CaptchaLoginPublicKey',
'CaptchaLoginPrivateKey' => 'CaptchaLoginPrivateKey',
'CaptchaSiteVerifyURL' => 'CaptchaSiteVerifyURL',
],
$form->fields,
);
self::assertArrayHasKey('Other_core_settings', $forms);
$form = $forms['Other_core_settings'];
self::assertSame('Other_core_settings', $form->name);
self::assertSame(1, $form->index);
self::assertSame([], $form->default);
self::assertSame(
[
'PersistentConnections' => 'PersistentConnections',
'ExecTimeLimit' => 'ExecTimeLimit',
'MemoryLimit' => 'MemoryLimit',
'UseDbSearch' => 'UseDbSearch',
'ProxyUrl' => 'ProxyUrl',
'ProxyUser' => 'ProxyUser',
'ProxyPass' => 'ProxyPass',
'AllowThirdPartyFraming' => 'AllowThirdPartyFraming',
'ZeroConf' => 'ZeroConf',
],
$form->fields,
);
}
public function testGetFields(): void
{
self::assertSame(
[
'VersionCheck',
'NaturalOrder',
'InitialSlidersState',
'LoginCookieValidity',
'SkipLockedTables',
'DisableMultiTableMaintenance',
'ShowHint',
'SendErrorReports',
'ConsoleEnterExecutes',
'DisableShortcutKeys',
'FirstDayOfCalendar',
'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',
'UploadDir',
'SaveDir',
'RecodingEngine',
'IconvExtraParams',
':group:end',
'ZipDump',
'GZipDump',
'BZipDump',
'CompressOnFly',
'blowfish_secret',
'CheckConfigurationPermissions',
'TrustedProxies',
'AllowUserDropDatabase',
'AllowArbitraryServer',
'ArbitraryServerRegexp',
'LoginCookieRecall',
'LoginCookieStore',
'LoginCookieDeleteAll',
'CaptchaLoginPublicKey',
'CaptchaLoginPrivateKey',
'CaptchaSiteVerifyURL',
'UserprefsDeveloperTab',
'DBG/sql',
'PersistentConnections',
'ExecTimeLimit',
'MemoryLimit',
'UseDbSearch',
'ProxyUrl',
'ProxyUser',
'ProxyPass',
'AllowThirdPartyFraming',
'ZeroConf',
],
FeaturesForm::getFields(),
);
}
}