feat: enhance calendar ICS generation with event type filtering
All checks were successful
CI / lint-and-test (push) Successful in 22s
All checks were successful
CI / lint-and-test (push) Successful in 22s
- Added support for filtering calendar events by type in the ICS generation API endpoint, allowing users to specify whether to include only duty shifts or all event types (duty, unavailable, vacation). - Updated the `get_duties_for_user` function to accept an optional `event_types` parameter, enabling more flexible data retrieval based on user preferences. - Enhanced unit tests to cover the new event type filtering functionality, ensuring correct behavior and reliability of the ICS generation process.
This commit is contained in:
@@ -7,9 +7,10 @@ from sqlalchemy.orm import sessionmaker
|
||||
from duty_teller.db.models import Base, User
|
||||
from duty_teller.db.repository import (
|
||||
delete_duties_in_range,
|
||||
get_duties,
|
||||
get_duties_for_user,
|
||||
get_or_create_user,
|
||||
get_or_create_user_by_full_name,
|
||||
get_duties,
|
||||
insert_duty,
|
||||
update_user_display_name,
|
||||
)
|
||||
@@ -113,6 +114,54 @@ def test_get_duties_includes_duty_starting_on_last_day_of_range(session, user_a)
|
||||
assert rows[0][1] == "User A"
|
||||
|
||||
|
||||
def test_get_duties_for_user_event_types_duty_returns_only_duty(session, user_a):
|
||||
"""get_duties_for_user(..., event_types=["duty"]) returns only duty records."""
|
||||
insert_duty(
|
||||
session,
|
||||
user_a.id,
|
||||
"2026-02-01T09:00:00Z",
|
||||
"2026-02-01T18:00:00Z",
|
||||
event_type="duty",
|
||||
)
|
||||
insert_duty(
|
||||
session,
|
||||
user_a.id,
|
||||
"2026-02-02T09:00:00Z",
|
||||
"2026-02-02T18:00:00Z",
|
||||
event_type="unavailable",
|
||||
)
|
||||
rows = get_duties_for_user(
|
||||
session, user_a.id, "2026-02-01", "2026-02-28", event_types=["duty"]
|
||||
)
|
||||
assert len(rows) == 1
|
||||
assert rows[0][0].event_type == "duty"
|
||||
assert rows[0][1] == "User A"
|
||||
|
||||
|
||||
def test_get_duties_for_user_event_types_none_returns_all(session, user_a):
|
||||
"""get_duties_for_user(..., event_types=None) returns duty and unavailable."""
|
||||
insert_duty(
|
||||
session,
|
||||
user_a.id,
|
||||
"2026-02-01T09:00:00Z",
|
||||
"2026-02-01T18:00:00Z",
|
||||
event_type="duty",
|
||||
)
|
||||
insert_duty(
|
||||
session,
|
||||
user_a.id,
|
||||
"2026-02-02T09:00:00Z",
|
||||
"2026-02-02T18:00:00Z",
|
||||
event_type="unavailable",
|
||||
)
|
||||
rows = get_duties_for_user(
|
||||
session, user_a.id, "2026-02-01", "2026-02-28", event_types=None
|
||||
)
|
||||
assert len(rows) == 2
|
||||
types = {rows[0][0].event_type, rows[1][0].event_type}
|
||||
assert types == {"duty", "unavailable"}
|
||||
|
||||
|
||||
def test_get_or_create_user_overwrites_name_when_flag_false(session):
|
||||
"""When name_manually_edited is False, second get_or_create_user overwrites name."""
|
||||
u1 = get_or_create_user(
|
||||
|
||||
Reference in New Issue
Block a user