From 7b1c435dccc09fef7ee2e71c5b313c492a1270fa Mon Sep 17 00:00:00 2001 From: SammyK Date: Tue, 20 Oct 2015 09:08:45 -0500 Subject: [PATCH 1/2] Fix parsing of batch headers --- src/Facebook/FacebookBatchResponse.php | 20 +++++++++++++++++++- tests/FacebookBatchResponseTest.php | 26 ++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/src/Facebook/FacebookBatchResponse.php b/src/Facebook/FacebookBatchResponse.php index 5ea765e30..9262646b7 100644 --- a/src/Facebook/FacebookBatchResponse.php +++ b/src/Facebook/FacebookBatchResponse.php @@ -102,7 +102,7 @@ public function addResponse($key, $response) $httpResponseBody = isset($response['body']) ? $response['body'] : null; $httpResponseCode = isset($response['code']) ? $response['code'] : null; - $httpResponseHeaders = isset($response['headers']) ? $response['headers'] : []; + $httpResponseHeaders = isset($response['headers']) ? $this->normalizeBatchHeaders($response['headers']) : []; $this->responses[$originalRequestName] = new FacebookResponse( $originalRequest, @@ -151,4 +151,22 @@ public function offsetGet($offset) { return isset($this->responses[$offset]) ? $this->responses[$offset] : null; } + + /** + * Converts the batch header array into a standard format. + * + * @param array $batchHeaders + * + * @return array + */ + private function normalizeBatchHeaders(array $batchHeaders) + { + $headers = []; + + foreach ($batchHeaders as $header) { + $headers[$header['name']] = $header['value']; + } + + return $headers; + } } diff --git a/tests/FacebookBatchResponseTest.php b/tests/FacebookBatchResponseTest.php index dec92a190..edbed3784 100755 --- a/tests/FacebookBatchResponseTest.php +++ b/tests/FacebookBatchResponseTest.php @@ -135,4 +135,30 @@ public function testTheOriginalRequestCanBeObtainedForEachRequest() $this->assertEquals('foo_token_two', $batchResponse[1]->getAccessToken()); $this->assertEquals('foo_token_three', $batchResponse[2]->getAccessToken()); } + + public function testHeadersFromBatchRequestCanBeAccessed() + { + $graphResponseJson = '['; + $graphResponseJson .= '{"code":200,"headers":[{"name":"Facebook-API-Version","value":"v2.0"},{"name":"ETag","value":"\"fooTag\""}],"body":"{\"foo\":\"bar\"}"}'; + $graphResponseJson .= ',{"code":200,"headers":[{"name":"Facebook-API-Version","value":"v2.5"},{"name":"ETag","value":"\"barTag\""}],"body":"{\"foo\":\"bar\"}"}'; + $graphResponseJson .= ']'; + $response = new FacebookResponse($this->request, $graphResponseJson, 200); + + $requests = [ + new FacebookRequest($this->app, 'foo_token_one', 'GET', '/me'), + new FacebookRequest($this->app, 'foo_token_two', 'GET', '/you'), + ]; + + $batchRequest = new FacebookBatchRequest($this->app, $requests); + $batchResponse = new FacebookBatchResponse($batchRequest, $response); + + $this->assertEquals('v2.0', $batchResponse[0]->getGraphVersion()); + $this->assertEquals('"fooTag"', $batchResponse[0]->getETag()); + $this->assertEquals('v2.5', $batchResponse[1]->getGraphVersion()); + $this->assertEquals('"barTag"', $batchResponse[1]->getETag()); + $this->assertEquals([ + 'Facebook-API-Version' => 'v2.5', + 'ETag' => '"barTag"', + ], $batchResponse[1]->getHeaders()); + } } From 9fb0069b69983ede766c3f6c001fa59aa1115fb6 Mon Sep 17 00:00:00 2001 From: SammyK Date: Tue, 20 Oct 2015 09:31:43 -0500 Subject: [PATCH 2/2] Add TODO note for PHP 5.5 support --- src/Facebook/FacebookBatchResponse.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Facebook/FacebookBatchResponse.php b/src/Facebook/FacebookBatchResponse.php index 9262646b7..820157d16 100644 --- a/src/Facebook/FacebookBatchResponse.php +++ b/src/Facebook/FacebookBatchResponse.php @@ -102,6 +102,7 @@ public function addResponse($key, $response) $httpResponseBody = isset($response['body']) ? $response['body'] : null; $httpResponseCode = isset($response['code']) ? $response['code'] : null; + // @TODO With PHP 5.5 support, this becomes array_column($response['headers'], 'value', 'name') $httpResponseHeaders = isset($response['headers']) ? $this->normalizeBatchHeaders($response['headers']) : []; $this->responses[$originalRequestName] = new FacebookResponse( @@ -154,6 +155,7 @@ public function offsetGet($offset) /** * Converts the batch header array into a standard format. + * @TODO replace with array_column() when PHP 5.5 is supported. * * @param array $batchHeaders *