- 新增后台用车服务配置模块,支持维护服务简介、优势与使用流程 - 新增需求线索管理页面,支持筛选、查看与更新用车线索状态 - 新增小程序用车需求页面,优化登录路径与回跳逻辑 - 优化车型卡片跳转与用车需求提交功能 - 新增服务端API与数据处理逻辑,完善权限校验 - 更新全站配置与API文档,新增相关测试用例
99 lines
3.1 KiB
Python
99 lines
3.1 KiB
Python
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"},
|
|
}
|