Signed-off-by: skjnldsv <skjnldsv@protonmail.com>pull/49973/head
parent
e7f6e167e6
commit
669e6cadd6
@ -1,55 +0,0 @@ |
||||
<?php |
||||
|
||||
/** |
||||
* SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors |
||||
* SPDX-FileCopyrightText: 2016 ownCloud, Inc. |
||||
* SPDX-License-Identifier: AGPL-3.0-only |
||||
*/ |
||||
namespace OCA\Federation\Middleware; |
||||
|
||||
use OCA\Federation\Controller\SettingsController; |
||||
use OCP\AppFramework\Controller; |
||||
use OCP\AppFramework\Http; |
||||
use OCP\AppFramework\Http\JSONResponse; |
||||
use OCP\AppFramework\Middleware; |
||||
use OCP\HintException; |
||||
use OCP\IL10N; |
||||
use Psr\Log\LoggerInterface; |
||||
|
||||
class AddServerMiddleware extends Middleware { |
||||
public function __construct( |
||||
protected string $appName, |
||||
protected IL10N $l, |
||||
protected LoggerInterface $logger, |
||||
) { |
||||
} |
||||
|
||||
/** |
||||
* Log error message and return a response which can be displayed to the user |
||||
* |
||||
* @param Controller $controller |
||||
* @param string $methodName |
||||
* @param \Exception $exception |
||||
* @return JSONResponse |
||||
* @throws \Exception |
||||
*/ |
||||
public function afterException($controller, $methodName, \Exception $exception) { |
||||
if (($controller instanceof SettingsController) === false) { |
||||
throw $exception; |
||||
} |
||||
$this->logger->error($exception->getMessage(), [ |
||||
'app' => $this->appName, |
||||
'exception' => $exception, |
||||
]); |
||||
if ($exception instanceof HintException) { |
||||
$message = $exception->getHint(); |
||||
} else { |
||||
$message = $exception->getMessage(); |
||||
} |
||||
|
||||
return new JSONResponse( |
||||
['message' => $message], |
||||
Http::STATUS_BAD_REQUEST |
||||
); |
||||
} |
||||
} |
||||
@ -1,81 +0,0 @@ |
||||
<?php |
||||
|
||||
/** |
||||
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors |
||||
* SPDX-FileCopyrightText: 2016 ownCloud, Inc. |
||||
* SPDX-License-Identifier: AGPL-3.0-only |
||||
*/ |
||||
namespace OCA\Federation\Tests\Middleware; |
||||
|
||||
use OCA\Federation\Controller\SettingsController; |
||||
use OCA\Federation\Middleware\AddServerMiddleware; |
||||
use OCP\AppFramework\Http; |
||||
use OCP\HintException; |
||||
use OCP\IL10N; |
||||
use Psr\Log\LoggerInterface; |
||||
use Test\TestCase; |
||||
|
||||
class AddServerMiddlewareTest extends TestCase { |
||||
|
||||
/** @var \PHPUnit\Framework\MockObject\MockObject | LoggerInterface */ |
||||
private $logger; |
||||
|
||||
/** @var \PHPUnit\Framework\MockObject\MockObject|IL10N */ |
||||
private $l10n; |
||||
|
||||
private AddServerMiddleware $middleware; |
||||
|
||||
/** @var \PHPUnit\Framework\MockObject\MockObject | SettingsController */ |
||||
private $controller; |
||||
|
||||
protected function setUp(): void { |
||||
parent::setUp(); |
||||
|
||||
$this->logger = $this->getMockBuilder(LoggerInterface::class)->getMock(); |
||||
$this->l10n = $this->getMockBuilder(IL10N::class)->getMock(); |
||||
$this->controller = $this->getMockBuilder(SettingsController::class) |
||||
->disableOriginalConstructor()->getMock(); |
||||
|
||||
$this->middleware = new AddServerMiddleware( |
||||
'AddServerMiddlewareTest', |
||||
$this->l10n, |
||||
$this->logger |
||||
); |
||||
} |
||||
|
||||
/** |
||||
* @dataProvider dataTestAfterException |
||||
* |
||||
* @param \Exception $exception |
||||
* @param string $hint |
||||
*/ |
||||
public function testAfterException($exception, $hint): void { |
||||
$this->logger->expects($this->once())->method('error'); |
||||
|
||||
$this->l10n->expects($this->any())->method('t') |
||||
->willReturnCallback( |
||||
function (string $message): string { |
||||
return $message; |
||||
} |
||||
); |
||||
|
||||
$result = $this->middleware->afterException($this->controller, 'method', $exception); |
||||
|
||||
$this->assertSame(Http::STATUS_BAD_REQUEST, |
||||
$result->getStatus() |
||||
); |
||||
|
||||
$data = $result->getData(); |
||||
|
||||
$this->assertSame($hint, |
||||
$data['message'] |
||||
); |
||||
} |
||||
|
||||
public function dataTestAfterException() { |
||||
return [ |
||||
[new HintException('message', 'hint'), 'hint'], |
||||
[new \Exception('message'), 'message'], |
||||
]; |
||||
} |
||||
} |
||||
Loading…
Reference in new issue