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

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 == "计划不存在"