Mapzen isochtrones integration

This commit is contained in:
Mario de Frutos
2016-11-29 12:28:19 +01:00
parent 4b714b3845
commit 77f4f3e7ff
10 changed files with 293 additions and 32 deletions

View File

@@ -128,8 +128,8 @@ class HereMapsRoutingIsolineTestCase(unittest.TestCase):
MALFORMED_RESPONSE = """{"manolo": "escobar"}"""
def setUp(self):
logger = Mock()
self.routing = HereMapsRoutingIsoline(None, None, logger)
self.logger = Mock()
self.routing = HereMapsRoutingIsoline(None, None, self.logger)
self.isoline_url = "{0}{1}".format(HereMapsRoutingIsoline.PRODUCTION_ROUTING_BASE_URL,
HereMapsRoutingIsoline.ISOLINE_PATH)

View File

@@ -0,0 +1,54 @@
import mock
import unittest
import requests_mock
from mock import Mock
from cartodb_services.mapzen import MapzenIsochrones
from cartodb_services.mapzen.exceptions import ServiceException
requests_mock.Mocker.TEST_PREFIX = 'test_'
@requests_mock.Mocker()
class MapzenIsochronesTestCase(unittest.TestCase):
MAPZEN_ISOCHRONES_URL = 'https://matrix.mapzen.com/isochrone'
ERROR_RESPONSE = """{
"error_code": 171,
"error": "No suitable edges near location",
"status_code": 400,
"status": "Bad Request"
}"""
GOOD_RESPONSE = """{"features":[{"properties":{"opacity":0.33,"contour":15,"color":"tbd"},"type":"Feature","geometry":{"coordinates":[[-3.702579,40.430893],[-3.702193,40.430122],[-3.702579,40.430893]],"type":"LineString"}},{"properties":{"opacity":0.33,"contour":5,"color":"tbd"},"type":"Feature","geometry":{"coordinates":[[-3.703050,40.424995],[-3.702546,40.424694],[-3.703050,40.424995]],"type":"LineString"}}],"type":"FeatureCollection"}"""
def setUp(self):
self.logger = Mock()
self.mapzen_isochrones = MapzenIsochrones('matrix-xxxxx', self.logger)
def test_calculate_isochrone(self, req_mock):
req_mock.register_uri('GET', self.MAPZEN_ISOCHRONES_URL,
text=self.GOOD_RESPONSE)
response = self.mapzen_isochrones.isochrone([-41.484375, 28.993727],
'walk', [300, 900])
self.assertEqual(len(response), 2)
self.assertEqual(response[0].coordinates, [[-3.702579,40.430893],[-3.702193,40.430122],[-3.702579,40.430893]])
self.assertEqual(response[0].duration, 15)
self.assertEqual(response[1].coordinates, [[-3.703050,40.424995],[-3.702546,40.424694],[-3.703050,40.424995]])
self.assertEqual(response[1].duration, 5)
def test_calculate_isochrone_error_400_returns_empty(self, req_mock):
req_mock.register_uri('GET', self.MAPZEN_ISOCHRONES_URL,
text=self.ERROR_RESPONSE, status_code=400)
response = self.mapzen_isochrones.isochrone([-41.484375, 28.993727],
'walk', [300, 900])
self.assertEqual(response, [])
def test_calculate_isochrone_error_500_returns_exception(self, req_mock):
req_mock.register_uri('GET', self.MAPZEN_ISOCHRONES_URL,
text=self.ERROR_RESPONSE, status_code=500)
with self.assertRaises(ServiceException):
self.mapzen_isochrones.isochrone([-41.484375, 28.993727],
'walk', [300, 900])