Merge pull request #6744 from owncloud/fix_ocs_response_messages

keep response message
This commit is contained in:
Thomas Müller 2014-01-15 03:17:24 -08:00
commit d4519125db
2 changed files with 46 additions and 31 deletions

View File

@ -33,7 +33,7 @@ class OC_API {
const USER_AUTH = 1; const USER_AUTH = 1;
const SUBADMIN_AUTH = 2; const SUBADMIN_AUTH = 2;
const ADMIN_AUTH = 3; const ADMIN_AUTH = 3;
/** /**
* API Response Codes * API Response Codes
*/ */
@ -41,13 +41,13 @@ class OC_API {
const RESPOND_SERVER_ERROR = 996; const RESPOND_SERVER_ERROR = 996;
const RESPOND_NOT_FOUND = 998; const RESPOND_NOT_FOUND = 998;
const RESPOND_UNKNOWN_ERROR = 999; const RESPOND_UNKNOWN_ERROR = 999;
/** /**
* api actions * api actions
*/ */
protected static $actions = array(); protected static $actions = array();
private static $logoutRequired = false; private static $logoutRequired = false;
/** /**
* registers an api call * registers an api call
* @param string $method the http method * @param string $method the http method
@ -58,7 +58,7 @@ class OC_API {
* @param array $defaults * @param array $defaults
* @param array $requirements * @param array $requirements
*/ */
public static function register($method, $url, $action, $app, public static function register($method, $url, $action, $app,
$authLevel = OC_API::USER_AUTH, $authLevel = OC_API::USER_AUTH,
$defaults = array(), $defaults = array(),
$requirements = array()) { $requirements = array()) {
@ -75,7 +75,7 @@ class OC_API {
} }
self::$actions[$name][] = array('app' => $app, 'action' => $action, 'authlevel' => $authLevel); self::$actions[$name][] = array('app' => $app, 'action' => $action, 'authlevel' => $authLevel);
} }
/** /**
* handles an api call * handles an api call
* @param array $parameters * @param array $parameters
@ -125,7 +125,7 @@ class OC_API {
self::respond($response, $format); self::respond($response, $format);
} }
/** /**
* merge the returned result objects into one response * merge the returned result objects into one response
* @param array $responses * @param array $responses
@ -166,32 +166,31 @@ class OC_API {
// Maybe any that are not OC_API::RESPOND_SERVER_ERROR // Maybe any that are not OC_API::RESPOND_SERVER_ERROR
// Merge failed responses if more than one // Merge failed responses if more than one
$data = array(); $data = array();
$meta = array();
foreach($shipped['failed'] as $failure) { foreach($shipped['failed'] as $failure) {
$data = array_merge_recursive($data, $failure['response']->getData()); $data = array_merge_recursive($data, $failure['response']->getData());
} }
$picked = reset($shipped['failed']); $picked = reset($shipped['failed']);
$code = $picked['response']->getStatusCode(); $code = $picked['response']->getStatusCode();
$response = new OC_OCS_Result($data, $code); $meta = $picked['response']->getMeta();
$response = new OC_OCS_Result($data, $code, $meta['message']);
return $response; return $response;
} elseif(!empty($shipped['succeeded'])) { } elseif(!empty($shipped['succeeded'])) {
$responses = array_merge($shipped['succeeded'], $thirdparty['succeeded']); $responses = array_merge($shipped['succeeded'], $thirdparty['succeeded']);
} elseif(!empty($thirdparty['failed'])) { } elseif(!empty($thirdparty['failed'])) {
// Merge failed responses if more than one // Merge failed responses if more than one
$data = array(); $data = array();
$meta = array();
foreach($thirdparty['failed'] as $failure) { foreach($thirdparty['failed'] as $failure) {
$data = array_merge_recursive($data, $failure['response']->getData()); $data = array_merge_recursive($data, $failure['response']->getData());
} }
$picked = reset($thirdparty['failed']); $picked = reset($thirdparty['failed']);
$code = $picked['response']->getStatusCode(); $code = $picked['response']->getStatusCode();
$response = new OC_OCS_Result($data, $code); $meta = $picked['response']->getMeta();
$response = new OC_OCS_Result($data, $code, $meta['message']);
return $response; return $response;
} else { } else {
$responses = $thirdparty['succeeded']; $responses = $thirdparty['succeeded'];
} }
// Merge the successful responses // Merge the successful responses
$meta = array();
$data = array(); $data = array();
foreach($responses as $app => $response) { foreach($responses as $app => $response) {
@ -200,22 +199,25 @@ class OC_API {
} else { } else {
$data = array_merge_recursive($data, $response['response']->getData()); $data = array_merge_recursive($data, $response['response']->getData());
} }
$codes[] = $response['response']->getStatusCode(); $codes[] = array('code' => $response['response']->getStatusCode(),
'meta' => $response['response']->getMeta());
} }
// Use any non 100 status codes // Use any non 100 status codes
$statusCode = 100; $statusCode = 100;
$statusMessage = null;
foreach($codes as $code) { foreach($codes as $code) {
if($code != 100) { if($code['code'] != 100) {
$statusCode = $code; $statusCode = $code['code'];
$statusMessage = $code['meta']['message'];
break; break;
} }
} }
$result = new OC_OCS_Result($data, $statusCode); $result = new OC_OCS_Result($data, $statusCode, $statusMessage);
return $result; return $result;
} }
/** /**
* authenticate the api call * authenticate the api call
* @param array $action the action details as supplied to OC_API::register() * @param array $action the action details as supplied to OC_API::register()
@ -261,8 +263,8 @@ class OC_API {
return false; return false;
break; break;
} }
} }
/** /**
* http basic auth * http basic auth
* @return string|false (username, or false on failure) * @return string|false (username, or false on failure)
@ -294,7 +296,7 @@ class OC_API {
return false; return false;
} }
/** /**
* respond to a call * respond to a call
* @param OC_OCS_Result $result * @param OC_OCS_Result $result
@ -343,5 +345,5 @@ class OC_API {
} }
} }
} }
} }

View File

@ -7,12 +7,12 @@
*/ */
class Test_API extends PHPUnit_Framework_TestCase { class Test_API extends PHPUnit_Framework_TestCase {
// Helps build a response variable // Helps build a response variable
function buildResponse($shipped, $data, $code) { function buildResponse($shipped, $data, $code, $message=null) {
return array( return array(
'shipped' => $shipped, 'shipped' => $shipped,
'response' => new OC_OCS_Result($data, $code), 'response' => new OC_OCS_Result($data, $code, $message),
'app' => uniqid('testapp_', true), 'app' => uniqid('testapp_', true),
); );
} }
@ -64,24 +64,24 @@ class Test_API extends PHPUnit_Framework_TestCase {
// Two shipped success results // Two shipped success results
array(true, 100, true, 100, true), array(true, 100, true, 100, true),
// Two shipped results, one success and one failure // Two shipped results, one success and one failure
array(true, 100, true, 997, false), array(true, 100, true, 998, false),
// Two shipped results, both failure // Two shipped results, both failure
array(true, 997, true, 997, false), array(true, 997, true, 998, false),
// Two third party success results // Two third party success results
array(false, 100, false, 100, true), array(false, 100, false, 100, true),
// Two third party results, one success and one failure // Two third party results, one success and one failure
array(false, 100, false, 997, false), array(false, 100, false, 998, false),
// Two third party results, both failure // Two third party results, both failure
array(false, 997, false, 997, false), array(false, 997, false, 998, false),
// One of each, both success // One of each, both success
array(false, 100, true, 100, true), array(false, 100, true, 100, true),
array(true, 100, false, 100, true), array(true, 100, false, 100, true),
// One of each, both failure // One of each, both failure
array(false, 997, true, 997, false), array(false, 997, true, 998, false),
// One of each, shipped success // One of each, shipped success
array(false, 997, true, 100, true), array(false, 997, true, 100, true),
// One of each, third party success // One of each, third party success
array(false, 100, true, 997, false), array(false, 100, true, 998, false),
); );
} }
/** /**
@ -117,12 +117,25 @@ class Test_API extends PHPUnit_Framework_TestCase {
// Two shipped success results // Two shipped success results
$result = OC_API::mergeResponses(array( $result = OC_API::mergeResponses(array(
$this->buildResponse($shipped1, $data1, $statusCode1), $this->buildResponse($shipped1, $data1, $statusCode1, "message1"),
$this->buildResponse($shipped2, $data2, $statusCode2), $this->buildResponse($shipped2, $data2, $statusCode2, "message2"),
)); ));
$this->checkResult($result, $succeeded); $this->checkResult($result, $succeeded);
$resultData = $result->getData(); $resultData = $result->getData();
$resultMeta = $result->getMeta();
$resultStatusCode = $result->getStatusCode();
$this->assertArrayHasKey('jan', $resultData['users']); $this->assertArrayHasKey('jan', $resultData['users']);
// check if the returned status message matches the selected status code
if ($resultStatusCode === 997) {
$this->assertEquals('message1', $resultMeta['message']);
} elseif ($resultStatusCode === 998) {
$this->assertEquals('message2', $resultMeta['message']);
} elseif ($resultStatusCode === 100) {
$this->assertEquals(null, $resultMeta['message']);
}
} }
} }