diff --git a/psalm-baseline.xml b/psalm-baseline.xml
index d498627d1a20..98f508930b03 100644
--- a/psalm-baseline.xml
+++ b/psalm-baseline.xml
@@ -13188,6 +13188,11 @@
+
+
+
+
+
@@ -13895,6 +13900,8 @@
+
+
diff --git a/tests/unit/Config/ConfigFileTest.php b/tests/unit/Config/ConfigFileTest.php
index d3565bc37f7b..fe67ea7ce6c7 100644
--- a/tests/unit/Config/ConfigFileTest.php
+++ b/tests/unit/Config/ConfigFileTest.php
@@ -8,13 +8,14 @@
use PhpMyAdmin\Config\Settings;
use PhpMyAdmin\Tests\AbstractTestCase;
use PHPUnit\Framework\Attributes\CoversClass;
-use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\Medium;
use stdClass;
use function array_keys;
use function count;
#[CoversClass(ConfigFile::class)]
+#[Medium]
class ConfigFileTest extends AbstractTestCase
{
/**
@@ -275,7 +276,6 @@ public function testConfigFileSetInUserPreferences(): void
/**
* Test for ConfigFile::getFlatDefaultConfig
*/
- #[Group('medium')]
public function testGetFlatDefaultConfig(): void
{
$flatDefaultConfig = $this->object->getFlatDefaultConfig();
diff --git a/tests/unit/Config/FormDisplayTest.php b/tests/unit/Config/FormDisplayTest.php
index 49feb9ef5d80..b78bcd373ed5 100644
--- a/tests/unit/Config/FormDisplayTest.php
+++ b/tests/unit/Config/FormDisplayTest.php
@@ -11,7 +11,7 @@
use PhpMyAdmin\Current;
use PhpMyAdmin\Tests\AbstractTestCase;
use PHPUnit\Framework\Attributes\CoversClass;
-use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\Medium;
use ReflectionClass;
use ReflectionMethod;
use ReflectionProperty;
@@ -19,6 +19,7 @@
use function function_exists;
#[CoversClass(FormDisplay::class)]
+#[Medium]
class FormDisplayTest extends AbstractTestCase
{
protected FormDisplay $object;
@@ -50,7 +51,6 @@ protected function tearDown(): void
/**
* Test for FormDisplay::registerForm
*/
- #[Group('medium')]
public function testRegisterForm(): void
{
$reflection = new ReflectionClass(FormDisplay::class);
@@ -81,7 +81,6 @@ public function testRegisterForm(): void
/**
* Test for FormDisplay::process
*/
- #[Group('medium')]
public function testProcess(): void
{
self::assertFalse(
diff --git a/tests/unit/Config/FormTest.php b/tests/unit/Config/FormTest.php
index a30dee7ffe14..593ea98bbcfb 100644
--- a/tests/unit/Config/FormTest.php
+++ b/tests/unit/Config/FormTest.php
@@ -8,7 +8,7 @@
use PhpMyAdmin\Config\Form;
use PhpMyAdmin\Tests\AbstractTestCase;
use PHPUnit\Framework\Attributes\CoversClass;
-use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\Medium;
use ReflectionClass;
use ReflectionProperty;
@@ -16,6 +16,7 @@
use function preg_match;
#[CoversClass(Form::class)]
+#[Medium]
class FormTest extends AbstractTestCase
{
protected Form $object;
@@ -50,7 +51,6 @@ protected function tearDown(): void
/**
* Test for Form::__constructor
*/
- #[Group('medium')]
public function testContructor(): void
{
self::assertSame(1, $this->object->index);
diff --git a/tests/unit/ConfigStorage/UserGroupsTest.php b/tests/unit/ConfigStorage/UserGroupsTest.php
index b1716a234d04..d833cb77aaad 100644
--- a/tests/unit/ConfigStorage/UserGroupsTest.php
+++ b/tests/unit/ConfigStorage/UserGroupsTest.php
@@ -16,9 +16,10 @@
use PhpMyAdmin\Tests\Stubs\DummyResult;
use PhpMyAdmin\Url;
use PHPUnit\Framework\Attributes\CoversClass;
-use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\Medium;
#[CoversClass(UserGroups::class)]
+#[Medium]
class UserGroupsTest extends AbstractTestCase
{
private ConfigurableMenusFeature $configurableMenusFeature;
@@ -44,7 +45,6 @@ protected function setUp(): void
/**
* Tests UserGroups::getHtmlForUserGroupsTable() function when there are no user groups
*/
- #[Group('medium')]
public function testGetHtmlForUserGroupsTableWithNoUserGroups(): void
{
$expectedQuery = 'SELECT * FROM `pmadb`.`usergroups` ORDER BY `usergroup` ASC';
diff --git a/tests/unit/ConfigTest.php b/tests/unit/ConfigTest.php
index 0e5d6bc50d36..4615045203ea 100644
--- a/tests/unit/ConfigTest.php
+++ b/tests/unit/ConfigTest.php
@@ -13,6 +13,7 @@
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\Attributes\Depends;
use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\Medium;
use ReflectionProperty;
use function define;
@@ -41,6 +42,7 @@
use const PHP_OS;
#[CoversClass(Config::class)]
+#[Medium]
class ConfigTest extends AbstractTestCase
{
protected Config $object;
@@ -126,7 +128,6 @@ public function testLoadConfigs(): void
/**
* Test for CheckSystem
*/
- #[Group('medium')]
public function testCheckSystem(): void
{
$this->object->checkSystem();
diff --git a/tests/unit/Controllers/Table/Structure/MoveColumnsControllerTest.php b/tests/unit/Controllers/Table/Structure/MoveColumnsControllerTest.php
index 9681ff4b6189..49f895cba99f 100644
--- a/tests/unit/Controllers/Table/Structure/MoveColumnsControllerTest.php
+++ b/tests/unit/Controllers/Table/Structure/MoveColumnsControllerTest.php
@@ -9,19 +9,20 @@
use PhpMyAdmin\Template;
use PhpMyAdmin\Tests\AbstractTestCase;
use PhpMyAdmin\Tests\Stubs\ResponseRenderer as ResponseStub;
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\DataProvider;
use ReflectionClass;
use function preg_replace;
-/** @covers \PhpMyAdmin\Controllers\Table\Structure\MoveColumnsController */
+#[CoversClass(MoveColumnsController::class)]
class MoveColumnsControllerTest extends AbstractTestCase
{
/**
* @param array $columnNames
* @psalm-param list $columnNames
- *
- * @dataProvider providerForTestGenerateAlterTableSql
*/
+ #[DataProvider('providerForTestGenerateAlterTableSql')]
public function testGenerateAlterTableSql(string $createStatement, array $columnNames, string|null $expected): void
{
$class = new ReflectionClass(MoveColumnsController::class);
diff --git a/tests/unit/EncodingTest.php b/tests/unit/EncodingTest.php
index 4bcc8acaaaac..7e9ab14739c1 100644
--- a/tests/unit/EncodingTest.php
+++ b/tests/unit/EncodingTest.php
@@ -8,6 +8,7 @@
use PhpMyAdmin\Encoding;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\Medium;
use PHPUnit\Framework\Attributes\RequiresPhpExtension;
use function _setlocale;
@@ -23,6 +24,7 @@
use const PHP_INT_SIZE;
#[CoversClass(Encoding::class)]
+#[Medium]
class EncodingTest extends AbstractTestCase
{
protected function setUp(): void
@@ -42,7 +44,6 @@ protected function tearDown(): void
/**
* Test for Encoding::convertString
*/
- #[Group('medium')]
public function testNoConversion(): void
{
self::assertSame(
diff --git a/tests/unit/Error/ErrorHandlerTest.php b/tests/unit/Error/ErrorHandlerTest.php
index 412a50818792..ece16f497a50 100644
--- a/tests/unit/Error/ErrorHandlerTest.php
+++ b/tests/unit/Error/ErrorHandlerTest.php
@@ -13,7 +13,7 @@
use PhpMyAdmin\Tests\AbstractTestCase;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\DataProvider;
-use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\Medium;
use Throwable;
use function array_keys;
@@ -26,6 +26,7 @@
use const E_WARNING;
#[CoversClass(ErrorHandler::class)]
+#[Medium]
class ErrorHandlerTest extends AbstractTestCase
{
protected ErrorHandler $object;
@@ -121,7 +122,6 @@ public function testCheckSavedErrors(): void
/**
* Test for countErrors
*/
- #[Group('medium')]
public function testCountErrors(): void
{
$this->object->addError('Compile Error', E_WARNING, 'error.txt', 15);
@@ -134,7 +134,6 @@ public function testCountErrors(): void
/**
* Test for sliceErrors
*/
- #[Group('medium')]
public function testSliceErrors(): void
{
$this->object->addError('Compile Error', E_WARNING, 'error.txt', 15);
@@ -164,7 +163,6 @@ public function testSliceErrors(): void
/**
* Test for sliceErrors with 10 elements as an example
*/
- #[Group('medium')]
public function testSliceErrorsOtherExample(): void
{
for ($i = 0; $i < 10; $i++) {
diff --git a/tests/unit/FooterTest.php b/tests/unit/FooterTest.php
index 9030edb40447..966aa3d83690 100644
--- a/tests/unit/FooterTest.php
+++ b/tests/unit/FooterTest.php
@@ -11,11 +11,12 @@
use PhpMyAdmin\Footer;
use PhpMyAdmin\Template;
use PHPUnit\Framework\Attributes\CoversClass;
-use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\Medium;
use function json_encode;
#[CoversClass(Footer::class)]
+#[Medium]
class FooterTest extends AbstractTestCase
{
/** @var mixed[] store private attributes of PhpMyAdmin\Footer */
@@ -64,7 +65,6 @@ protected function tearDown(): void
/**
* Test for getDebugMessage
*/
- #[Group('medium')]
public function testGetDebugMessage(): void
{
$config = Config::getInstance();
@@ -114,7 +114,6 @@ public function testGetScripts(): void
/**
* Test for displaying footer
*/
- #[Group('medium')]
public function testDisplay(): void
{
$footer = new Footer(new Template(), Config::getInstance());
diff --git a/tests/unit/Html/GeneratorTest.php b/tests/unit/Html/GeneratorTest.php
index 390deba9b4c1..62eeb317763b 100644
--- a/tests/unit/Html/GeneratorTest.php
+++ b/tests/unit/Html/GeneratorTest.php
@@ -15,7 +15,7 @@
use PhpMyAdmin\Utils\SessionCache;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\DataProvider;
-use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\Medium;
use function __;
use function _pgettext;
@@ -23,6 +23,7 @@
use function urlencode;
#[CoversClass(Generator::class)]
+#[Medium]
class GeneratorTest extends AbstractTestCase
{
/**
@@ -38,7 +39,6 @@ protected function setUp(): void
/**
* Test for getDbLink
*/
- #[Group('medium')]
public function testGetDbLinkNull(): void
{
Current::$database = 'test_db';
diff --git a/tests/unit/Import/ImportTest.php b/tests/unit/Import/ImportTest.php
index edfa0cffa131..efee49ab14dc 100644
--- a/tests/unit/Import/ImportTest.php
+++ b/tests/unit/Import/ImportTest.php
@@ -222,9 +222,8 @@ public static function provDetectType(): array
* Test for checkIfRollbackPossible
*
* @param string $sqlQuery SQL Query for which rollback is possible
- *
- * @dataProvider provPMACheckIfRollbackPossiblePositive
*/
+ #[DataProvider('provPMACheckIfRollbackPossiblePositive')]
public function testCheckIfRollbackPossiblePositive(string $sqlQuery): void
{
Current::$database = 'PMA';
@@ -258,9 +257,8 @@ public static function provPMACheckIfRollbackPossiblePositive(): array
* Negative test for checkIfRollbackPossible
*
* @param string $sqlQuery SQL Query for which rollback is possible
- *
- * @dataProvider provPMACheckIfRollbackPossibleNegative
*/
+ #[DataProvider('provPMACheckIfRollbackPossibleNegative')]
public function testCheckIfRollbackPossibleNegative(string $sqlQuery): void
{
Current::$database = 'PMA';
diff --git a/tests/unit/LanguageTest.php b/tests/unit/LanguageTest.php
index 3622f07b0d53..58e9c1fde7ec 100644
--- a/tests/unit/LanguageTest.php
+++ b/tests/unit/LanguageTest.php
@@ -9,7 +9,7 @@
use PhpMyAdmin\LanguageManager;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\DataProvider;
-use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\Large;
use function _ngettext;
use function count;
@@ -19,6 +19,7 @@
#[CoversClass(Language::class)]
#[CoversClass(LanguageManager::class)]
+#[Large]
class LanguageTest extends AbstractTestCase
{
private LanguageManager $manager;
@@ -237,7 +238,6 @@ public static function selectDataProvider(): array
* @param string $locale locale name
*/
#[DataProvider('listLocales')]
- #[Group('large')]
public function testGettext(string $locale): void
{
Config::getInstance()->set('FilterLanguages', '');
diff --git a/tests/unit/Replication/ReplicationGuiTest.php b/tests/unit/Replication/ReplicationGuiTest.php
index 8105bde27689..936e75277a66 100644
--- a/tests/unit/Replication/ReplicationGuiTest.php
+++ b/tests/unit/Replication/ReplicationGuiTest.php
@@ -13,9 +13,10 @@
use PhpMyAdmin\Template;
use PhpMyAdmin\Tests\AbstractTestCase;
use PHPUnit\Framework\Attributes\CoversClass;
-use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\Medium;
#[CoversClass(ReplicationGui::class)]
+#[Medium]
class ReplicationGuiTest extends AbstractTestCase
{
/**
@@ -52,7 +53,6 @@ protected function setUp(): void
$this->replicationGui = new ReplicationGui(new Replication(DatabaseInterface::getInstance()), new Template());
}
- #[Group('medium')]
public function testGetHtmlForPrimaryReplication(): void
{
$html = $this->replicationGui->getHtmlForPrimaryReplication(null, false, 'primary_add_user', null, null);
diff --git a/tests/unit/Server/PrivilegesTest.php b/tests/unit/Server/PrivilegesTest.php
index 3f6e4daf6e83..04664decbe6b 100644
--- a/tests/unit/Server/PrivilegesTest.php
+++ b/tests/unit/Server/PrivilegesTest.php
@@ -25,7 +25,7 @@
use PhpMyAdmin\Util;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\DataProvider;
-use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\Medium;
use ReflectionMethod;
use ReflectionProperty;
@@ -36,6 +36,7 @@
use function preg_quote;
#[CoversClass(Privileges::class)]
+#[Medium]
class PrivilegesTest extends AbstractTestCase
{
protected DatabaseInterface $dbi;
@@ -567,7 +568,6 @@ public function testUpdatePrivilegesAfterMySql8Dot11(): void
);
}
- #[Group('medium')]
public function testGetHtmlToDisplayPrivilegesTable(): void
{
$GLOBALS['hostname'] = 'hostname';
@@ -950,7 +950,6 @@ public function testGetWithClauseForAddUserAndUpdatePrivs(): void
self::assertStringContainsString($expect, $sqlQuery);
}
- #[Group('medium')]
public function testGetHtmlForAddUser(): void
{
$dbi = $this->createDatabaseInterface();
diff --git a/tests/unit/Setup/ConfigGeneratorTest.php b/tests/unit/Setup/ConfigGeneratorTest.php
index 92aada617d12..27d499f64d33 100644
--- a/tests/unit/Setup/ConfigGeneratorTest.php
+++ b/tests/unit/Setup/ConfigGeneratorTest.php
@@ -10,7 +10,7 @@
use PhpMyAdmin\Tests\AbstractTestCase;
use PhpMyAdmin\Version;
use PHPUnit\Framework\Attributes\CoversClass;
-use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\Medium;
use ReflectionClass;
use function explode;
@@ -21,12 +21,12 @@
use const SODIUM_CRYPTO_SECRETBOX_KEYBYTES;
#[CoversClass(ConfigGenerator::class)]
+#[Medium]
class ConfigGeneratorTest extends AbstractTestCase
{
/**
* Test for ConfigGenerator::getConfigFile
*/
- #[Group('medium')]
public function testGetConfigFile(): void
{
unset($_SESSION['eol']);
diff --git a/tests/unit/Theme/ThemeTest.php b/tests/unit/Theme/ThemeTest.php
index 99d686413e17..7415cff0b6fc 100644
--- a/tests/unit/Theme/ThemeTest.php
+++ b/tests/unit/Theme/ThemeTest.php
@@ -10,7 +10,7 @@
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\Attributes\Depends;
-use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\Medium;
use function filemtime;
@@ -18,6 +18,7 @@
use const ROOT_PATH;
#[CoversClass(Theme::class)]
+#[Medium]
class ThemeTest extends AbstractTestCase
{
protected Theme $object;
@@ -38,7 +39,6 @@ protected function setUp(): void
/**
* Test for Theme::loadInfo
*/
- #[Group('medium')]
public function testCheckImgPathNotExisted(): void
{
$this->object->setPath('path/to/nowhere');
diff --git a/tests/unit/VersionInformationTest.php b/tests/unit/VersionInformationTest.php
index d187073acebd..a78348c3cc0b 100644
--- a/tests/unit/VersionInformationTest.php
+++ b/tests/unit/VersionInformationTest.php
@@ -10,9 +10,11 @@
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\Large;
#[CoversClass(VersionInformation::class)]
#[CoversClass(Release::class)]
+#[Large]
class VersionInformationTest extends AbstractTestCase
{
/** @var Release[] */
@@ -43,7 +45,6 @@ protected function setUp(): void
/**
* Test version checking
*/
- #[Group('large')]
#[Group('network')]
public function testGetLatestVersion(): void
{
diff --git a/tests/unit/WebAuthn/CustomServerTest.php b/tests/unit/WebAuthn/CustomServerTest.php
index b2ed6d60f383..39aedc485144 100644
--- a/tests/unit/WebAuthn/CustomServerTest.php
+++ b/tests/unit/WebAuthn/CustomServerTest.php
@@ -5,18 +5,19 @@
namespace PhpMyAdmin\Tests\WebAuthn;
use PhpMyAdmin\Http\ServerRequest;
+use PhpMyAdmin\WebAuthn\CBORDecoder;
use PhpMyAdmin\WebAuthn\CustomServer;
+use PhpMyAdmin\WebAuthn\DataStream;
+use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\TestCase;
use Psr\Http\Message\UriInterface;
use Throwable;
use function hex2bin;
-/**
- * @covers \PhpMyAdmin\WebAuthn\CustomServer
- * @covers \PhpMyAdmin\WebAuthn\CBORDecoder
- * @covers \PhpMyAdmin\WebAuthn\DataStream
- */
+#[CoversClass(CustomServer::class)]
+#[CoversClass(CBORDecoder::class)]
+#[CoversClass(DataStream::class)]
final class CustomServerTest extends TestCase
{
public function testGetCredentialCreationOptions(): void
diff --git a/tests/unit/WebAuthn/WebauthnLibServerTest.php b/tests/unit/WebAuthn/WebauthnLibServerTest.php
index 51b80b4a88e0..e5447a42a5a0 100644
--- a/tests/unit/WebAuthn/WebauthnLibServerTest.php
+++ b/tests/unit/WebAuthn/WebauthnLibServerTest.php
@@ -8,6 +8,7 @@
use PhpMyAdmin\TwoFactor;
use PhpMyAdmin\WebAuthn\WebauthnLibServer;
use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\RequiresPhpExtension;
use PHPUnit\Framework\TestCase;
use Psr\Http\Message\UriInterface;
use Webauthn\Server as WebauthnServer;
@@ -89,11 +90,8 @@ public function testGetCredentialRequestOptions(): void
);
}
- /**
- * @see https://github.com/web-auth/webauthn-framework/blob/v3.3.12/tests/library/Functional/AssertionTest.php#L46
- *
- * @requires extension bcmath
- */
+ /** @see https://github.com/web-auth/webauthn-framework/blob/v3.3.12/tests/library/Functional/AssertionTest.php#L46 */
+ #[RequiresPhpExtension('bcmath')]
public function testParseAndValidateAssertionResponse(): void
{
$twoFactor = self::createStub(TwoFactor::class);