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

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()