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 <tcit@tcit.fr>
pull/55571/head
Thomas Citharel 2025-09-27 14:29:18 +07:00 committed by backportbot[bot]
parent 274cef169d
commit 4759e46516
1 changed files with 13 additions and 1 deletions

@ -34,6 +34,7 @@ use OCP\Lock\ILockingProvider;
use OCP\Lock\LockedException;
use OCP\Security\ISecureRandom;
use OCP\Server;
use PHPUnit\Framework\Attributes\Group;
if (version_compare(\PHPUnit\Runner\Version::id(), 10, '>=')) {
trait OnNotSuccessfulTestTrait {
@ -545,11 +546,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)) {