- tests/integration/factories.py:回款/发货两文件逐字重复的 _customer/_bitem/_bpayload/_create_business 上提(t_ 前缀与默认行 口径单点维护);test_audit_retry 的持续冲突断言由 500 更新为 400「数据完整性冲突」——全局 IntegrityError handler(批 6)收敛 行为属预期改进,非回归 - param_service.submit_change 拆出 _normalize_items(校验段独立, 主函数降至 50 行约定内);e2e 六个列表页 helper 收口 common.py (base_data 版为准:分组参数化、:text-is 精确匹配),两脚本变薄 - 全量回归 625 passed(基线 603 + 新增 22);e2e 四链路(登录 8/ 系统管理 13/基础数据 13/业务 16)全过 - 测试 README 补 2026-10-15 运行记录与 10 条评审缺陷(预览千分比/ 审计假成功/字典序 MAX/无锁编辑/删产品 500/schema 口径/quantize/ 负天数外插/评级并发/大小写不对称) Co-Authored-By: Claude Code <noreply@anthropic.com>
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"]
|