SearchIteratorTest   A
last analyzed

Complexity

Total Complexity 14

Size/Duplication

Total Lines 310
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Importance

Changes 2
Bugs 1 Features 1
Metric Value
wmc 14
c 2
b 1
f 1
lcom 1
cbo 5
dl 0
loc 310
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A setUp() 0 21 3
B testIterator() 0 19 7
A fakeHttpSend() 0 12 2
B getFirstPageJson() 0 121 1
B getLastPageJson() 0 120 1
1
<?php
2
3
namespace Nekland\PlacesApi\Tests\Iterator;
4
5
6
use Nekland\BaseApi\Http\Request;
7
use Nekland\PlacesApi\Api\Search;
8
use Prophecy\Argument;
9
10
class SearchIteratorTest extends \PHPUnit_Framework_TestCase
11
{
12
    /**
13
     * @var \Nekland\BaseApi\Http\AbstractHttpClient|\Prophecy\Prophecy\ObjectProphecy
14
     */
15
    private $httpClient;
16
17
    /**
18
     * @var Search
19
     */
20
    private $searchApi;
21
22
    protected function setUp()
23
    {
24
        parent::setUp();
25
26
        $this->httpClient = $this->prophesize('Nekland\BaseApi\Http\AbstractHttpClient');
27
28
        $this->httpClient->send(Argument::that(function ($arg) {
29
            if (!$arg instanceof Request) {
30
                return false;
31
            }
32
            $body = $arg->getBody();
33
34
            if (!empty($body['pagetoken'])) {
35
                return false;
36
            }
37
38
            return true;
39
        }))->will([$this, 'fakeHttpSend']);
40
41
        $this->searchApi = new Search($this->httpClient->reveal());
42
    }
43
44
    public function testIterator()
45
    {
46
        $iterator = $this->searchApi->getSearchIterator('12,23', '100');
47
48
        foreach($iterator as $key => $value) {
49
            if ($key === 0 && $value['results'][0]['id'] !== 'foobaz') {
50
                throw new \Exception('Test fails: the first page is not what it should looks like.');
51
            }
52
53
            if ($key === 1 && $value['results'][0]['id'] !== 'foobar') {
54
                throw new \Exception('Test fails: the second page is not what it should looks like.');
55
            }
56
57
58
            if ($key === 2) {
59
                throw new \Exception('Too much iterations');
60
            }
61
        }
62
    }
63
64
    public function fakeHttpSend($args)
65
    {
66
        /** @var Request $request */
67
        $request = $args[0];
68
        $body = $request->getParameters();
69
70
        if (!empty($body['pagetoken'])) {
71
            return $this->getLastPageJson();
72
        }
73
74
        return $this->getFirstPageJson();
75
    }
76
77
    private function getFirstPageJson()
78
    {
79
        return '{
80
   "html_attributions" : [],
81
   "next_page_token" : "CpQCAgEAAFxg8o-eU7_uKn7Yqjana-HQIx1hr5BrT4zBaEko29ANsXtp9mrqN0yrKWhf-y2PUpHRLQb1GT-mtxNcXou8TwkXhi1Jbk-ReY7oulyuvKSQrw1lgJElggGlo0d6indiH1U-tDwquw4tU_UXoQ_sj8OBo8XBUuWjuuFShqmLMP-0W59Vr6CaXdLrF8M3wFR4dUUhSf5UC4QCLaOMVP92lyh0OdtF_m_9Dt7lz-Wniod9zDrHeDsz_by570K3jL1VuDKTl_U1cJ0mzz_zDHGfOUf7VU1kVIs1WnM9SGvnm8YZURLTtMLMWx8-doGUE56Af_VfKjGDYW361OOIj9GmkyCFtaoCmTMIr5kgyeUSnB-IEhDlzujVrV6O9Mt7N4DagR6RGhT3g1viYLS4kO5YindU6dm3GIof1Q",
82
   "results" : [
83
      {
84
         "geometry" : {
85
            "location" : {
86
               "lat" : -33.870775,
87
               "lng" : 151.199025
88
            }
89
         },
90
         "icon" : "http://maps.gstatic.com/mapfiles/place_api/icons/travel_agent-71.png",
91
         "id" : "foobaz",
92
         "name" : "Rhythmboat Cruises",
93
         "opening_hours" : {
94
            "open_now" : true
95
         },
96
         "photos" : [
97
            {
98
               "height" : 270,
99
               "html_attributions" : [],
100
               "photo_reference" : "CnRnAAAAF-LjFR1ZV93eawe1cU_3QNMCNmaGkowY7CnOf-kcNmPhNnPEG9W979jOuJJ1sGr75rhD5hqKzjD8vbMbSsRnq_Ni3ZIGfY6hKWmsOf3qHKJInkm4h55lzvLAXJVc-Rr4kI9O1tmIblblUpg2oqoq8RIQRMQJhFsTr5s9haxQ07EQHxoUO0ICubVFGYfJiMUPor1GnIWb5i8",
101
               "width" : 519
102
            }
103
         ],
104
         "place_id" : "ChIJyWEHuEmuEmsRm9hTkapTCrk",
105
         "scope" : "GOOGLE",
106
         "alt_ids" : [
107
            {
108
               "place_id" : "D9iJyWEHuEmuEmsRm9hTkapTCrk",
109
               "scope" : "APP"
110
            }
111
         ],
112
         "reference" : "CoQBdQAAAFSiijw5-cAV68xdf2O18pKIZ0seJh03u9h9wk_lEdG-cP1dWvp_QGS4SNCBMk_fB06YRsfMrNkINtPez22p5lRIlj5ty_HmcNwcl6GZXbD2RdXsVfLYlQwnZQcnu7ihkjZp_2gk1-fWXql3GQ8-1BEGwgCxG-eaSnIJIBPuIpihEhAY1WYdxPvOWsPnb2-nGb6QGhTipN0lgaLpQTnkcMeAIEvCsSa0Ww",
113
         "types" : [ "travel_agency", "restaurant", "food", "establishment" ],
114
         "vicinity" : "Pyrmont Bay Wharf Darling Dr, Sydney"
115
      },
116
      {
117
         "geometry" : {
118
            "location" : {
119
               "lat" : -33.866891,
120
               "lng" : 151.200814
121
            }
122
         },
123
         "icon" : "http://maps.gstatic.com/mapfiles/place_api/icons/restaurant-71.png",
124
         "id" : "45a27fd8d56c56dc62afc9b49e1d850440d5c403",
125
         "name" : "Private Charter Sydney Habour Cruise",
126
         "photos" : [
127
            {
128
               "height" : 426,
129
               "html_attributions" : [],
130
               "photo_reference" : "CnRnAAAAL3n0Zu3U6fseyPl8URGKD49aGB2Wka7CKDZfamoGX2ZTLMBYgTUshjr-MXc0_O2BbvlUAZWtQTBHUVZ-5Sxb1-P-VX2Fx0sZF87q-9vUt19VDwQQmAX_mjQe7UWmU5lJGCOXSgxp2fu1b5VR_PF31RIQTKZLfqm8TA1eynnN4M1XShoU8adzJCcOWK0er14h8SqOIDZctvU",
131
               "width" : 640
132
            }
133
         ],
134
         "place_id" : "ChIJqwS6fjiuEmsRJAMiOY9MSms",
135
         "scope" : "GOOGLE",
136
         "reference" : "CpQBhgAAAFN27qR_t5oSDKPUzjQIeQa3lrRpFTm5alW3ZYbMFm8k10ETbISfK9S1nwcJVfrP-bjra7NSPuhaRulxoonSPQklDyB-xGvcJncq6qDXIUQ3hlI-bx4AxYckAOX74LkupHq7bcaREgrSBE-U6GbA1C3U7I-HnweO4IPtztSEcgW09y03v1hgHzL8xSDElmkQtRIQzLbyBfj3e0FhJzABXjM2QBoUE2EnL-DzWrzpgmMEulUBLGrtu2Y",
137
         "types" : [ "restaurant", "food", "establishment" ],
138
         "vicinity" : "Australia"
139
      },
140
      {
141
         "geometry" : {
142
            "location" : {
143
               "lat" : -33.870943,
144
               "lng" : 151.190311
145
            }
146
         },
147
         "icon" : "http://maps.gstatic.com/mapfiles/place_api/icons/restaurant-71.png",
148
         "id" : "30bee58f819b6c47bd24151802f25ecf11df8943",
149
         "name" : "Bucks Party Cruise",
150
         "opening_hours" : {
151
            "open_now" : true
152
         },
153
         "photos" : [
154
            {
155
               "height" : 600,
156
               "html_attributions" : [],
157
               "photo_reference" : "CnRnAAAA48AX5MsHIMiuipON_Lgh97hPiYDFkxx_vnaZQMOcvcQwYN92o33t5RwjRpOue5R47AjfMltntoz71hto40zqo7vFyxhDuuqhAChKGRQ5mdO5jv5CKWlzi182PICiOb37PiBtiFt7lSLe1SedoyrD-xIQD8xqSOaejWejYHCN4Ye2XBoUT3q2IXJQpMkmffJiBNftv8QSwF4",
158
               "width" : 800
159
            }
160
         ],
161
         "place_id" : "ChIJLfySpTOuEmsRsc_JfJtljdc",
162
         "scope" : "GOOGLE",
163
         "reference" : "CoQBdQAAANQSThnTekt-UokiTiX3oUFT6YDfdQJIG0ljlQnkLfWefcKmjxax0xmUpWjmpWdOsScl9zSyBNImmrTO9AE9DnWTdQ2hY7n-OOU4UgCfX7U0TE1Vf7jyODRISbK-u86TBJij0b2i7oUWq2bGr0cQSj8CV97U5q8SJR3AFDYi3ogqEhCMXjNLR1k8fiXTkG2BxGJmGhTqwE8C4grdjvJ0w5UsAVoOH7v8HQ",
164
         "types" : [ "restaurant", "food", "establishment" ],
165
         "vicinity" : "37 Bank St, Pyrmont"
166
      },
167
      {
168
         "geometry" : {
169
            "location" : {
170
               "lat" : -33.867591,
171
               "lng" : 151.201196
172
            }
173
         },
174
         "icon" : "http://maps.gstatic.com/mapfiles/place_api/icons/travel_agent-71.png",
175
         "id" : "a97f9fb468bcd26b68a23072a55af82d4b325e0d",
176
         "name" : "Australian Cruise Group",
177
         "opening_hours" : {
178
            "open_now" : true
179
         },
180
         "photos" : [
181
            {
182
               "height" : 242,
183
               "html_attributions" : [],
184
               "photo_reference" : "CnRnAAAABjeoPQ7NUU3pDitV4Vs0BgP1FLhf_iCgStUZUr4ZuNqQnc5k43jbvjKC2hTGM8SrmdJYyOyxRO3D2yutoJwVC4Vp_dzckkjG35L6LfMm5sjrOr6uyOtr2PNCp1xQylx6vhdcpW8yZjBZCvVsjNajLBIQ-z4ttAMIc8EjEZV7LsoFgRoU6OrqxvKCnkJGb9F16W57iIV4LuM",
185
               "width" : 200
186
            }
187
         ],
188
         "place_id" : "ChIJrTLr-GyuEmsRBfy61i59si0",
189
         "scope" : "GOOGLE",
190
         "reference" : "CoQBeQAAAFvf12y8veSQMdIMmAXQmus1zqkgKQ-O2KEX0Kr47rIRTy6HNsyosVl0CjvEBulIu_cujrSOgICdcxNioFDHtAxXBhqeR-8xXtm52Bp0lVwnO3LzLFY3jeo8WrsyIwNE1kQlGuWA4xklpOknHJuRXSQJVheRlYijOHSgsBQ35mOcEhC5IpbpqCMe82yR136087wZGhSziPEbooYkHLn9e5njOTuBprcfVw",
191
         "types" : [ "travel_agency", "restaurant", "food", "establishment" ],
192
         "vicinity" : "32 The Promenade, King Street Wharf 5, Sydney"
193
      }
194
   ],
195
   "status" : "OK"
196
}';
197
    }
198
199
    private function getLastPageJson()
200
    {
201
        return '{
202
   "html_attributions" : [],
203
   "results" : [
204
      {
205
         "geometry" : {
206
            "location" : {
207
               "lat" : -33.870775,
208
               "lng" : 151.199025
209
            }
210
         },
211
         "icon" : "http://maps.gstatic.com/mapfiles/place_api/icons/travel_agent-71.png",
212
         "id" : "foobar",
213
         "name" : "Rhythmboat Cruises",
214
         "opening_hours" : {
215
            "open_now" : true
216
         },
217
         "photos" : [
218
            {
219
               "height" : 270,
220
               "html_attributions" : [],
221
               "photo_reference" : "CnRnAAAAF-LjFR1ZV93eawe1cU_3QNMCNmaGkowY7CnOf-kcNmPhNnPEG9W979jOuJJ1sGr75rhD5hqKzjD8vbMbSsRnq_Ni3ZIGfY6hKWmsOf3qHKJInkm4h55lzvLAXJVc-Rr4kI9O1tmIblblUpg2oqoq8RIQRMQJhFsTr5s9haxQ07EQHxoUO0ICubVFGYfJiMUPor1GnIWb5i8",
222
               "width" : 519
223
            }
224
         ],
225
         "place_id" : "ChIJyWEHuEmuEmsRm9hTkapTCrk",
226
         "scope" : "GOOGLE",
227
         "alt_ids" : [
228
            {
229
               "place_id" : "D9iJyWEHuEmuEmsRm9hTkapTCrk",
230
               "scope" : "APP"
231
            }
232
         ],
233
         "reference" : "CoQBdQAAAFSiijw5-cAV68xdf2O18pKIZ0seJh03u9h9wk_lEdG-cP1dWvp_QGS4SNCBMk_fB06YRsfMrNkINtPez22p5lRIlj5ty_HmcNwcl6GZXbD2RdXsVfLYlQwnZQcnu7ihkjZp_2gk1-fWXql3GQ8-1BEGwgCxG-eaSnIJIBPuIpihEhAY1WYdxPvOWsPnb2-nGb6QGhTipN0lgaLpQTnkcMeAIEvCsSa0Ww",
234
         "types" : [ "travel_agency", "restaurant", "food", "establishment" ],
235
         "vicinity" : "Pyrmont Bay Wharf Darling Dr, Sydney"
236
      },
237
      {
238
         "geometry" : {
239
            "location" : {
240
               "lat" : -33.866891,
241
               "lng" : 151.200814
242
            }
243
         },
244
         "icon" : "http://maps.gstatic.com/mapfiles/place_api/icons/restaurant-71.png",
245
         "id" : "45a27fd8d56c56dc62afc9b49e1d850440d5c403",
246
         "name" : "Private Charter Sydney Habour Cruise",
247
         "photos" : [
248
            {
249
               "height" : 426,
250
               "html_attributions" : [],
251
               "photo_reference" : "CnRnAAAAL3n0Zu3U6fseyPl8URGKD49aGB2Wka7CKDZfamoGX2ZTLMBYgTUshjr-MXc0_O2BbvlUAZWtQTBHUVZ-5Sxb1-P-VX2Fx0sZF87q-9vUt19VDwQQmAX_mjQe7UWmU5lJGCOXSgxp2fu1b5VR_PF31RIQTKZLfqm8TA1eynnN4M1XShoU8adzJCcOWK0er14h8SqOIDZctvU",
252
               "width" : 640
253
            }
254
         ],
255
         "place_id" : "ChIJqwS6fjiuEmsRJAMiOY9MSms",
256
         "scope" : "GOOGLE",
257
         "reference" : "CpQBhgAAAFN27qR_t5oSDKPUzjQIeQa3lrRpFTm5alW3ZYbMFm8k10ETbISfK9S1nwcJVfrP-bjra7NSPuhaRulxoonSPQklDyB-xGvcJncq6qDXIUQ3hlI-bx4AxYckAOX74LkupHq7bcaREgrSBE-U6GbA1C3U7I-HnweO4IPtztSEcgW09y03v1hgHzL8xSDElmkQtRIQzLbyBfj3e0FhJzABXjM2QBoUE2EnL-DzWrzpgmMEulUBLGrtu2Y",
258
         "types" : [ "restaurant", "food", "establishment" ],
259
         "vicinity" : "Australia"
260
      },
261
      {
262
         "geometry" : {
263
            "location" : {
264
               "lat" : -33.870943,
265
               "lng" : 151.190311
266
            }
267
         },
268
         "icon" : "http://maps.gstatic.com/mapfiles/place_api/icons/restaurant-71.png",
269
         "id" : "30bee58f819b6c47bd24151802f25ecf11df8943",
270
         "name" : "Bucks Party Cruise",
271
         "opening_hours" : {
272
            "open_now" : true
273
         },
274
         "photos" : [
275
            {
276
               "height" : 600,
277
               "html_attributions" : [],
278
               "photo_reference" : "CnRnAAAA48AX5MsHIMiuipON_Lgh97hPiYDFkxx_vnaZQMOcvcQwYN92o33t5RwjRpOue5R47AjfMltntoz71hto40zqo7vFyxhDuuqhAChKGRQ5mdO5jv5CKWlzi182PICiOb37PiBtiFt7lSLe1SedoyrD-xIQD8xqSOaejWejYHCN4Ye2XBoUT3q2IXJQpMkmffJiBNftv8QSwF4",
279
               "width" : 800
280
            }
281
         ],
282
         "place_id" : "ChIJLfySpTOuEmsRsc_JfJtljdc",
283
         "scope" : "GOOGLE",
284
         "reference" : "CoQBdQAAANQSThnTekt-UokiTiX3oUFT6YDfdQJIG0ljlQnkLfWefcKmjxax0xmUpWjmpWdOsScl9zSyBNImmrTO9AE9DnWTdQ2hY7n-OOU4UgCfX7U0TE1Vf7jyODRISbK-u86TBJij0b2i7oUWq2bGr0cQSj8CV97U5q8SJR3AFDYi3ogqEhCMXjNLR1k8fiXTkG2BxGJmGhTqwE8C4grdjvJ0w5UsAVoOH7v8HQ",
285
         "types" : [ "restaurant", "food", "establishment" ],
286
         "vicinity" : "37 Bank St, Pyrmont"
287
      },
288
      {
289
         "geometry" : {
290
            "location" : {
291
               "lat" : -33.867591,
292
               "lng" : 151.201196
293
            }
294
         },
295
         "icon" : "http://maps.gstatic.com/mapfiles/place_api/icons/travel_agent-71.png",
296
         "id" : "a97f9fb468bcd26b68a23072a55af82d4b325e0d",
297
         "name" : "Australian Cruise Group",
298
         "opening_hours" : {
299
            "open_now" : true
300
         },
301
         "photos" : [
302
            {
303
               "height" : 242,
304
               "html_attributions" : [],
305
               "photo_reference" : "CnRnAAAABjeoPQ7NUU3pDitV4Vs0BgP1FLhf_iCgStUZUr4ZuNqQnc5k43jbvjKC2hTGM8SrmdJYyOyxRO3D2yutoJwVC4Vp_dzckkjG35L6LfMm5sjrOr6uyOtr2PNCp1xQylx6vhdcpW8yZjBZCvVsjNajLBIQ-z4ttAMIc8EjEZV7LsoFgRoU6OrqxvKCnkJGb9F16W57iIV4LuM",
306
               "width" : 200
307
            }
308
         ],
309
         "place_id" : "ChIJrTLr-GyuEmsRBfy61i59si0",
310
         "scope" : "GOOGLE",
311
         "reference" : "CoQBeQAAAFvf12y8veSQMdIMmAXQmus1zqkgKQ-O2KEX0Kr47rIRTy6HNsyosVl0CjvEBulIu_cujrSOgICdcxNioFDHtAxXBhqeR-8xXtm52Bp0lVwnO3LzLFY3jeo8WrsyIwNE1kQlGuWA4xklpOknHJuRXSQJVheRlYijOHSgsBQ35mOcEhC5IpbpqCMe82yR136087wZGhSziPEbooYkHLn9e5njOTuBprcfVw",
312
         "types" : [ "travel_agency", "restaurant", "food", "establishment" ],
313
         "vicinity" : "32 The Promenade, King Street Wharf 5, Sydney"
314
      }
315
   ],
316
   "status" : "OK"
317
}';
318
    }
319
}
320