from datetime import datetime from fastapi.testclient import TestClient from app.auth import optional_customer from app.database import get_db from app.main import create_app from app.models import Customer, Lead class FakeDb: def __init__(self): self.added = [] self.committed = False def add(self, item): self.added.append(item) def commit(self): self.committed = True def refresh(self, item): if not item.id: item.id = "lead-vehicle-test" def test_vehicle_lead_requires_customer_token(): db = FakeDb() app = create_app() app.dependency_overrides[get_db] = lambda: db app.dependency_overrides[optional_customer] = lambda: None try: response = TestClient(app).post( "/api/public/leads", json={ "leadType": "vehicle", "phone": "13800000000", "vehicleDemand": { "serviceType": "transfer", "travelDate": "2026-08-25", "pickupLocation": "贵阳北站", "dropoffLocation": "黄果树景区", "peopleCount": 5, }, }, ) finally: app.dependency_overrides.clear() assert response.status_code == 401 assert response.json()["data"] is None def test_vehicle_lead_persists_customer_and_summary_fields(): db = FakeDb() customer = Customer(id="customer-test", phone="13800000000") app = create_app() app.dependency_overrides[get_db] = lambda: db app.dependency_overrides[optional_customer] = lambda: customer try: response = TestClient(app).post( "/api/public/leads", json={ "leadType": "vehicle", "contactName": "Damon", "phone": "13800000000", "note": "需要儿童座椅", "sourcePage": "home-vehicle", "vehicleDemand": { "serviceType": "charter", "charterDuration": "fullDay", "travelDate": "2026-08-25", "pickupTime": "09:00", "pickupLocation": "贵阳北站", "dropoffLocation": "黄果树景区", "peopleCount": 5, "luggageCount": 3, "vehicleOptionId": "vehicle-option-1", "vehicleOptionTitle": "多人商务车", "specialRequirements": "需要儿童座椅", }, }, ) finally: app.dependency_overrides.clear() assert response.status_code == 201 lead = next(item for item in db.added if isinstance(item, Lead)) assert lead.customerId == "customer-test" assert lead.destination == "黄果树景区" assert lead.peopleCount == 5 assert lead.travelDate == datetime(2026, 8, 25) assert lead.vehicleDemand["vehicleOptionTitle"] == "多人商务车" assert response.json() == { "code": 201, "msg": "success", "data": {"id": lead.id, "status": "new"}, }