Files
Cloud-Tour-to-Libo/tests/test_plaza_graph_fallback.py
T

136 lines
4.9 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,
_resolve_spatial_graph_name,
)
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_city_place_nodes_use_place_type_as_dynamic_business_category(self) -> None:
items = _graph_map_poi_items(
[[
None,
["Place"],
{
"element_id": "city:mall-1",
"name": "测试商场",
"place_type": "mall",
"longitude": 106.63,
"latitude": 26.65,
"adcode": "520102",
},
]]
)
self.assertEqual(items[0]["category"], "商场")
self.assertEqual(items[0]["categories"], ["商场"])
self.assertEqual(items[0]["lng"], 106.63)
self.assertEqual(items[0]["adcode"], "520102")
def test_coordinate_helper_nodes_are_not_rendered_as_business_pois(self) -> None:
items = _graph_map_poi_items(
[[
"cell-1",
["GeoCell"],
{"name": "网格", "lng": 106.63, "lat": 26.65},
]]
)
self.assertEqual(items, [])
def test_legacy_city_project_uses_its_explicit_spatial_companion(self) -> None:
self.assertEqual(_resolve_spatial_graph_name("guiyang_new2"), "guiyang_spatial_v1")
self.assertEqual(_resolve_spatial_graph_name("city_import_v3"), "city_import_v3")
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()