Files
shanxia2.0/backend/tests/test_pl_driver_plan_service.py
2026-09-26 11:59:39 +08:00

81 lines
2.7 KiB
Python

# 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}