import os import pytest import networkx as nx import rtree from evrouting.osm.imports import read_osm, insert_charging_stations from evrouting.osm.profiles import car from evrouting.osm.routing import shortest_path from evrouting.graph_tools import CHARGING_COEFFICIENT_KEY @pytest.fixture def graph(): G = nx.DiGraph() G.rtree = rtree.index.Index() node_coordinates = [ (51.7705832, 7.0002595), (51.7696529, 6.9568520) ] for n_id, coordinates in enumerate(node_coordinates): lat, lon = coordinates # Add two nodes, that exist in osm test map G.add_node(n_id, lat=lat, lon=lon) G.rtree.insert(n_id, (lon, lat, lon, lat)) yield G del G @pytest.fixture def map_graph(): G = read_osm(os.path.join(os.path.dirname(__file__), 'static/map.osm'), car) yield G del G def test_insert_charging_stations_close(graph): # Close two node 1 S = [{"lon": 7.0002593, "lat": 51.7705832, "power": 22.0}] graph = insert_charging_stations(graph, S) assert graph.nodes[0][CHARGING_COEFFICIENT_KEY] == 22.0 assert CHARGING_COEFFICIENT_KEY not in graph.nodes[1] def test_insert_charging_stations_eq(graph): # Close exactly at node 1 S = [{"lon": 7.0002595, "lat": 51.7705832, "power": 22.0}] graph = insert_charging_stations(graph, S) assert graph.nodes[0][CHARGING_COEFFICIENT_KEY] == 22.0 assert CHARGING_COEFFICIENT_KEY not in graph.nodes[1] def test_shortest_route(map_graph): s = (51.7769461, 6.9832152) t = (51.7796487, 6.9795230) route = [ "1827268706", "1826594887", "4955446046", "4955446048", "34053450", "4955446051", "418009799" ] assert route == shortest_path(map_graph, s, t, car)