feat: add team calendar ICS endpoint and related functionality
All checks were successful
CI / lint-and-test (push) Successful in 23s
All checks were successful
CI / lint-and-test (push) Successful in 23s
- Implemented a new API endpoint to generate an ICS calendar for team duty shifts, accessible via a valid token. - Enhanced the `calendar_link` command to return both personal and team calendar URLs. - Added a new function to build the team ICS file, ensuring each event includes the duty holder's name in the description. - Updated tests to cover the new team calendar functionality, including validation for token formats and response content. - Revised internationalization messages to reflect the new team calendar links.
This commit is contained in:
@@ -4,7 +4,7 @@ from types import SimpleNamespace
|
||||
|
||||
from icalendar import Calendar as ICalendar
|
||||
|
||||
from duty_teller.api.personal_calendar_ics import build_personal_ics
|
||||
from duty_teller.api.personal_calendar_ics import build_personal_ics, build_team_ics
|
||||
|
||||
|
||||
# Minimal Duty-like object for build_personal_ics(duties_with_name: list[tuple[Duty, str]])
|
||||
@@ -45,6 +45,22 @@ def test_build_personal_ics_one_duty():
|
||||
assert b"duty-1@duty-teller" in ics or "duty-1@duty-teller" in ics.decode("utf-8")
|
||||
|
||||
|
||||
def test_build_team_ics_vevent_has_description_with_full_name():
|
||||
"""Team ICS VEVENT includes DESCRIPTION with the duty holder's full_name."""
|
||||
duties = [
|
||||
_duty(1, "2025-02-20T09:00:00Z", "2025-02-20T18:00:00Z", "duty"),
|
||||
]
|
||||
ics = build_team_ics(duties)
|
||||
cal = ICalendar.from_ical(ics)
|
||||
assert cal is not None
|
||||
events = [c for c in cal.walk() if c.name == "VEVENT"]
|
||||
assert len(events) == 1
|
||||
ev = events[0]
|
||||
assert ev.get("summary") == "Duty"
|
||||
assert ev.get("description") == "Test User"
|
||||
assert b"Team Calendar" in ics or "Team Calendar" in ics.decode("utf-8")
|
||||
|
||||
|
||||
def test_build_personal_ics_event_types():
|
||||
"""Unavailable and vacation get correct SUMMARY."""
|
||||
duties = [
|
||||
|
||||
Reference in New Issue
Block a user