From d9b08f3e5bcc4235d98d398bf36725e93111ad8c Mon Sep 17 00:00:00 2001 From: Edward Betts Date: Sat, 7 Mar 2026 13:25:56 +0000 Subject: [PATCH] Handle date-only transport times in trip page template --- templates/trip_page.html | 8 +++-- tests/test_trip_page_route.py | 67 ++++++++++++++++++++++++++++++++++- 2 files changed, 72 insertions(+), 3 deletions(-) diff --git a/templates/trip_page.html b/templates/trip_page.html index 0e3f80c..6b51dee 100644 --- a/templates/trip_page.html +++ b/templates/trip_page.html @@ -281,7 +281,9 @@ {% set item = e.detail %} {% set full_flight_number = item.airline_code + item.flight_number %} {% set radarbox_url = "https://www.radarbox.com/data/flights/" + full_flight_number %} - {% set is_overnight = item.arrive and item.depart.date() != item.arrive.date() %} + {% set depart_date = item.depart.date() if item.depart.hour is defined else item.depart %} + {% set arrive_date = item.arrive.date() if (item.arrive and item.arrive.hour is defined) else item.arrive %} + {% set is_overnight = item.arrive and depart_date != arrive_date %}
@@ -317,7 +319,9 @@ {% elif e.element_type == "train" %} {% set item = e.detail %} - {% set is_overnight = item.depart.date() != item.arrive.date() %} + {% set depart_date = item.depart.date() if item.depart.hour is defined else item.depart %} + {% set arrive_date = item.arrive.date() if item.arrive.hour is defined else item.arrive %} + {% set is_overnight = depart_date != arrive_date %}
diff --git a/tests/test_trip_page_route.py b/tests/test_trip_page_route.py index db7abb4..d471caa 100644 --- a/tests/test_trip_page_route.py +++ b/tests/test_trip_page_route.py @@ -1,4 +1,4 @@ -"""Regression tests for trip page route wiring.""" +"""Regression tests for trip page route wiring and rendering.""" from datetime import date import typing @@ -64,3 +64,68 @@ def test_trip_page_passes_data_dir_to_unbooked_flight_helper() -> None: ) web_view.agenda.weather.get_trip_weather = original_get_trip_weather web_view.flask.render_template = original_render_template + + +def test_trip_page_renders_with_date_only_train_leg() -> None: + """Trip page should render when train legs use date values (no time).""" + trip = Trip( + start=date(2025, 1, 28), + travel=[ + { + "type": "train", + "depart": date(2025, 1, 28), + "from": "A", + "to": "B", + "from_station": { + "name": "A", + "country": "gb", + "latitude": 51.5, + "longitude": -0.1, + }, + "to_station": { + "name": "B", + "country": "gb", + "latitude": 51.6, + "longitude": -0.2, + }, + "legs": [ + { + "from": "A", + "to": "B", + "depart": date(2025, 1, 28), + "arrive": date(2025, 1, 28), + "from_station": { + "name": "A", + "country": "gb", + "latitude": 51.5, + "longitude": -0.1, + }, + "to_station": { + "name": "B", + "country": "gb", + "latitude": 51.6, + "longitude": -0.2, + }, + "operator": "Test Rail", + } + ], + } + ], + ) + + with web_view.app.app_context(): + original_get_trip_list = web_view.get_trip_list + original_get_trip_weather = web_view.agenda.weather.get_trip_weather + try: + web_view.get_trip_list = lambda: [trip] + web_view.agenda.weather.get_trip_weather = lambda *_args, **_kwargs: [] + web_view.app.config["TESTING"] = True + + with web_view.app.test_client() as client: + response = client.get("/trip/2025-01-28") + + assert response.status_code == 200 + assert b"Test Rail" in response.data + finally: + web_view.get_trip_list = original_get_trip_list + web_view.agenda.weather.get_trip_weather = original_get_trip_weather