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

Commit 7b1c435

Browse files
committed
Fix parsing of batch headers
1 parent 8792b2b commit 7b1c435

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

src/Facebook/FacebookBatchResponse.php

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ 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+
$httpResponseHeaders = isset($response['headers']) ? $this->normalizeBatchHeaders($response['headers']) : [];
106106

107107
$this->responses[$originalRequestName] = new FacebookResponse(
108108
$originalRequest,
@@ -151,4 +151,22 @@ public function offsetGet($offset)
151151
{
152152
return isset($this->responses[$offset]) ? $this->responses[$offset] : null;
153153
}
154+
155+
/**
156+
* Converts the batch header array into a standard format.
157+
*
158+
* @param array $batchHeaders
159+
*
160+
* @return array
161+
*/
162+
private function normalizeBatchHeaders(array $batchHeaders)
163+
{
164+
$headers = [];
165+
166+
foreach ($batchHeaders as $header) {
167+
$headers[$header['name']] = $header['value'];
168+
}
169+
170+
return $headers;
171+
}
154172
}

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)