Refine conference exploration day labels

This commit is contained in:
Edward Betts 2026-08-03 14:57:06 +01:00
parent 6a601f5c14
commit 8866b78202
2 changed files with 216 additions and 1 deletions

View file

@ -467,3 +467,153 @@ def test_trip_title_ignores_generated_drive_stop_labels() -> None:
)
assert trip.title == "St Ives"
def test_conference_free_days_ignores_morning_train_departure_after() -> None:
"""A morning train on the day after a conference leaves no explore day."""
trip = Trip(
start=date(2027, 1, 29),
conferences=[
{
"name": "FOSDEM",
"start": date(2027, 1, 30),
"end": date(2027, 1, 31),
}
],
travel=[
{
"type": "train",
"depart": datetime(2027, 2, 1, 8, 57, tzinfo=timezone.utc),
"arrive": datetime(2027, 2, 1, 9, 57, tzinfo=timezone.utc),
"legs": [
{
"depart": datetime(2027, 2, 1, 8, 57, tzinfo=timezone.utc),
"arrive": datetime(2027, 2, 1, 9, 57, tzinfo=timezone.utc),
}
],
}
],
)
assert agenda.trip.conference_free_days(trip)["2027-01-30"] == (1, 0)
def test_conference_free_days_ignores_afternoon_train_arrival_before() -> None:
"""An afternoon train on the day before a conference leaves no explore day."""
trip = Trip(
start=date(2027, 1, 29),
conferences=[
{
"name": "FOSDEM",
"start": date(2027, 1, 30),
"end": date(2027, 1, 31),
}
],
travel=[
{
"type": "train",
"depart": datetime(2027, 1, 29, 13, 4, tzinfo=timezone.utc),
"arrive": datetime(2027, 1, 29, 16, 5, tzinfo=timezone.utc),
"legs": [
{
"depart": datetime(2027, 1, 29, 13, 4, tzinfo=timezone.utc),
"arrive": datetime(2027, 1, 29, 16, 5, tzinfo=timezone.utc),
}
],
}
],
)
assert agenda.trip.conference_free_days(trip)["2027-01-30"] == (0, 0)
def test_conference_free_days_keeps_morning_train_arrival_before() -> None:
"""A morning train arrival still leaves the afternoon to explore."""
trip = Trip(
start=date(2027, 1, 29),
conferences=[
{
"name": "FOSDEM",
"start": date(2027, 1, 30),
"end": date(2027, 1, 31),
}
],
travel=[
{
"type": "train",
"depart": datetime(2027, 1, 29, 8, 0, tzinfo=timezone.utc),
"arrive": datetime(2027, 1, 29, 11, 30, tzinfo=timezone.utc),
}
],
)
assert agenda.trip.conference_free_days(trip)["2027-01-30"] == (1, 0)
def test_conference_free_days_keeps_date_only_arrival_before() -> None:
"""Date-only travel should not be treated as a known afternoon arrival."""
trip = Trip(
start=date(2027, 1, 29),
conferences=[
{
"name": "FOSDEM",
"start": date(2027, 1, 30),
"end": date(2027, 1, 31),
}
],
travel=[
{
"type": "train",
"depart": date(2027, 1, 29),
"arrive": date(2027, 1, 29),
}
],
)
assert agenda.trip.conference_free_days(trip)["2027-01-30"] == (1, 0)
def test_conference_free_days_keeps_afternoon_train_departure_after() -> None:
"""An afternoon train still leaves the morning to explore."""
trip = Trip(
start=date(2027, 1, 29),
conferences=[
{
"name": "FOSDEM",
"start": date(2027, 1, 30),
"end": date(2027, 1, 31),
}
],
travel=[
{
"type": "train",
"depart": datetime(2027, 2, 1, 13, 4, tzinfo=timezone.utc),
"arrive": datetime(2027, 2, 1, 16, 5, tzinfo=timezone.utc),
}
],
)
assert agenda.trip.conference_free_days(trip)["2027-01-30"] == (1, 1)
def test_conference_free_days_keeps_date_only_departure_after() -> None:
"""Date-only travel should not be treated as a known morning departure."""
trip = Trip(
start=date(2027, 1, 29),
conferences=[
{
"name": "FOSDEM",
"start": date(2027, 1, 30),
"end": date(2027, 1, 31),
}
],
travel=[
{
"type": "train",
"depart": date(2027, 2, 1),
"arrive": date(2027, 2, 1),
}
],
)
assert agenda.trip.conference_free_days(trip)["2027-01-30"] == (1, 1)