createMock(LoggerInterface::class); $logger->method('info') ->willReturnCallback( function (string $message, array $data) { $this->fail('Unexpected info log: ' . (string)($data['exception'] ?? $message)); } ); $this->appManager = $this->createMock(IAppManager::class); $this->router = new Router( $logger, $this->createMock(IRequest::class), $this->createMock(IConfig::class), $this->createMock(IEventLogger::class), $this->createMock(ContainerInterface::class), $this->appManager, ); } public function testHeartbeat(): void { $this->assertEquals('/index.php/heartbeat', $this->router->generate('heartbeat')); } public function testGenerateConsecutively(): void { $this->appManager->expects(self::atLeastOnce()) ->method('cleanAppId') ->willReturnArgument(0); $this->appManager->expects(self::atLeastOnce()) ->method('getAppPath') ->willReturnCallback(fn (string $appid): string => \OC::$SERVERROOT . '/apps/' . $appid); $this->assertEquals('/index.php/apps/files/', $this->router->generate('files.view.index')); // the OCS route is the prefixed one for the AppFramework - see /ocs/v1.php for routing details $this->assertEquals('/index.php/ocsapp/apps/dav/api/v1/direct', $this->router->generate('ocs.dav.direct.getUrl')); // test caching $this->assertEquals('/index.php/apps/files/', $this->router->generate('files.view.index')); } }