Skip to content
This repository was archived by the owner on Jan 13, 2022. It is now read-only.

Commit 6cc4852

Browse files
committed
Merge pull request #523 from SammyK/batch-header-fix
Fix parsing of batch headers
2 parents 8792b2b + 9fb0069 commit 6cc4852

File tree

2 files changed

+47
-1
lines changed

2 files changed

+47
-1
lines changed

src/Facebook/FacebookBatchResponse.php

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,8 @@ public function addResponse($key, $response)
102102

103103
$httpResponseBody = isset($response['body']) ? $response['body'] : null;
104104
$httpResponseCode = isset($response['code']) ? $response['code'] : null;
105-
$httpResponseHeaders = isset($response['headers']) ? $response['headers'] : [];
105+
// @TODO With PHP 5.5 support, this becomes array_column($response['headers'], 'value', 'name')
106+
$httpResponseHeaders = isset($response['headers']) ? $this->normalizeBatchHeaders($response['headers']) : [];
106107

107108
$this->responses[$originalRequestName] = new FacebookResponse(
108109
$originalRequest,
@@ -151,4 +152,23 @@ public function offsetGet($offset)
151152
{
152153
return isset($this->responses[$offset]) ? $this->responses[$offset] : null;
153154
}
155+
156+
/**
157+
* Converts the batch header array into a standard format.
158+
* @TODO replace with array_column() when PHP 5.5 is supported.
159+
*
160+
* @param array $batchHeaders
161+
*
162+
* @return array
163+
*/
164+
private function normalizeBatchHeaders(array $batchHeaders)
165+
{
166+
$headers = [];
167+
168+
foreach ($batchHeaders as $header) {
169+
$headers[$header['name']] = $header['value'];
170+
}
171+
172+
return $headers;
173+
}
154174
}

tests/FacebookBatchResponseTest.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,4 +135,30 @@ public function testTheOriginalRequestCanBeObtainedForEachRequest()
135135
$this->assertEquals('foo_token_two', $batchResponse[1]->getAccessToken());
136136
$this->assertEquals('foo_token_three', $batchResponse[2]->getAccessToken());
137137
}
138+
139+
public function testHeadersFromBatchRequestCanBeAccessed()
140+
{
141+
$graphResponseJson = '[';
142+
$graphResponseJson .= '{"code":200,"headers":[{"name":"Facebook-API-Version","value":"v2.0"},{"name":"ETag","value":"\"fooTag\""}],"body":"{\"foo\":\"bar\"}"}';
143+
$graphResponseJson .= ',{"code":200,"headers":[{"name":"Facebook-API-Version","value":"v2.5"},{"name":"ETag","value":"\"barTag\""}],"body":"{\"foo\":\"bar\"}"}';
144+
$graphResponseJson .= ']';
145+
$response = new FacebookResponse($this->request, $graphResponseJson, 200);
146+
147+
$requests = [
148+
new FacebookRequest($this->app, 'foo_token_one', 'GET', '/me'),
149+
new FacebookRequest($this->app, 'foo_token_two', 'GET', '/you'),
150+
];
151+
152+
$batchRequest = new FacebookBatchRequest($this->app, $requests);
153+
$batchResponse = new FacebookBatchResponse($batchRequest, $response);
154+
155+
$this->assertEquals('v2.0', $batchResponse[0]->getGraphVersion());
156+
$this->assertEquals('"fooTag"', $batchResponse[0]->getETag());
157+
$this->assertEquals('v2.5', $batchResponse[1]->getGraphVersion());
158+
$this->assertEquals('"barTag"', $batchResponse[1]->getETag());
159+
$this->assertEquals([
160+
'Facebook-API-Version' => 'v2.5',
161+
'ETag' => '"barTag"',
162+
], $batchResponse[1]->getHeaders());
163+
}
138164
}

0 commit comments

Comments
 (0)