From cad9728db74fbf6fc576ef30fcb4ae9867a339c2 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Sat, 27 Sep 2025 14:29:18 +0200 Subject: [PATCH] feat(test-case): allow to use PHPUnit Group attributes to mark tests requiring database Before that, only the annotation @group('DB') is possible to mark test classes as requiring the database. Now the \PHPUnit\Framework\Attributes\Group attribute can be used as long as PHPUnit 10+ is used. Signed-off-by: Thomas Citharel --- tests/lib/TestCase.php | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/tests/lib/TestCase.php b/tests/lib/TestCase.php index cab959154a5..5f69b666648 100644 --- a/tests/lib/TestCase.php +++ b/tests/lib/TestCase.php @@ -26,6 +26,7 @@ use OCP\IDBConnection; use OCP\IL10N; use OCP\Lock\ILockingProvider; use OCP\Security\ISecureRandom; +use PHPUnit\Framework\Attributes\Group; if (version_compare(\PHPUnit\Runner\Version::id(), 10, '>=')) { trait OnNotSuccessfulTestTrait { @@ -529,11 +530,22 @@ abstract class TestCase extends \PHPUnit\Framework\TestCase { $r = new \ReflectionClass($this); $doc = $r->getDocComment(); + + if (class_exists(Group::class)) { + $attributes = array_map(function (\ReflectionAttribute $attribute) { + /** @var Group $group */ + $group = $attribute->newInstance(); + return $group->name(); + }, $r->getAttributes(Group::class)); + if (count($attributes) > 0) { + return $attributes; + } + } preg_match_all('#@group\s+(.*?)\n#s', $doc, $annotations); return $annotations[1] ?? []; } - protected function IsDatabaseAccessAllowed() { + protected function IsDatabaseAccessAllowed(): bool { $annotations = $this->getGroupAnnotations(); if (isset($annotations)) { if (in_array('DB', $annotations) || in_array('SLOWDB', $annotations)) {