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