Files
ai-contract-platform/backend/tests/test_pilot_requests_api.py
T

166 lines
6.4 KiB
Python

import unittest
from fastapi.testclient import TestClient
from app.api.pilot_requests import get_pilot_request_service, require_current_user
from app.main import app
class StubPilotRequestService:
def submit_request(self, **kwargs):
return {
"id": "pilot-123",
"tenant_id": "tenant-demo-001",
"contact_name": kwargs["contact_name"],
"company_name": kwargs["company_name"],
"role_title": kwargs.get("role_title"),
"email": kwargs["email"],
"phone": kwargs.get("phone"),
"expected_contract_volume": kwargs.get("expected_contract_volume"),
"primary_goal": kwargs["primary_goal"],
"deployment_preference": kwargs.get("deployment_preference"),
"scenario_description": kwargs["scenario_description"],
"status": "new",
"source": "website",
"admin_notes": None,
"last_contact_at": None,
"created_at": "2026-05-12T00:00:00+00:00",
"updated_at": "2026-05-12T00:00:00+00:00",
}
def list_requests(self, current_user, page=1, page_size=20, status_value=None):
return {
"items": [
{
"id": "pilot-123",
"tenant_id": current_user["tenant_id"],
"contact_name": "张三",
"company_name": "示例企业",
"role_title": "法务负责人",
"email": "pilot@example.com",
"phone": "13800000000",
"expected_contract_volume": "每月 300 份",
"primary_goal": "contract_review",
"deployment_preference": "saas",
"scenario_description": "试点合同审查",
"status": status_value or "new",
"source": "website",
"admin_notes": None,
"last_contact_at": None,
"created_at": "2026-05-12T00:00:00+00:00",
"updated_at": "2026-05-12T00:00:00+00:00",
}
],
"total": 1,
"page": page,
"page_size": page_size,
}
def get_summary(self, current_user):
return {
"total": 1,
"counts": {"new": 1, "contacted": 0, "scheduled": 0, "closed": 0},
"latest_items": [
{
"id": "pilot-123",
"tenant_id": current_user["tenant_id"],
"contact_name": "张三",
"company_name": "示例企业",
"role_title": "法务负责人",
"email": "pilot@example.com",
"phone": "13800000000",
"expected_contract_volume": "每月 300 份",
"primary_goal": "contract_review",
"deployment_preference": "saas",
"scenario_description": "试点合同审查",
"status": "new",
"source": "website",
"admin_notes": None,
"last_contact_at": None,
"created_at": "2026-05-12T00:00:00+00:00",
"updated_at": "2026-05-12T00:00:00+00:00",
}
],
}
def update_request(self, current_user, request_id, status_value, admin_notes=None):
return {
"id": request_id,
"tenant_id": current_user["tenant_id"],
"contact_name": "张三",
"company_name": "示例企业",
"role_title": "法务负责人",
"email": "pilot@example.com",
"phone": "13800000000",
"expected_contract_volume": "每月 300 份",
"primary_goal": "contract_review",
"deployment_preference": "saas",
"scenario_description": "试点合同审查",
"status": status_value,
"source": "website",
"admin_notes": admin_notes,
"last_contact_at": "2026-05-12T01:00:00+00:00",
"created_at": "2026-05-12T00:00:00+00:00",
"updated_at": "2026-05-12T01:00:00+00:00",
}
class PilotRequestsApiTestCase(unittest.TestCase):
def setUp(self):
app.dependency_overrides[get_pilot_request_service] = lambda: StubPilotRequestService()
app.dependency_overrides[require_current_user] = lambda: {
"id": "user-admin",
"tenant_id": "tenant-demo-001",
"role": "admin",
}
self.client = TestClient(app)
def tearDown(self):
app.dependency_overrides.clear()
def test_submit_pilot_request(self):
response = self.client.post(
"/api/v1/pilot-requests",
json={
"contact_name": "张三",
"company_name": "示例企业",
"role_title": "法务负责人",
"email": "pilot@example.com",
"phone": "13800000000",
"expected_contract_volume": "每月 300 份",
"primary_goal": "contract_review",
"deployment_preference": "saas",
"scenario_description": "希望先验证合同审查和报告输出。",
},
)
self.assertEqual(response.status_code, 200)
body = response.json()
self.assertEqual(body["code"], 0)
self.assertEqual(body["data"]["id"], "pilot-123")
self.assertEqual(body["data"]["status"], "new")
def test_list_and_summary_pilot_requests(self):
list_response = self.client.get("/api/v1/pilot-requests", params={"status_value": "new"})
summary_response = self.client.get("/api/v1/pilot-requests/summary")
self.assertEqual(list_response.status_code, 200)
self.assertEqual(list_response.json()["data"]["total"], 1)
self.assertEqual(summary_response.status_code, 200)
self.assertEqual(summary_response.json()["data"]["counts"]["new"], 1)
def test_update_pilot_request(self):
response = self.client.put(
"/api/v1/pilot-requests/pilot-123",
json={"status": "scheduled", "admin_notes": "已约演示"},
)
self.assertEqual(response.status_code, 200)
body = response.json()
self.assertEqual(body["data"]["status"], "scheduled")
self.assertEqual(body["data"]["admin_notes"], "已约演示")
if __name__ == "__main__":
unittest.main()