/** * Search venues. * * @param Search $options The search options. * * @return Venue[] */ public function search(Search $options) { $url = $this->getUrl('venues/search', $options->toArray()); $response = $this->httpClient->get($url, $this->getDefaultHeaders()); $description = $this->parseResponse($response); if (!isset($description->response->venues)) { throw InvalidResponseException::invalidResponseBody($response, 'response.venues'); } return array_map(function (\stdClass $venueDescription) { return $this->venueFactory->create($venueDescription); }, $description->response->venues); }
/** * Provides options. * * @return array */ public function optionsProvider() { return [[Search::createWithPlace('Chicago, IL')->setLimit(1)->setRadius(500), ['near' => 'Chicago, IL', 'limit' => 1, 'radius' => 500]], [Search::createWithCoordinates(new Coordinates(40.12, 50.12))->setLimit(40)->setRadius(10), ['ll' => new Coordinates(40.12, 50.12), 'limit' => 40, 'radius' => 10]], [Search::createWithCoordinates(new Coordinates(40.12, 50.12))->setRadius(10), ['ll' => new Coordinates(40.12, 50.12), 'radius' => 10]]]; }
/** * Test searching for venues. */ public function testSearchVenues() { $body = '{"meta": {"code": 200, "requestId": "234234"},"response": {"venues": [{"id": "430d0a00f964a5203e271fe3", "name": "Brooklyn Bridge Park"}, {"id": "430d0a00f964a5203e271fe3", "name": "Brooklyn Bridge Park"}]}}'; $venue = $this->getMockBuilder(Venue::class)->disableOriginalConstructor()->getMock(); $venueFactory = $this->getMockVenueFactory(); $venueFactory->expects($this->exactly(2))->method('create')->willReturn($venue); $client = $this->getClient($this->getMockResponse($body), $venueFactory); $venues = $client->search(Search::createWithPlace('Chicago, IL')); $this->assertCount(2, $venues); $this::assertEquals([$venue, $venue], $venues); $this->expectException(InvalidResponseException::class); $client = $this->getClient($this->getMockResponse('{"meta": {"invalid": "content"}}')); $client->search(Search::createWithPlace('Chicago, IL')); }