ab / tests /test_route_parser.py
hoangrimo's picture
Improve itinerary parser and train routes
f8fb4f8
Raw
History Blame Contribute Delete
2.84 kB
from __future__ import annotations
import sys
import unittest
from pathlib import Path
APP_ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(APP_ROOT))
from modules.route_parser import parse_route_text # noqa: E402
class RouteParserTests(unittest.TestCase):
def test_arrival_departure_metadata_does_not_create_fake_leg(self):
parsed = parse_route_text("Arriv\u00e9e: Ha Noi / D\u00e9part: Hoi An")
self.assertEqual(parsed["legs"], [])
self.assertEqual(parsed["arrival"], "Ha Noi")
self.assertEqual(parsed["departure"], "Hoi An")
self.assertEqual(parsed["pending"], [])
def test_airport_arrival_metadata_only(self):
parsed = parse_route_text("Jour 1: Arriv\u00e9e \u00e0 l'a\u00e9roport de Noi Bai - Ha Noi")
self.assertEqual(parsed["legs"], [])
self.assertEqual(parsed["arrival"], "Ha Noi")
self.assertIsNone(parsed["departure"])
self.assertEqual(parsed["pending"], [])
def test_segment_modes_on_same_line(self):
parsed = parse_route_text("Jour 6: Ha Long - Ha Noi (car) - Hue (flight)")
self.assertEqual(
parsed["legs"],
[
{"a": "Ha Long", "b": "Ha Noi", "mode": "car"},
{"a": "Ha Noi", "b": "Hue", "mode": "plane"},
],
)
def test_ferry_is_boat(self):
parsed = parse_route_text("Jour 5: Rach Gia ferry to Phu Quoc")
self.assertEqual(parsed["legs"], [{"a": "Rach Gia", "b": "Phu Quoc", "mode": "boat"}])
self.assertEqual(parsed["pending"], [])
def test_speedboat_is_boat_mode(self):
parsed = parse_route_text("Jour 8: Con Dao - Phu Quoc by speedboat")
self.assertEqual(parsed["legs"], [{"a": "Con Dao", "b": "Phu Quoc", "mode": "boat"}])
self.assertEqual(parsed["pending"], [])
def test_mai_hich_alias_resolves_to_mai_chau(self):
parsed = parse_route_text("Jour 2: Ha Noi - Mai Hich - Pu Luong")
self.assertEqual(
parsed["legs"],
[
{"a": "Ha Noi", "b": "Mai Chau", "mode": "car"},
{"a": "Mai Chau", "b": "Pu Luong", "mode": "car"},
],
)
def test_long_unlabeled_leg_falls_back_to_plane(self):
parsed = parse_route_text("Jour 7: Can Tho - Ha Noi")
self.assertEqual(parsed["legs"], [{"a": "Can Tho", "b": "Ha Noi", "mode": "plane"}])
def test_flight_phrase_only_applies_to_following_leg(self):
parsed = parse_route_text("Jour 3: Ha Long - Ha Noi & Vol pour Hue")
self.assertEqual(
parsed["legs"],
[
{"a": "Ha Long", "b": "Ha Noi", "mode": "car"},
{"a": "Ha Noi", "b": "Hue", "mode": "plane"},
],
)
if __name__ == "__main__":
unittest.main()