PayrollManagementSystem/backend/tests/unit/test_business_readiness_list.py
liuwenxin 1e53792ad6 feat(T+): 完成数据贯通与自动接入闭环
打通 T+ 快照、业务、发货、回款和核算准备链路,保留来源差异并提供待补状态。
新增业务自动接入任务、跨平台读取服务托管、权限复核、来源关联和前端核对页面。
补充迁移、隔离集成测试、浏览器模拟验收及角色授权边界修复。
2026-11-05 18:47:13 +08:00

32 lines
1.5 KiB
Python

"""业务列表按照核算准备结果筛选时保持准确分页。"""
from types import SimpleNamespace
from app.schemas.business import BusinessOut, BusinessQuery
from app.services import business_service, business_source
def test_准备原因筛选跨批次分页并按实际状态计数(monkeypatch):
rows = [(SimpleNamespace(id=i, integration_json={"source_database": "test"}),)
for i in range(105, 0, -1)]
def scan(_session, _query, before_id, limit=100):
return [row for row in rows if before_id is None or row[0].id < before_id][:limit]
def summaries(_session, businesses, *, snapshot_cache=None):
return {row.id: {"status": "PENDING" if row.id % 2 else "READY",
"reasons": ([{"code": "GUIDANCE_PENDING", "message": "指导成本待补"}]
if row.id % 2 else [])} for row in businesses}
monkeypatch.setattr(business_service.business_repository, "scan_businesses", scan)
monkeypatch.setattr(business_source, "readiness_summaries", summaries)
monkeypatch.setattr(business_service, "_to_out", lambda row: BusinessOut(
id=row[0].id, business_no=str(row[0].id), customer_id=1))
result = business_service.list_businesses(None, BusinessQuery(
pageNum=3, pageSize=10, readiness_reason="GUIDANCE_PENDING", pending_only=True))
assert result.total == 53
assert [row.id for row in result.records] == list(range(65, 45, -2))
assert all(row.readiness_status == "PENDING" for row in result.records)