Merge pull request #6744 from owncloud/fix_ocs_response_messages
keep response message
This commit is contained in:
commit
d4519125db
|
@ -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 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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']);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue