| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- # backend/tests/test_pl_driver_plan_service.py
- from datetime import date, datetime
- from app.api.pl.public_transport import _history_matches_date
- from app.services.pl_driver_plan_service import transport_visible_to_personnel
- from app.services.pl_public_transport_helpers import (
- _accumulate_calendar_day_counts,
- _parse_calendar_month,
- _plan_hit_dates,
- )
- def test_history_date_or_logic():
- day = date(2026, 9, 13)
- assert _history_matches_date(datetime(2026, 9, 13, 9, 0), None, day) is True
- assert _history_matches_date(None, datetime(2026, 9, 13, 18, 0), day) is True
- assert (
- _history_matches_date(
- datetime(2026, 9, 12, 9, 0), datetime(2026, 9, 14, 18, 0), day
- )
- is False
- )
- def test_visible_as_driver_or_escort():
- class T:
- def __init__(self, driver_id=None, escort_id=None):
- self.driver_id = driver_id
- self.escort_id = escort_id
- assert transport_visible_to_personnel(T(driver_id="p1"), "p1") is True
- assert transport_visible_to_personnel(T(escort_id="p1"), "p1") is True
- assert transport_visible_to_personnel(T(driver_id="p2", escort_id="p3"), "p1") is False
- assert transport_visible_to_personnel(T(), "p1") is False
- assert transport_visible_to_personnel(T(driver_id="p1"), "") is False
- def test_parse_calendar_month_ok():
- start, end = _parse_calendar_month("2026-09")
- assert start == date(2026, 9, 1)
- assert end == date(2026, 9, 30)
- def test_parse_calendar_month_rejects_bad():
- assert _parse_calendar_month("") is None
- assert _parse_calendar_month("2026-9") is None
- assert _parse_calendar_month("2026-13") is None
- def test_plan_hit_dates_driver_style_excludes_plan_date():
- class P:
- plan_date = date(2026, 9, 1)
- pickup_time = datetime(2026, 9, 10, 8, 0)
- delivery_time = datetime(2026, 9, 12, 18, 0)
- assert _plan_hit_dates(P(), include_plan_date=False) == {
- date(2026, 9, 10),
- date(2026, 9, 12),
- }
- def test_accumulate_calendar_day_counts_within_month():
- class P:
- def __init__(self, pickup, delivery, plan_date=None):
- self.plan_date = plan_date
- self.pickup_time = pickup
- self.delivery_time = delivery
- plans = [
- P(datetime(2026, 9, 10, 8, 0), datetime(2026, 9, 12, 18, 0)),
- P(datetime(2026, 9, 10, 9, 0), None),
- P(datetime(2026, 8, 31, 8, 0), datetime(2026, 9, 1, 18, 0)),
- ]
- counts = _accumulate_calendar_day_counts(
- plans,
- month_start=date(2026, 9, 1),
- month_end=date(2026, 9, 30),
- include_plan_date=False,
- )
- assert counts == {"2026-09-01": 1, "2026-09-10": 2, "2026-09-12": 1}
|