94 lines
2.8 KiB
Python
94 lines
2.8 KiB
Python
# backend/tests/test_pl_transport_site_service.py
|
|
from datetime import date, datetime
|
|
from unittest.mock import MagicMock
|
|
|
|
from app.services.pl_public_transport_helpers import (
|
|
_accumulate_calendar_day_counts,
|
|
_parse_calendar_month,
|
|
_parse_history_date,
|
|
_plan_hit_dates,
|
|
)
|
|
from app.services.pl_site_plan_service import (
|
|
build_site_page_for_plan,
|
|
plan_matches_history_day,
|
|
resolve_transport_for_plan,
|
|
)
|
|
|
|
|
|
def test_parse_history_date_accepts_iso():
|
|
assert _parse_history_date("2026-09-13") == date(2026, 9, 13)
|
|
|
|
|
|
def test_parse_history_date_rejects_bad():
|
|
assert _parse_history_date("13/09/2026") is None
|
|
assert _parse_history_date("") is None
|
|
|
|
|
|
def test_plan_day_match_helpers():
|
|
day = date(2026, 9, 13)
|
|
|
|
class P:
|
|
def __init__(self, plan_date=None, pickup_time=None, delivery_time=None):
|
|
self.plan_date = plan_date
|
|
self.pickup_time = pickup_time
|
|
self.delivery_time = delivery_time
|
|
|
|
assert plan_matches_history_day(P(plan_date=day), day) is True
|
|
assert plan_matches_history_day(
|
|
P(pickup_time=datetime(2026, 9, 13, 8, 0, 0)), day
|
|
) is True
|
|
assert plan_matches_history_day(
|
|
P(delivery_time=datetime(2026, 9, 12, 18, 0, 0)), day
|
|
) is False
|
|
|
|
|
|
def test_plan_hit_dates_site_style_includes_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=True) == {
|
|
date(2026, 9, 1),
|
|
date(2026, 9, 10),
|
|
date(2026, 9, 12),
|
|
}
|
|
|
|
|
|
def test_accumulate_site_calendar_counts_include_plan_date():
|
|
class P:
|
|
def __init__(self, plan_date=None, pickup=None, delivery=None):
|
|
self.plan_date = plan_date
|
|
self.pickup_time = pickup
|
|
self.delivery_time = delivery
|
|
|
|
plans = [
|
|
P(plan_date=date(2026, 9, 5), pickup=datetime(2026, 9, 10, 8, 0)),
|
|
P(plan_date=date(2026, 9, 5)),
|
|
]
|
|
counts = _accumulate_calendar_day_counts(
|
|
plans,
|
|
month_start=date(2026, 9, 1),
|
|
month_end=date(2026, 9, 30),
|
|
include_plan_date=True,
|
|
)
|
|
assert counts == {"2026-09-05": 2, "2026-09-10": 1}
|
|
|
|
|
|
def test_resolve_transport_for_plan_missing_plan():
|
|
db = MagicMock()
|
|
db.query.return_value.filter.return_value.first.return_value = None
|
|
plan, transport = resolve_transport_for_plan(
|
|
db, tenant_no="t1", plan_id="missing"
|
|
)
|
|
assert plan is None
|
|
assert transport is None
|
|
|
|
|
|
def test_build_site_page_for_plan_missing_plan():
|
|
db = MagicMock()
|
|
db.query.return_value.filter.return_value.first.return_value = None
|
|
page, err = build_site_page_for_plan(db, tenant_no="t1", plan_id="missing")
|
|
assert page is None
|
|
assert err == "计划不存在"
|