def test_address_lookup_calls_other_services_if_first_service_fails(self): """It should make another GET request if the first call fails.""" self.mock_urlopen.return_value = response_mocks.MockGoogleResponse( code=httplib.NOT_FOUND) self.app.get('/api/address-lookup?address=660+king+st') self.assertEqual(2, self.mock_urlopen.call_count)
def test_get_lat_lng_raises_upon_when_result_set_is_empty(self): """Raises a GeocodeServiceSearchError if no results are found.""" self.mock_urlopen.return_value = response_mocks.MockGoogleResponse( code=200, search_results=[]) with self.assertRaises(geocode_client.GeocodeServiceSearchError) as e: self.client.get_lat_lng_from_address('600 King St') self.assertIn('found no results', e.exception.message)
def test_get_lat_lng_raises_upon_non_success_response(self): """Raises a GeocodeServiceSearchError if there's a failure.""" error_response_code = httplib.BAD_REQUEST self.mock_urlopen.return_value = response_mocks.MockGoogleResponse( code=error_response_code) with self.assertRaises(geocode_client.GeocodeServiceSearchError) as e: self.client.get_lat_lng_from_address('600 King St') self.assertIn(str(error_response_code), e.exception.message)
def test_get_lat_lng_succeeds(self): """Getting lat/long returns first search result from Google.""" expected_lat_lng = (42.33, -122.45) other_lat_lng = (22.55, 55.77) self.mock_urlopen.return_value = response_mocks.MockGoogleResponse( code=200, search_results=[expected_lat_lng, other_lat_lng]) results = self.client.get_lat_lng_from_address('660 King St') self.assertEqual(expected_lat_lng, results)
def test_address_lookup_returns_404_if_all_services_fail(self): """It should return a 404 if it can't find any results.""" self.mock_urlopen.return_value = response_mocks.MockGoogleResponse( code=httplib.NOT_FOUND) response = self.app.get('/api/address-lookup?address=660+king+st') expected_data = {'error': 'Search term yielded no results'} actual_data = json.loads(response.data) self.assertEqual(httplib.NOT_FOUND, response.status_code) self.assertEqual(expected_data, actual_data)
def test_get_lat_lng_makes_proper_call_to_google_service(self): """Getting lat/long forms a proper request to Here API.""" self.mock_urlopen.return_value = response_mocks.MockGoogleResponse( code=200, search_results=[(42.33, -122.45)]) address = '660 King St' self.client.get_lat_lng_from_address(address) expected_params = urllib.urlencode({ 'address': address, 'api_key': self.api_key, }) expected_url = ('https://maps.googleapis.com/maps/api/geocode/json' '?{}').format(expected_params) actual_url = self.mock_urlopen.call_args[0][0] self.assertEqual(expected_url, actual_url)
def test_address_lookup_api_succeeds_with_valid_address(self): """It should return a valid lat long in JSON for a valid address.""" self.mock_urlopen.return_value = response_mocks.MockGoogleResponse( code=httplib.OK, search_results=[MOCK_LAT_LNG]) response = self.app.get('/api/address-lookup?address=660+king+st') response_data = json.loads(response.data) expected_data = { 'lat': MOCK_LAT_LNG[0], 'lng': MOCK_LAT_LNG[1], 'service': 'Google Maps Geocoding API', } self.assertEqual(httplib.OK, response.status_code) self.assertEqual(expected_data, response_data) self.assertEqual(1, self.mock_urlopen.call_count)