61 lines
2.0 KiB
Python
61 lines
2.0 KiB
Python
|
|
"""集成测试共用工厂:客户 → 业务 → 明细的最小造数链。
|
|||
|
|
|
|||
|
|
回款/发货/业务三个测试文件此前各持一份逐字相同的工厂(口径漂移已经
|
|||
|
|
发生:同一 _customer 三份、payload 细节靠复制维持),收口后「t_ 前缀、
|
|||
|
|
默认明细行、业务日期取今日」单点维护;conftest 兜底清理按 t_ 前缀与
|
|||
|
|
YW/SH/HK 编号前缀覆盖本模块全部造数。
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
import uuid
|
|||
|
|
from datetime import date
|
|||
|
|
|
|||
|
|
from fastapi.testclient import TestClient
|
|||
|
|
|
|||
|
|
_CUSTOMERS = "/api/v1/base/customers"
|
|||
|
|
_BUSINESSES = "/api/v1/business/businesses"
|
|||
|
|
|
|||
|
|
|
|||
|
|
def customer(client: TestClient, headers: dict) -> dict:
|
|||
|
|
"""建一名 t_ 前缀测试客户(业务的必选引用)。"""
|
|||
|
|
resp = client.post(
|
|||
|
|
_CUSTOMERS,
|
|||
|
|
json={
|
|||
|
|
"company_name": f"t_公司_{uuid.uuid4().hex[:8]}",
|
|||
|
|
"owner_name": "张老板",
|
|||
|
|
"customer_type": "personal",
|
|||
|
|
},
|
|||
|
|
headers=headers,
|
|||
|
|
)
|
|||
|
|
assert resp.status_code == 200, resp.text
|
|||
|
|
return resp.json()["data"]
|
|||
|
|
|
|||
|
|
|
|||
|
|
def business_item(**overrides: object) -> dict:
|
|||
|
|
"""业务明细行入参(默认:数量 100 × 单价 100.00 = 销售额 10000)。"""
|
|||
|
|
body: dict = {
|
|||
|
|
"product_name": f"t_产品_{uuid.uuid4().hex[:8]}",
|
|||
|
|
"product_category": "municipal_water",
|
|||
|
|
"quantity": "100",
|
|||
|
|
"sale_price": "100.00",
|
|||
|
|
}
|
|||
|
|
body.update(overrides)
|
|||
|
|
return body
|
|||
|
|
|
|||
|
|
|
|||
|
|
def business_payload(customer_id: int, **overrides: object) -> dict:
|
|||
|
|
body: dict = {
|
|||
|
|
"customer_id": customer_id,
|
|||
|
|
"business_date": str(date.today()),
|
|||
|
|
"items": [business_item()],
|
|||
|
|
}
|
|||
|
|
body.update(overrides)
|
|||
|
|
return body
|
|||
|
|
|
|||
|
|
|
|||
|
|
def create_business(client: TestClient, headers: dict) -> dict:
|
|||
|
|
"""建一名 t_ 客户并挂一笔默认业务(发货/回款须先有业务)。"""
|
|||
|
|
cust = customer(client, headers)
|
|||
|
|
resp = client.post(_BUSINESSES, json=business_payload(cust["id"]), headers=headers)
|
|||
|
|
assert resp.status_code == 200, resp.text
|
|||
|
|
return resp.json()["data"]
|