agenda/tests/test_school_holiday.py

50 lines
1.5 KiB
Python

"""Tests for UK school holiday parsing."""
from __future__ import annotations
import datetime
from pathlib import Path
from agenda import uk_school_holiday
def test_parse_school_holidays_from_ics() -> None:
"""Parse holiday ranges and skip bank-holiday events."""
ics_text = """BEGIN:VCALENDAR
BEGIN:VEVENT
DTSTART;VALUE=DATE:20260525
DTEND;VALUE=DATE:20260601
SUMMARY;LANGUAGE=en-gb:Half Term Holiday (Bristol notes)
END:VEVENT
BEGIN:VEVENT
DTSTART;VALUE=DATE:20260831
DTEND;VALUE=DATE:20260901
SUMMARY;LANGUAGE=en-gb:Summer Bank Holiday
END:VEVENT
END:VCALENDAR
"""
parsed = uk_school_holiday.parse_school_holidays_from_ics(ics_text)
assert len(parsed) == 1
assert parsed[0].name == "uk_school_holiday"
assert parsed[0].title == "Half Term Holiday"
assert parsed[0].as_date == datetime.date(2026, 5, 25)
assert parsed[0].end_as_date == datetime.date(2026, 5, 31)
def test_school_holiday_list_filters_overlap(tmp_path: Path) -> None:
"""Filter cached school holiday ranges by overlap."""
filename = uk_school_holiday.json_filename(str(tmp_path))
with open(filename, "w", encoding="utf-8") as out:
out.write(
'[{"name":"uk_school_holiday","title":"Easter Holiday",'
'"start":"2026-04-01","end":"2026-04-12","url":""}]'
)
events = uk_school_holiday.school_holiday_list(
datetime.date(2026, 4, 10),
datetime.date(2026, 4, 20),
str(tmp_path),
)
assert len(events) == 1
assert events[0].title == "Easter Holiday"