Completed
Pull Request — master (#594)
by Andreas
03:19
created

FacebookBatchResponseTest::testHeadersFromBatchRequestCanBeAccessed()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 25
Code Lines 19

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
cc 1
eloc 19
nc 1
nop 0
dl 0
loc 25
rs 8.8571
c 1
b 1
f 0
1
<?php
2
/**
3
 * Copyright 2016 Facebook, Inc.
4
 *
5
 * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
 * use, copy, modify, and distribute this software in source code or binary
7
 * form for use in connection with the web services and APIs provided by
8
 * Facebook.
9
 *
10
 * As with any software that integrates with the Facebook platform, your use
11
 * of this software is subject to the Facebook Developer Principles and
12
 * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
 * shall be included in all copies or substantial portions of the software.
14
 *
15
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
 * DEALINGS IN THE SOFTWARE.
22
 *
23
 */
24
namespace Facebook\Tests;
25
26
use Facebook\FacebookApp;
27
use Facebook\FacebookRequest;
28
use Facebook\FacebookResponse;
29
use Facebook\FacebookBatchRequest;
30
use Facebook\FacebookBatchResponse;
31
32
class FacebookBatchResponseTest extends \PHPUnit_Framework_TestCase
33
{
34
    /**
35
     * @var \Facebook\FacebookApp
36
     */
37
    protected $app;
38
39
    /**
40
     * @var \Facebook\FacebookRequest
41
     */
42
    protected $request;
43
44
    protected function setUp()
45
    {
46
        $this->app = new FacebookApp('123', 'foo_secret');
47
        $this->request = new FacebookRequest(
48
            $this->app,
49
            'foo_token',
50
            'POST',
51
            '/',
52
            ['batch' => 'foo'],
53
            'foo_eTag',
54
            'v1337'
55
        );
56
    }
57
58
    public function testASuccessfulJsonBatchResponseWillBeDecoded()
59
    {
60
        $graphResponseJson = '[';
61
        // Single Graph object.
62
        $graphResponseJson .= '{"code":200,"headers":[{"name":"Connection","value":"close"},{"name":"Last-Modified","value":"2013-12-24T00:34:20+0000"},{"name":"Facebook-API-Version","value":"v2.0"},{"name":"ETag","value":"\"fooTag\""},{"name":"Content-Type","value":"text\/javascript; charset=UTF-8"},{"name":"Pragma","value":"no-cache"},{"name":"Access-Control-Allow-Origin","value":"*"},{"name":"Cache-Control","value":"private, no-cache, no-store, must-revalidate"},{"name":"Expires","value":"Sat, 01 Jan 2000 00:00:00 GMT"}],"body":"{\"id\":\"123\",\"name\":\"Foo McBar\",\"updated_time\":\"2013-12-24T00:34:20+0000\",\"verified\":true}"}';
63
        // Paginated list of Graph objects.
64
        $graphResponseJson .= ',{"code":200,"headers":[{"name":"Connection","value":"close"},{"name":"Facebook-API-Version","value":"v1.0"},{"name":"ETag","value":"\"barTag\""},{"name":"Content-Type","value":"text\/javascript; charset=UTF-8"},{"name":"Pragma","value":"no-cache"},{"name":"Access-Control-Allow-Origin","value":"*"},{"name":"Cache-Control","value":"private, no-cache, no-store, must-revalidate"},{"name":"Expires","value":"Sat, 01 Jan 2000 00:00:00 GMT"}],"body":"{\"data\":[{\"id\":\"1337\",\"story\":\"Foo story.\"},{\"id\":\"1338\",\"story\":\"Bar story.\"}],\"paging\":{\"previous\":\"previous_url\",\"next\":\"next_url\"}}"}';
65
        // After POST operation.
66
        $graphResponseJson .= ',{"code":200,"headers":[{"name":"Connection","value":"close"},{"name":"Expires","value":"Sat, 01 Jan 2000 00:00:00 GMT"},{"name":"Cache-Control","value":"private, no-cache, no-store, must-revalidate"},{"name":"Access-Control-Allow-Origin","value":"*"},{"name":"Pragma","value":"no-cache"},{"name":"Content-Type","value":"text\/javascript; charset=UTF-8"},{"name":"Facebook-API-Version","value":"v2.0"}],"body":"{\"id\":\"123_1337\"}"}';
67
        // After DELETE operation.
68
        $graphResponseJson .= ',{"code":200,"headers":[{"name":"Connection","value":"close"},{"name":"Expires","value":"Sat, 01 Jan 2000 00:00:00 GMT"},{"name":"Cache-Control","value":"private, no-cache, no-store, must-revalidate"},{"name":"Access-Control-Allow-Origin","value":"*"},{"name":"Pragma","value":"no-cache"},{"name":"Content-Type","value":"text\/javascript; charset=UTF-8"},{"name":"Facebook-API-Version","value":"v2.0"}],"body":"true"}';
69
        $graphResponseJson .= ']';
70
        $response = new FacebookResponse($this->request, $graphResponseJson, 200);
71
        $batchRequest = new FacebookBatchRequest($this->app, [
72
            new FacebookRequest($this->app, 'token'),
73
            new FacebookRequest($this->app, 'token'),
74
            new FacebookRequest($this->app, 'token'),
75
            new FacebookRequest($this->app, 'token'),
76
        ]);
77
        $batchResponse = new FacebookBatchResponse($batchRequest, $response);
78
79
        $decodedResponses = $batchResponse->getResponses();
80
81
        // Single Graph object.
82
        $this->assertFalse($decodedResponses[0]->isError(), 'Did not expect Response to return an error for single Graph object.');
83
        $this->assertInstanceOf('Facebook\GraphNodes\GraphNode', $decodedResponses[0]->getGraphNode());
84
        // Paginated list of Graph objects.
85
        $this->assertFalse($decodedResponses[1]->isError(), 'Did not expect Response to return an error for paginated list of Graph objects.');
86
        $graphEdge = $decodedResponses[1]->getGraphEdge();
87
        $this->assertInstanceOf('Facebook\GraphNodes\GraphNode', $graphEdge[0]);
88
        $this->assertInstanceOf('Facebook\GraphNodes\GraphNode', $graphEdge[1]);
89
    }
90
91
    public function testABatchResponseCanBeIteratedOver()
92
    {
93
        $graphResponseJson = '[';
94
        $graphResponseJson .= '{"code":200,"headers":[],"body":"{\"foo\":\"bar\"}"}';
95
        $graphResponseJson .= ',{"code":200,"headers":[],"body":"{\"foo\":\"bar\"}"}';
96
        $graphResponseJson .= ',{"code":200,"headers":[],"body":"{\"foo\":\"bar\"}"}';
97
        $graphResponseJson .= ']';
98
        $response = new FacebookResponse($this->request, $graphResponseJson, 200);
99
        $batchRequest = new FacebookBatchRequest($this->app, [
100
            'req_one' => new FacebookRequest($this->app, 'token'),
101
            'req_two' => new FacebookRequest($this->app, 'token'),
102
            'req_three' => new FacebookRequest($this->app, 'token'),
103
        ]);
104
        $batchResponse = new FacebookBatchResponse($batchRequest, $response);
105
106
        $this->assertInstanceOf('IteratorAggregate', $batchResponse);
107
108
        foreach ($batchResponse as $key => $responseEntity) {
109
            $this->assertTrue(in_array($key, ['req_one', 'req_two', 'req_three']));
110
            $this->assertInstanceOf('Facebook\FacebookResponse', $responseEntity);
111
        }
112
    }
113
114
    public function testTheOriginalRequestCanBeObtainedForEachRequest()
115
    {
116
        $graphResponseJson = '[';
117
        $graphResponseJson .= '{"code":200,"headers":[],"body":"{\"foo\":\"bar\"}"}';
118
        $graphResponseJson .= ',{"code":200,"headers":[],"body":"{\"foo\":\"bar\"}"}';
119
        $graphResponseJson .= ',{"code":200,"headers":[],"body":"{\"foo\":\"bar\"}"}';
120
        $graphResponseJson .= ']';
121
        $response = new FacebookResponse($this->request, $graphResponseJson, 200);
122
123
        $requests = [
124
            new FacebookRequest($this->app, 'foo_token_one', 'GET', '/me'),
125
            new FacebookRequest($this->app, 'foo_token_two', 'POST', '/you'),
126
            new FacebookRequest($this->app, 'foo_token_three', 'DELETE', '/123456'),
127
        ];
128
129
        $batchRequest = new FacebookBatchRequest($this->app, $requests);
130
        $batchResponse = new FacebookBatchResponse($batchRequest, $response);
131
132
        $this->assertInstanceOf('Facebook\FacebookResponse', $batchResponse[0]);
133
        $this->assertInstanceOf('Facebook\FacebookRequest', $batchResponse[0]->getRequest());
134
        $this->assertEquals('foo_token_one', $batchResponse[0]->getAccessToken());
135
        $this->assertEquals('foo_token_two', $batchResponse[1]->getAccessToken());
136
        $this->assertEquals('foo_token_three', $batchResponse[2]->getAccessToken());
137
    }
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
    }
164
}
165