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