Files
WonderQ-Project/WonderQ-Admin/tests/test_vehicle_demand.py
duanshuwen d42f69bd47 feat: 新增用车需求服务及线索管理全功能
- 新增后台用车服务配置模块,支持维护服务简介、优势与使用流程
- 新增需求线索管理页面,支持筛选、查看与更新用车线索状态
- 新增小程序用车需求页面,优化登录路径与回跳逻辑
- 优化车型卡片跳转与用车需求提交功能
- 新增服务端API与数据处理逻辑,完善权限校验
- 更新全站配置与API文档,新增相关测试用例
2026-08-22 21:48:08 +08:00

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"},
}