Show inferred Bristol rail leg for Eurostar trips
This commit is contained in:
parent
ea80166229
commit
6a601f5c14
4 changed files with 299 additions and 36 deletions
|
|
@ -6,7 +6,7 @@ from datetime import date, datetime, timezone
|
|||
|
||||
import agenda.trip
|
||||
import pytest
|
||||
from agenda.types import Trip
|
||||
from agenda.types import StrDict, Trip
|
||||
from web_view import app
|
||||
|
||||
|
||||
|
|
@ -171,6 +171,150 @@ def test_get_trip_routes_assumes_unbooked_paris_trip_is_by_train(
|
|||
]
|
||||
|
||||
|
||||
def test_get_trip_routes_adds_bristol_feeder_for_london_eurostar(
|
||||
monkeypatch: pytest.MonkeyPatch,
|
||||
) -> None:
|
||||
"""Booked London Eurostar trips should show the assumed Bristol rail feeder."""
|
||||
london_st_pancras = {
|
||||
"name": "London St Pancras",
|
||||
"latitude": 51.531921,
|
||||
"longitude": -0.126361,
|
||||
"routes": {"Paris Gare du Nord": "London_St_Pancras_to_Paris_Gare_du_Nord"},
|
||||
}
|
||||
paris_gare_du_nord = {
|
||||
"name": "Paris Gare du Nord",
|
||||
"latitude": 48.88111111111111,
|
||||
"longitude": 2.355277777777778,
|
||||
"routes": {"London St Pancras": "London_St_Pancras_to_Paris_Gare_du_Nord"},
|
||||
}
|
||||
bristol_temple_meads = {
|
||||
"name": "Bristol Temple Meads",
|
||||
"latitude": 51.449,
|
||||
"longitude": -2.581,
|
||||
"routes": {"London Paddington": "gwml"},
|
||||
}
|
||||
london_paddington = {
|
||||
"name": "London Paddington",
|
||||
"latitude": 51.516,
|
||||
"longitude": -0.176,
|
||||
"routes": {"Bristol Temple Meads": "gwml"},
|
||||
}
|
||||
trip = Trip(
|
||||
start=date(2026, 7, 20),
|
||||
travel=[
|
||||
{
|
||||
"type": "train",
|
||||
"from": "London St Pancras",
|
||||
"to": "Paris Gare du Nord",
|
||||
"operator": "Eurostar",
|
||||
"from_station": london_st_pancras,
|
||||
"to_station": paris_gare_du_nord,
|
||||
"legs": [
|
||||
{
|
||||
"from": "London St Pancras",
|
||||
"to": "Paris Gare du Nord",
|
||||
"operator": "Eurostar",
|
||||
"from_station": london_st_pancras,
|
||||
"to_station": paris_gare_du_nord,
|
||||
}
|
||||
],
|
||||
}
|
||||
],
|
||||
)
|
||||
stations = [
|
||||
london_st_pancras,
|
||||
paris_gare_du_nord,
|
||||
bristol_temple_meads,
|
||||
london_paddington,
|
||||
]
|
||||
|
||||
def fake_parse_yaml(name: str, data_dir: str) -> object:
|
||||
if name == "stations":
|
||||
return stations
|
||||
raise AssertionError(f"unexpected YAML load: {name}")
|
||||
|
||||
monkeypatch.setattr(agenda.trip.travel, "parse_yaml", fake_parse_yaml)
|
||||
|
||||
routes = agenda.trip.get_trip_routes(trip, "/tmp/personal-data")
|
||||
|
||||
assert routes == [
|
||||
{
|
||||
"type": "train",
|
||||
"key": "train_Bristol Temple Meads_London Paddington",
|
||||
"geojson_filename": "train_routes/gwml",
|
||||
},
|
||||
{
|
||||
"type": "train",
|
||||
"key": "train_London St Pancras_Paris Gare du Nord",
|
||||
"geojson_filename": "train_routes/London_St_Pancras_to_Paris_Gare_du_Nord",
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
def test_add_coordinates_for_eurostar_home_feeder_adds_bristol_station(
|
||||
monkeypatch: pytest.MonkeyPatch,
|
||||
) -> None:
|
||||
"""London Eurostar trips should get an assumed Bristol station pin."""
|
||||
london_st_pancras = {
|
||||
"name": "London St Pancras",
|
||||
"latitude": 51.531921,
|
||||
"longitude": -0.126361,
|
||||
}
|
||||
paris_gare_du_nord = {
|
||||
"name": "Paris Gare du Nord",
|
||||
"latitude": 48.88111111111111,
|
||||
"longitude": 2.355277777777778,
|
||||
}
|
||||
bristol_temple_meads = {
|
||||
"name": "Bristol Temple Meads",
|
||||
"latitude": 51.449,
|
||||
"longitude": -2.581,
|
||||
}
|
||||
trip = Trip(
|
||||
start=date(2026, 7, 20),
|
||||
travel=[
|
||||
{
|
||||
"type": "train",
|
||||
"from": "London St Pancras",
|
||||
"to": "Paris Gare du Nord",
|
||||
"operator": "Eurostar",
|
||||
"from_station": london_st_pancras,
|
||||
"to_station": paris_gare_du_nord,
|
||||
"legs": [
|
||||
{
|
||||
"from": "London St Pancras",
|
||||
"to": "Paris Gare du Nord",
|
||||
"operator": "Eurostar",
|
||||
"from_station": london_st_pancras,
|
||||
"to_station": paris_gare_du_nord,
|
||||
}
|
||||
],
|
||||
}
|
||||
],
|
||||
)
|
||||
|
||||
def fake_parse_yaml(name: str, data_dir: str) -> object:
|
||||
if name == "stations":
|
||||
return [london_st_pancras, paris_gare_du_nord, bristol_temple_meads]
|
||||
raise AssertionError(f"unexpected YAML load: {name}")
|
||||
|
||||
monkeypatch.setattr(agenda.trip.travel, "parse_yaml", fake_parse_yaml)
|
||||
|
||||
coordinates: list[StrDict] = []
|
||||
agenda.trip.add_coordinates_for_eurostar_home_feeder(
|
||||
trip, coordinates, "/tmp/personal-data"
|
||||
)
|
||||
|
||||
assert coordinates == [
|
||||
{
|
||||
"name": "Bristol Temple Meads",
|
||||
"type": "station",
|
||||
"latitude": 51.449,
|
||||
"longitude": -2.581,
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
def test_load_cars_infers_route_labels_and_home_marker(
|
||||
tmp_path: pathlib.Path,
|
||||
) -> None:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue