1import pytest 2 3from geopy.geocoders import MapBox 4from geopy.point import Point 5from test.geocoders.util import BaseTestGeocoder, env 6 7 8class TestMapBox(BaseTestGeocoder): 9 @classmethod 10 def make_geocoder(cls, **kwargs): 11 return MapBox(api_key=env['MAPBOX_KEY'], timeout=3, **kwargs) 12 13 async def test_geocode(self): 14 await self.geocode_run( 15 {"query": "435 north michigan ave, chicago il 60611 usa"}, 16 {"latitude": 41.890, "longitude": -87.624}, 17 ) 18 19 async def test_unicode_name(self): 20 await self.geocode_run( 21 {"query": "\u6545\u5bab"}, 22 {"latitude": 39.916, "longitude": 116.390}, 23 ) 24 25 async def test_reverse(self): 26 new_york_point = Point(40.75376406311989, -73.98489005863667) 27 location = await self.reverse_run( 28 {"query": new_york_point}, 29 {"latitude": 40.7537640, "longitude": -73.98489, "delta": 1}, 30 ) 31 assert "New York" in location.address 32 33 async def test_zero_results(self): 34 await self.geocode_run( 35 {"query": 'asdfasdfasdf'}, 36 {}, 37 expect_failure=True, 38 ) 39 40 async def test_geocode_outside_bbox(self): 41 await self.geocode_run( 42 { 43 "query": "435 north michigan ave, chicago il 60611 usa", 44 "bbox": [[34.172684, -118.604794], 45 [34.236144, -118.500938]] 46 }, 47 {}, 48 expect_failure=True, 49 ) 50 51 async def test_geocode_bbox(self): 52 await self.geocode_run( 53 { 54 "query": "435 north michigan ave, chicago il 60611 usa", 55 "bbox": [Point(35.227672, -103.271484), 56 Point(48.603858, -74.399414)] 57 }, 58 {"latitude": 41.890, "longitude": -87.624}, 59 ) 60 61 async def test_geocode_proximity(self): 62 await self.geocode_run( 63 {"query": "200 queen street", "proximity": Point(45.3, -66.1)}, 64 {"latitude": 45.270208, "longitude": -66.050289, "delta": 0.1}, 65 ) 66 67 async def test_geocode_country_str(self): 68 await self.geocode_run( 69 {"query": "kazan", "country": "TR"}, 70 {"latitude": 40.2317, "longitude": 32.6839}, 71 ) 72 73 async def test_geocode_country_list(self): 74 await self.geocode_run( 75 {"query": "kazan", "country": ["CN", "TR"]}, 76 {"latitude": 40.2317, "longitude": 32.6839}, 77 ) 78 79 async def test_geocode_raw(self): 80 result = await self.geocode_run({"query": "New York"}, {}) 81 delta = 1.0 82 expected = pytest.approx((-73.8784155, 40.6930727), abs=delta) 83 assert expected == result.raw['center'] 84 85 async def test_geocode_exactly_one_false(self): 86 list_result = await self.geocode_run( 87 {"query": "maple street", "exactly_one": False}, 88 {}, 89 ) 90 assert len(list_result) >= 3 91