Merge pull request #18184 from owncloud/ocs-merge-headers
Merge headers of ocs results
This commit is contained in:
commit
cf9b8fc182
|
@ -231,7 +231,8 @@ class OC_API {
|
|||
$picked = reset($shipped['failed']);
|
||||
$code = $picked['response']->getStatusCode();
|
||||
$meta = $picked['response']->getMeta();
|
||||
$response = new OC_OCS_Result($data, $code, $meta['message']);
|
||||
$headers = $picked['response']->getHeaders();
|
||||
$response = new OC_OCS_Result($data, $code, $meta['message'], $headers);
|
||||
return $response;
|
||||
} elseif(!empty($shipped['succeeded'])) {
|
||||
$responses = array_merge($shipped['succeeded'], $thirdparty['succeeded']);
|
||||
|
@ -244,13 +245,16 @@ class OC_API {
|
|||
$picked = reset($thirdparty['failed']);
|
||||
$code = $picked['response']->getStatusCode();
|
||||
$meta = $picked['response']->getMeta();
|
||||
$response = new OC_OCS_Result($data, $code, $meta['message']);
|
||||
$headers = $picked['response']->getHeaders();
|
||||
$response = new OC_OCS_Result($data, $code, $meta['message'], $headers);
|
||||
return $response;
|
||||
} else {
|
||||
$responses = $thirdparty['succeeded'];
|
||||
}
|
||||
// Merge the successful responses
|
||||
$data = array();
|
||||
$data = [];
|
||||
$codes = [];
|
||||
$header = [];
|
||||
|
||||
foreach($responses as $response) {
|
||||
if($response['shipped']) {
|
||||
|
@ -258,8 +262,9 @@ class OC_API {
|
|||
} else {
|
||||
$data = array_merge_recursive($data, $response['response']->getData());
|
||||
}
|
||||
$codes[] = array('code' => $response['response']->getStatusCode(),
|
||||
'meta' => $response['response']->getMeta());
|
||||
$header = array_merge_recursive($header, $response['response']->getHeaders());
|
||||
$codes[] = ['code' => $response['response']->getStatusCode(),
|
||||
'meta' => $response['response']->getMeta()];
|
||||
}
|
||||
|
||||
// Use any non 100 status codes
|
||||
|
@ -273,8 +278,7 @@ class OC_API {
|
|||
}
|
||||
}
|
||||
|
||||
$result = new OC_OCS_Result($data, $statusCode, $statusMessage);
|
||||
return $result;
|
||||
return new OC_OCS_Result($data, $statusCode, $statusMessage, $header);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -51,8 +51,9 @@ class OC_OCS_Result{
|
|||
* @param mixed $data the data to return
|
||||
* @param int $code
|
||||
* @param null|string $message
|
||||
* @param array $headers
|
||||
*/
|
||||
public function __construct($data=null, $code=100, $message=null) {
|
||||
public function __construct($data = null, $code = 100, $message = null, $headers = []) {
|
||||
if ($data === null) {
|
||||
$this->data = array();
|
||||
} elseif (!is_array($data)) {
|
||||
|
@ -62,6 +63,7 @@ class OC_OCS_Result{
|
|||
}
|
||||
$this->statusCode = $code;
|
||||
$this->message = $message;
|
||||
$this->headers = $headers;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -14,11 +14,13 @@ class Test_API extends \Test\TestCase {
|
|||
* @param string $message
|
||||
*/
|
||||
function buildResponse($shipped, $data, $code, $message=null) {
|
||||
return array(
|
||||
$resp = new OC_OCS_Result($data, $code, $message);
|
||||
$resp->addHeader('KEY', 'VALUE');
|
||||
return [
|
||||
'shipped' => $shipped,
|
||||
'response' => new OC_OCS_Result($data, $code, $message),
|
||||
'response' => $resp,
|
||||
'app' => $this->getUniqueID('testapp_'),
|
||||
);
|
||||
];
|
||||
}
|
||||
|
||||
// Validate details of the result
|
||||
|
@ -79,11 +81,11 @@ class Test_API extends \Test\TestCase {
|
|||
}
|
||||
|
||||
function dataProviderTestOneResult() {
|
||||
return array(
|
||||
array(100, true),
|
||||
array(101, false),
|
||||
array(997, false),
|
||||
);
|
||||
return [
|
||||
[100, true],
|
||||
[101, false],
|
||||
[997, false],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -94,47 +96,47 @@ class Test_API extends \Test\TestCase {
|
|||
*/
|
||||
public function testOneResult($statusCode, $succeeded) {
|
||||
// Setup some data arrays
|
||||
$data1 = array(
|
||||
'users' => array(
|
||||
'tom' => array(
|
||||
$data1 = [
|
||||
'users' => [
|
||||
'tom' => [
|
||||
'key' => 'value',
|
||||
),
|
||||
'frank' => array(
|
||||
],
|
||||
'frank' => [
|
||||
'key' => 'value',
|
||||
),
|
||||
));
|
||||
],
|
||||
]];
|
||||
|
||||
// Test merging one success result
|
||||
$response = $this->buildResponse(true, $data1, $statusCode);
|
||||
$result = OC_API::mergeResponses(array($response));
|
||||
$result = OC_API::mergeResponses([$response]);
|
||||
$this->assertEquals($response['response'], $result);
|
||||
$this->checkResult($result, $succeeded);
|
||||
}
|
||||
|
||||
function dataProviderTestMergeResponses() {
|
||||
return array(
|
||||
return [
|
||||
// Two shipped success results
|
||||
array(true, 100, true, 100, true),
|
||||
[true, 100, true, 100, true],
|
||||
// Two shipped results, one success and one failure
|
||||
array(true, 100, true, 998, false),
|
||||
[true, 100, true, 998, false],
|
||||
// Two shipped results, both failure
|
||||
array(true, 997, true, 998, false),
|
||||
[true, 997, true, 998, false],
|
||||
// Two third party success results
|
||||
array(false, 100, false, 100, true),
|
||||
[false, 100, false, 100, true],
|
||||
// Two third party results, one success and one failure
|
||||
array(false, 100, false, 998, false),
|
||||
[false, 100, false, 998, false],
|
||||
// Two third party results, both failure
|
||||
array(false, 997, false, 998, false),
|
||||
[false, 997, false, 998, false],
|
||||
// One of each, both success
|
||||
array(false, 100, true, 100, true),
|
||||
array(true, 100, false, 100, true),
|
||||
[false, 100, true, 100, true],
|
||||
[true, 100, false, 100, true],
|
||||
// One of each, both failure
|
||||
array(false, 997, true, 998, false),
|
||||
[false, 997, true, 998, false],
|
||||
// One of each, shipped success
|
||||
array(false, 997, true, 100, true),
|
||||
[false, 997, true, 100, true],
|
||||
// One of each, third party success
|
||||
array(false, 100, true, 998, false),
|
||||
);
|
||||
[false, 100, true, 998, false],
|
||||
];
|
||||
}
|
||||
/**
|
||||
* @dataProvider dataProviderTestMergeResponses
|
||||
|
@ -175,9 +177,11 @@ class Test_API extends \Test\TestCase {
|
|||
$this->checkResult($result, $succeeded);
|
||||
$resultData = $result->getData();
|
||||
$resultMeta = $result->getMeta();
|
||||
$resultHeaders = $result->getHeaders();
|
||||
$resultStatusCode = $result->getStatusCode();
|
||||
|
||||
$this->assertArrayHasKey('jan', $resultData['users']);
|
||||
$this->assertArrayHasKey('KEY', $resultHeaders);
|
||||
|
||||
// check if the returned status message matches the selected status code
|
||||
if ($resultStatusCode === 997) {
|
||||
|
|
Loading…
Reference in New Issue