99 lines
3.6 KiB
Python
99 lines
3.6 KiB
Python
import unittest
|
|
|
|
from app.api.plaza import (
|
|
_build_libo_bus_route_payload,
|
|
_graph_map_poi_items,
|
|
_graph_poi_detail_payload,
|
|
_graph_zone_payload,
|
|
)
|
|
|
|
|
|
class PlazaGraphFallbackTests(unittest.TestCase):
|
|
def test_graph_pois_cover_business_places_and_bus_stops(self) -> None:
|
|
rows = [
|
|
[
|
|
"poi:hotel-1",
|
|
["Hotel"],
|
|
{
|
|
"element_id": "amap:H1",
|
|
"gaode_poi_id": "H1",
|
|
"name": "荔波测试酒店",
|
|
"type_label": "酒店",
|
|
"place_type": "hotel",
|
|
"lng": 107.88,
|
|
"lat": 25.40,
|
|
"towncode": "522722100000",
|
|
"zone_id": "A01",
|
|
},
|
|
],
|
|
[
|
|
"poi:stop-1",
|
|
["BusStop"],
|
|
{
|
|
"element_id": "amap:S1",
|
|
"gaode_poi_id": "S1",
|
|
"name": "汽车站",
|
|
"type_label": "公交站",
|
|
"place_type": "transit_stop",
|
|
"lng": 107.89,
|
|
"lat": 25.41,
|
|
},
|
|
],
|
|
]
|
|
|
|
items = _graph_map_poi_items(rows)
|
|
|
|
self.assertEqual(len(items), 2)
|
|
self.assertEqual(items[0]["categories"], ["酒店"])
|
|
self.assertEqual(items[1]["categories"], ["公交站"])
|
|
self.assertEqual(items[0]["zone_id"], "A01")
|
|
|
|
def test_graph_zones_decode_serialized_geometry(self) -> None:
|
|
payload = _graph_zone_payload(
|
|
[[{"towncode": "522722100000", "name": "玉屏街道"}, 12, 107.8, 25.3, 107.9, 25.5]],
|
|
[[{"zone_id": "A01", "zone_name": "古城片区", "geometry": "[[[107.8,25.3],[107.9,25.4]]]"}, 6]],
|
|
"yunyou_libo_full_v2",
|
|
)
|
|
|
|
self.assertEqual(payload["towns"][0]["poi_count"], 12)
|
|
self.assertEqual(payload["towns"][0]["bbox"], [107.8, 25.3, 107.9, 25.5])
|
|
self.assertIsInstance(payload["zones"][0]["geometry"], list)
|
|
self.assertEqual(payload["zones"][0]["poi_count"], 6)
|
|
|
|
def test_graph_detail_uses_embedded_json_images(self) -> None:
|
|
payload = _graph_poi_detail_payload(
|
|
"yunyou_libo_full_v2",
|
|
["ScenicSpot"],
|
|
{
|
|
"element_id": "amap:P1",
|
|
"gaode_poi_id": "P1",
|
|
"name": "小七孔",
|
|
"type_label": "景点",
|
|
"lng": 107.72,
|
|
"lat": 25.25,
|
|
"images": '[{"image_url":"https://example.com/a.jpg"}]',
|
|
"spatial_raw_data": '{"visitor_value":"世界遗产"}',
|
|
},
|
|
)
|
|
|
|
self.assertEqual(payload["visitor_value"], "世界遗产")
|
|
self.assertEqual(payload["photo_urls"], ["https://example.com/a.jpg"])
|
|
self.assertEqual(payload["graph_labels"], ["ScenicSpot"])
|
|
|
|
def test_normalized_bus_rows_build_ordered_route_payload(self) -> None:
|
|
rows = [
|
|
["r1", "荔波1路", "上行", "甲", "乙", 2, 2, "07:00", "18:00", 5, "station_sequence", "s1", "甲", 107.8, 25.3, 1],
|
|
["r1", "荔波1路", "上行", "甲", "乙", 2, 2, "07:00", "18:00", 5, "station_sequence", "s2", "乙", 107.9, 25.4, 2],
|
|
]
|
|
|
|
payload = _build_libo_bus_route_payload(rows, "yunyou_libo_full_v2")
|
|
|
|
self.assertEqual(payload["line_count"], 1)
|
|
self.assertEqual(payload["direction_count"], 1)
|
|
self.assertEqual(payload["stop_count"], 2)
|
|
self.assertEqual(payload["route_stop_count"], 2)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|