50 lines
1.5 KiB
Python
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"
|