fix(tests): Adapt Middleware tests to API change

Removed a few tests rendered obsolete by the refactoring.

Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
This commit is contained in:
Côme Chilliet 2026-03-11 12:15:53 +01:00 committed by Louis Chmn
parent 36a6227a5f
commit a5e79add44
12 changed files with 69 additions and 72 deletions

View file

@ -53,10 +53,14 @@ class ProvisioningApiMiddlewareTest extends TestCase {
);
$this->reflector->method('hasAnnotation')
->willReturnCallback(function ($annotation) use ($subadminRequired, $hasSettingAuthorizationAnnotation) {
->willReturnCallback(function ($annotation) use ($subadminRequired) {
if ($annotation === 'NoSubAdminRequired') {
return !$subadminRequired;
}
return false;
});
$this->reflector->method('hasAnnotationOrAttribute')
->willReturnCallback(function ($annotation, $attribute) use ($hasSettingAuthorizationAnnotation) {
if ($annotation === 'AuthorizedAdminSetting') {
return $hasSettingAuthorizationAnnotation;
}

View file

@ -14,6 +14,7 @@ use OC\AppFramework\Middleware\Security\Exceptions\NotAdminException;
use OC\AppFramework\Utility\ControllerMethodReflector;
use OCA\Settings\Middleware\SubadminMiddleware;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http\Attribute\AuthorizedAdminSetting;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\Group\ISubAdmin;
use OCP\IL10N;
@ -62,11 +63,16 @@ class SubadminMiddlewareTest extends \Test\TestCase {
$this->expectException(NotAdminException::class);
$this->reflector
->expects($this->exactly(2))
->expects($this->exactly(1))
->method('hasAnnotation')
->willReturnMap([
['NoSubAdminRequired', false],
['AuthorizedAdminSetting', false],
]);
$this->reflector
->expects($this->exactly(1))
->method('hasAnnotationOrAttribute')
->willReturnMap([
['AuthorizedAdminSetting', AuthorizedAdminSetting::class, false],
]);
$this->subAdminManager
@ -94,11 +100,16 @@ class SubadminMiddlewareTest extends \Test\TestCase {
public function testBeforeControllerAsSubAdminWithoutAnnotation(): void {
$this->reflector
->expects($this->exactly(2))
->expects($this->exactly(1))
->method('hasAnnotation')
->willReturnMap([
['NoSubAdminRequired', false],
['AuthorizedAdminSetting', false],
]);
$this->reflector
->expects($this->exactly(1))
->method('hasAnnotationOrAttribute')
->willReturnMap([
['AuthorizedAdminSetting', AuthorizedAdminSetting::class, false],
]);
$this->subAdminManager

View file

@ -31,6 +31,10 @@ class ControllerMethodReflector implements IControllerMethodReflector {
* @param string $method the method which we want to inspect
*/
public function reflect($object, string $method) {
$this->annotations = [];
$this->types = [];
$this->parameters = [];
$this->ranges = [];
$this->reflectionMethod = new \ReflectionMethod($object, $method);
$docs = $this->reflectionMethod->getDocComment();

View file

@ -123,7 +123,7 @@ class DispatcherTest extends \Test\TestCase {
$this->request = $this->createMock(Request::class);
$this->reflector = new ControllerMethodReflector();
$this->reflector = new ControllerMethodReflector(\OCP\Server::get(LoggerInterface::class));
$this->dispatcher = new Dispatcher(
$this->http,

View file

@ -51,7 +51,7 @@ class BruteForceMiddlewareTest extends TestCase {
protected function setUp(): void {
parent::setUp();
$this->reflector = new ControllerMethodReflector();
$this->reflector = new ControllerMethodReflector(\OCP\Server::get(LoggerInterface::class));
$this->throttler = $this->createMock(IThrottler::class);
$this->request = $this->createMock(IRequest::class);
$this->logger = $this->createMock(LoggerInterface::class);

View file

@ -36,7 +36,7 @@ class CORSMiddlewareTest extends \Test\TestCase {
protected function setUp(): void {
parent::setUp();
$this->reflector = new ControllerMethodReflector();
$this->reflector = new ControllerMethodReflector(\OCP\Server::get(LoggerInterface::class));
$this->session = $this->createMock(Session::class);
$this->throttler = $this->createMock(IThrottler::class);
$this->logger = $this->createMock(LoggerInterface::class);
@ -82,6 +82,7 @@ class CORSMiddlewareTest extends \Test\TestCase {
$this->createMock(IRequestId::class),
$this->createMock(IConfig::class)
);
$this->reflector->reflect($this->controller, __FUNCTION__);
$middleware = new CORSMiddleware($request, $this->reflector, $this->session, $this->throttler, $this->logger);
$response = $middleware->afterController($this->controller, __FUNCTION__, new Response());
@ -303,6 +304,7 @@ class CORSMiddlewareTest extends \Test\TestCase {
$this->createMock(IRequestId::class),
$this->createMock(IConfig::class)
);
$this->reflector->reflect($this->controller, __FUNCTION__);
$middleware = new CORSMiddleware($request, $this->reflector, $this->session, $this->throttler, $this->logger);
$response = $middleware->afterException($this->controller, __FUNCTION__, new SecurityException('A security exception'));
@ -319,6 +321,7 @@ class CORSMiddlewareTest extends \Test\TestCase {
$this->createMock(IRequestId::class),
$this->createMock(IConfig::class)
);
$this->reflector->reflect($this->controller, __FUNCTION__);
$middleware = new CORSMiddleware($request, $this->reflector, $this->session, $this->throttler, $this->logger);
$response = $middleware->afterException($this->controller, __FUNCTION__, new SecurityException('A security exception', 501));
@ -338,6 +341,7 @@ class CORSMiddlewareTest extends \Test\TestCase {
$this->createMock(IRequestId::class),
$this->createMock(IConfig::class)
);
$this->reflector->reflect($this->controller, __FUNCTION__);
$middleware = new CORSMiddleware($request, $this->reflector, $this->session, $this->throttler, $this->logger);
$middleware->afterException($this->controller, __FUNCTION__, new \Exception('A regular exception'));
}

View file

@ -45,7 +45,7 @@ class PasswordConfirmationMiddlewareTest extends TestCase {
private Manager $userManager;
protected function setUp(): void {
$this->reflector = new ControllerMethodReflector();
$this->reflector = new ControllerMethodReflector(\OCP\Server::get(LoggerInterface::class));
$this->session = $this->createMock(ISession::class);
$this->userSession = $this->createMock(IUserSession::class);
$this->user = $this->createMock(IUser::class);

View file

@ -76,7 +76,7 @@ class RateLimitingMiddlewareTest extends TestCase {
$this->request = $this->createMock(IRequest::class);
$this->userSession = $this->createMock(IUserSession::class);
$this->reflector = new ControllerMethodReflector();
$this->reflector = new ControllerMethodReflector(\OCP\Server::get(LoggerInterface::class));
$this->limiter = $this->createMock(Limiter::class);
$this->session = $this->createMock(ISession::class);
$this->appConfig = $this->createMock(IAppConfig::class);

View file

@ -46,7 +46,8 @@ class SameSiteCookieMiddlewareTest extends TestCase {
$this->request->method('getScriptName')
->willReturn('/index.php');
$this->reflector->method('hasAnnotation')
$this->reflector->expects(self::once())
->method('hasAnnotation')
->with('NoSameSiteCookieRequired')
->willReturn(true);
@ -58,7 +59,8 @@ class SameSiteCookieMiddlewareTest extends TestCase {
$this->request->method('getScriptName')
->willReturn('/index.php');
$this->reflector->method('hasAnnotation')
$this->reflector->expects(self::once())
->method('hasAnnotation')
->with('NoSameSiteCookieRequired')
->willReturn(false);
@ -75,7 +77,8 @@ class SameSiteCookieMiddlewareTest extends TestCase {
$this->request->method('getScriptName')
->willReturn('/index.php');
$this->reflector->method('hasAnnotation')
$this->reflector->expects(self::once())
->method('hasAnnotation')
->with('NoSameSiteCookieRequired')
->willReturn(false);

View file

@ -83,7 +83,7 @@ class SecurityMiddlewareTest extends \Test\TestCase {
'test',
$this->request
);
$this->reader = new ControllerMethodReflector();
$this->reader = new ControllerMethodReflector(\OCP\Server::get(LoggerInterface::class));
$this->logger = $this->createMock(LoggerInterface::class);
$this->navigationManager = $this->createMock(INavigationManager::class);
$this->urlGenerator = $this->createMock(IURLGenerator::class);
@ -444,6 +444,7 @@ class SecurityMiddlewareTest extends \Test\TestCase {
->willReturn(true);
$controller = new $controllerClass('test', $this->request);
$this->reader->reflect($controller, 'foo');
try {
$this->middleware->beforeController($controller, 'foo');

View file

@ -19,8 +19,8 @@ use PHPUnit\Framework\MockObject\MockObject;
use Test\TestCase;
class SessionMiddlewareTest extends TestCase {
private ControllerMethodReflector|MockObject $reflector;
private ISession|MockObject $session;
private ControllerMethodReflector&MockObject $reflector;
private ISession&MockObject $session;
private Controller $controller;
private SessionMiddleware $middleware;
@ -50,70 +50,39 @@ class SessionMiddlewareTest extends TestCase {
public function testSessionNotClosedOnBeforeController(): void {
$this->configureSessionMock(0, 1);
$this->reflector->expects(self::once())
->method('hasAnnotation')
->with('UseSession')
->method('hasAnnotationOrAttribute')
->with('UseSession', UseSession::class)
->willReturn(true);
$this->middleware->beforeController($this->controller, 'withAnnotation');
}
public function testSessionNotClosedOnBeforeControllerWithAttribute(): void {
$this->configureSessionMock(0, 1);
$this->reflector->expects(self::once())
->method('hasAnnotation')
->with('UseSession')
->willReturn(false);
$this->middleware->beforeController($this->controller, 'withAttribute');
}
public function testSessionClosedOnAfterController(): void {
$this->configureSessionMock(1);
$this->reflector->expects(self::once())
->method('hasAnnotation')
->with('UseSession')
->method('hasAnnotationOrAttribute')
->with('UseSession', UseSession::class)
->willReturn(true);
$this->middleware->afterController($this->controller, 'withAnnotation', new Response());
}
public function testSessionClosedOnAfterControllerWithAttribute(): void {
$this->configureSessionMock(1);
$this->reflector->expects(self::once())
->method('hasAnnotation')
->with('UseSession')
->willReturn(true);
$this->middleware->afterController($this->controller, 'withAttribute', new Response());
}
public function testSessionReopenedAndClosedOnBeforeController(): void {
$this->configureSessionMock(1, 1);
$this->reflector->expects(self::exactly(2))
->method('hasAnnotation')
->with('UseSession')
->method('hasAnnotationOrAttribute')
->with('UseSession', UseSession::class)
->willReturn(true);
$this->middleware->beforeController($this->controller, 'withAnnotation');
$this->middleware->afterController($this->controller, 'withAnnotation', new Response());
}
public function testSessionReopenedAndClosedOnBeforeControllerWithAttribute(): void {
$this->configureSessionMock(1, 1);
$this->reflector->expects(self::exactly(2))
->method('hasAnnotation')
->with('UseSession')
->willReturn(false);
$this->middleware->beforeController($this->controller, 'withAttribute');
$this->middleware->afterController($this->controller, 'withAttribute', new Response());
}
public function testSessionClosedOnBeforeController(): void {
$this->configureSessionMock(0);
$this->reflector->expects(self::once())
->method('hasAnnotation')
->with('UseSession')
->method('hasAnnotationOrAttribute')
->with('UseSession', UseSession::class)
->willReturn(false);
$this->middleware->beforeController($this->controller, 'without');
@ -122,8 +91,8 @@ class SessionMiddlewareTest extends TestCase {
public function testSessionNotClosedOnAfterController(): void {
$this->configureSessionMock(0);
$this->reflector->expects(self::once())
->method('hasAnnotation')
->with('UseSession')
->method('hasAnnotationOrAttribute')
->with('UseSession', UseSession::class)
->willReturn(false);
$this->middleware->afterController($this->controller, 'without', new Response());

View file

@ -9,6 +9,7 @@
namespace Test\AppFramework\Utility;
use OC\AppFramework\Utility\ControllerMethodReflector;
use Psr\Log\LoggerInterface;
class BaseController {
/**
@ -69,7 +70,7 @@ class ControllerMethodReflectorTest extends \Test\TestCase {
* @Annotation
*/
public function testReadAnnotation(): void {
$reader = new ControllerMethodReflector();
$reader = new ControllerMethodReflector(\OCP\Server::get(LoggerInterface::class));
$reader->reflect(
'\Test\AppFramework\Utility\ControllerMethodReflectorTest',
'testReadAnnotation'
@ -82,7 +83,7 @@ class ControllerMethodReflectorTest extends \Test\TestCase {
* @Annotation(parameter=value)
*/
public function testGetAnnotationParameterSingle(): void {
$reader = new ControllerMethodReflector();
$reader = new ControllerMethodReflector(\OCP\Server::get(LoggerInterface::class));
$reader->reflect(
self::class,
__FUNCTION__
@ -95,7 +96,7 @@ class ControllerMethodReflectorTest extends \Test\TestCase {
* @Annotation(parameter1=value1, parameter2=value2,parameter3=value3)
*/
public function testGetAnnotationParameterMultiple(): void {
$reader = new ControllerMethodReflector();
$reader = new ControllerMethodReflector(\OCP\Server::get(LoggerInterface::class));
$reader->reflect(
self::class,
__FUNCTION__
@ -111,7 +112,7 @@ class ControllerMethodReflectorTest extends \Test\TestCase {
* @param test
*/
public function testReadAnnotationNoLowercase(): void {
$reader = new ControllerMethodReflector();
$reader = new ControllerMethodReflector(\OCP\Server::get(LoggerInterface::class));
$reader->reflect(
'\Test\AppFramework\Utility\ControllerMethodReflectorTest',
'testReadAnnotationNoLowercase'
@ -127,7 +128,7 @@ class ControllerMethodReflectorTest extends \Test\TestCase {
* @param int $test
*/
public function testReadTypeIntAnnotations(): void {
$reader = new ControllerMethodReflector();
$reader = new ControllerMethodReflector(\OCP\Server::get(LoggerInterface::class));
$reader->reflect(
'\Test\AppFramework\Utility\ControllerMethodReflectorTest',
'testReadTypeIntAnnotations'
@ -148,7 +149,7 @@ class ControllerMethodReflectorTest extends \Test\TestCase {
* @requires PHP 7
*/
public function testReadTypeIntAnnotationsScalarTypes(): void {
$reader = new ControllerMethodReflector();
$reader = new ControllerMethodReflector(\OCP\Server::get(LoggerInterface::class));
$reader->reflect(
'\Test\AppFramework\Utility\ControllerMethodReflectorTest',
'arguments3'
@ -166,7 +167,7 @@ class ControllerMethodReflectorTest extends \Test\TestCase {
* @param double $test something special
*/
public function testReadTypeDoubleAnnotations(): void {
$reader = new ControllerMethodReflector();
$reader = new ControllerMethodReflector(\OCP\Server::get(LoggerInterface::class));
$reader->reflect(
'\Test\AppFramework\Utility\ControllerMethodReflectorTest',
'testReadTypeDoubleAnnotations'
@ -180,7 +181,7 @@ class ControllerMethodReflectorTest extends \Test\TestCase {
* @param string $foo
*/
public function testReadTypeWhitespaceAnnotations(): void {
$reader = new ControllerMethodReflector();
$reader = new ControllerMethodReflector(\OCP\Server::get(LoggerInterface::class));
$reader->reflect(
'\Test\AppFramework\Utility\ControllerMethodReflectorTest',
'testReadTypeWhitespaceAnnotations'
@ -193,7 +194,7 @@ class ControllerMethodReflectorTest extends \Test\TestCase {
public function arguments($arg, $arg2 = 'hi') {
}
public function testReflectParameters(): void {
$reader = new ControllerMethodReflector();
$reader = new ControllerMethodReflector(\OCP\Server::get(LoggerInterface::class));
$reader->reflect(
'\Test\AppFramework\Utility\ControllerMethodReflectorTest',
'arguments'
@ -206,7 +207,7 @@ class ControllerMethodReflectorTest extends \Test\TestCase {
public function arguments2($arg) {
}
public function testReflectParameters2(): void {
$reader = new ControllerMethodReflector();
$reader = new ControllerMethodReflector(\OCP\Server::get(LoggerInterface::class));
$reader->reflect(
'\Test\AppFramework\Utility\ControllerMethodReflectorTest',
'arguments2'
@ -217,7 +218,7 @@ class ControllerMethodReflectorTest extends \Test\TestCase {
public function testInheritance(): void {
$reader = new ControllerMethodReflector();
$reader = new ControllerMethodReflector(\OCP\Server::get(LoggerInterface::class));
$reader->reflect('Test\AppFramework\Utility\EndController', 'test');
$this->assertTrue($reader->hasAnnotation('Annotation'));
@ -225,7 +226,7 @@ class ControllerMethodReflectorTest extends \Test\TestCase {
public function testInheritanceOverride(): void {
$reader = new ControllerMethodReflector();
$reader = new ControllerMethodReflector(\OCP\Server::get(LoggerInterface::class));
$reader->reflect('Test\AppFramework\Utility\EndController', 'test2');
$this->assertTrue($reader->hasAnnotation('NoAnnotation'));
@ -234,14 +235,14 @@ class ControllerMethodReflectorTest extends \Test\TestCase {
public function testInheritanceOverrideNoDocblock(): void {
$reader = new ControllerMethodReflector();
$reader = new ControllerMethodReflector(\OCP\Server::get(LoggerInterface::class));
$reader->reflect('Test\AppFramework\Utility\EndController', 'test3');
$this->assertFalse($reader->hasAnnotation('Annotation'));
}
public function testRangeDetectionPsalm(): void {
$reader = new ControllerMethodReflector();
$reader = new ControllerMethodReflector(\OCP\Server::get(LoggerInterface::class));
$reader->reflect('Test\AppFramework\Utility\EndController', 'test4');
$rangeInfo1 = $reader->getRange('rangedOne');
@ -262,7 +263,7 @@ class ControllerMethodReflectorTest extends \Test\TestCase {
}
public function testRangeDetectionNative(): void {
$reader = new ControllerMethodReflector();
$reader = new ControllerMethodReflector(\OCP\Server::get(LoggerInterface::class));
$reader->reflect('Test\AppFramework\Utility\EndController', 'test5');
$rangeInfo1 = $reader->getRange('rangedOne');