aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLukas Reschke <lukas@statuscode.ch>2016-07-22 15:15:20 +0200
committerGitHub <noreply@github.com>2016-07-22 15:15:20 +0200
commit9dafc516a7b18345d869e7b08eae88ae0510fb39 (patch)
tree3f9c5669113f81cd2a8a04438df8242f01759443
parentaf3950146504fe0a14ef38c24c549ffeda74acf6 (diff)
parent72b06d250de023d9b0f9bcb9ec93896e3b4c55d9 (diff)
downloadnextcloud-server-9dafc516a7b18345d869e7b08eae88ae0510fb39.tar.gz
nextcloud-server-9dafc516a7b18345d869e7b08eae88ae0510fb39.zip
Merge pull request #524 from nextcloud/ocs_appframework_status_code
Set proper status code in OCS AppFramework Middleware
-rw-r--r--lib/private/AppFramework/Middleware/OCSMiddleware.php7
-rw-r--r--tests/lib/AppFramework/Middleware/OCSMiddlewareTest.php36
2 files changed, 41 insertions, 2 deletions
diff --git a/lib/private/AppFramework/Middleware/OCSMiddleware.php b/lib/private/AppFramework/Middleware/OCSMiddleware.php
index 90355a39ef0..0d97aa6ed94 100644
--- a/lib/private/AppFramework/Middleware/OCSMiddleware.php
+++ b/lib/private/AppFramework/Middleware/OCSMiddleware.php
@@ -56,7 +56,12 @@ class OCSMiddleware extends Middleware {
if ($code === 0) {
$code = Http::STATUS_INTERNAL_SERVER_ERROR;
}
- return new OCSResponse($format, $code, $exception->getMessage());
+ $response = new OCSResponse($format, $code, $exception->getMessage());
+
+ if ($this->request->getScriptName() === '/ocs/v2.php') {
+ $response->setStatus($code);
+ }
+ return $response;
}
throw $exception;
diff --git a/tests/lib/AppFramework/Middleware/OCSMiddlewareTest.php b/tests/lib/AppFramework/Middleware/OCSMiddlewareTest.php
index 66131aa4b25..5eff056eebc 100644
--- a/tests/lib/AppFramework/Middleware/OCSMiddlewareTest.php
+++ b/tests/lib/AppFramework/Middleware/OCSMiddlewareTest.php
@@ -88,7 +88,10 @@ class OCSMiddlewareTest extends \Test\TestCase {
* @param string $message
* @param int $code
*/
- public function testAfterException($controller, $exception, $forward, $message = '', $code = 0) {
+ public function testAfterExceptionOCSv1($controller, $exception, $forward, $message = '', $code = 0) {
+ $this->request
+ ->method('getScriptName')
+ ->willReturn('/ocs/v1.php');
$OCSMiddleware = new OCSMiddleware($this->request);
try {
@@ -99,6 +102,37 @@ class OCSMiddlewareTest extends \Test\TestCase {
$this->assertSame($message, $this->invokePrivate($result, 'message'));
$this->assertSame($code, $this->invokePrivate($result, 'statuscode'));
+ $this->assertSame(200, $result->getStatus());
+ } catch (\Exception $e) {
+ $this->assertTrue($forward);
+ $this->assertEquals($exception, $e);
+ }
+ }
+
+ /**
+ * @dataProvider dataAfterException
+ *
+ * @param Controller $controller
+ * @param \Exception $exception
+ * @param bool $forward
+ * @param string $message
+ * @param int $code
+ */
+ public function testAfterExceptionOCSv2($controller, $exception, $forward, $message = '', $code = 0) {
+ $this->request
+ ->method('getScriptName')
+ ->willReturn('/ocs/v2.php');
+ $OCSMiddleware = new OCSMiddleware($this->request);
+
+ try {
+ $result = $OCSMiddleware->afterException($controller, 'method', $exception);
+ $this->assertFalse($forward);
+
+ $this->assertInstanceOf('OCP\AppFramework\Http\OCSResponse', $result);
+
+ $this->assertSame($message, $this->invokePrivate($result, 'message'));
+ $this->assertSame($code, $this->invokePrivate($result, 'statuscode'));
+ $this->assertSame($code, $result->getStatus());
} catch (\Exception $e) {
$this->assertTrue($forward);
$this->assertEquals($exception, $e);