```
feat: 添加仪表板路由和响应数据脱敏功能 - 添加了仪表板模块路由并集成到主路由器中 - 实现了敏感数据响应脱敏配置和功能 - 增加了 Feishu 审批卡片操作处理功能 - 支持通过任务队列异步推送日常简报和项目周报 - 添加了风险事件生成的任务队列支持 - 在 smoke 测试中增加了相关功能验证 refactor: 格式化模型注册模块导入列表 - 将单行导入列表改为多行格式以提高可读性 ```
This commit is contained in:
@@ -199,6 +199,34 @@ def test_config_and_pagination_guardrails() -> None:
|
||||
assert negative_offset_response.status_code == 422
|
||||
|
||||
|
||||
def test_dashboard_and_response_masking() -> None:
|
||||
expense_response = client.post(
|
||||
"/api/v1/business/expenses",
|
||||
headers=headers,
|
||||
json={
|
||||
"data": {
|
||||
"code": "EXP-MASK-001",
|
||||
"expense_type": "办公",
|
||||
"amount": 20,
|
||||
"payment_account": "6222000000000000",
|
||||
},
|
||||
},
|
||||
)
|
||||
assert expense_response.status_code == 200
|
||||
|
||||
masked_response = client.get("/api/v1/business/expenses", headers=headers)
|
||||
assert masked_response.status_code == 200
|
||||
masked_items = masked_response.json()["items"]
|
||||
assert any(item["code"] == "EXP-MASK-001" for item in masked_items)
|
||||
assert next(
|
||||
item["payment_account"] for item in masked_items if item["code"] == "EXP-MASK-001"
|
||||
) == "[MASKED]"
|
||||
|
||||
dashboard_response = client.get("/api/v1/dashboard/summary", headers=headers)
|
||||
assert dashboard_response.status_code == 200
|
||||
assert "metrics" in dashboard_response.json()
|
||||
|
||||
|
||||
def test_approval_gate_for_high_risk_update() -> None:
|
||||
create_payload = {
|
||||
"code": "FUND-SMOKE-001",
|
||||
@@ -359,6 +387,40 @@ def test_approval_gate_for_high_risk_update() -> None:
|
||||
assert reuse_update_response.status_code == 403
|
||||
|
||||
|
||||
def test_feishu_approval_card_action_approves_ticket() -> None:
|
||||
approval_response = client.post(
|
||||
"/api/v1/approvals",
|
||||
headers=headers,
|
||||
json={
|
||||
"domain": "fund-accounts",
|
||||
"record_id": "feishu-card-test",
|
||||
"action": "update:fund-accounts",
|
||||
"reason": "Card action smoke test",
|
||||
"payload": {"current_balance": 300},
|
||||
},
|
||||
)
|
||||
assert approval_response.status_code == 200
|
||||
ticket_id = approval_response.json()["ticket_id"]
|
||||
|
||||
callback_response = client.post(
|
||||
"/api/v1/integrations/feishu/approval-card-action",
|
||||
json={
|
||||
"token": "test-feishu-token",
|
||||
"operator": {"operator_id": {"open_id": "ou_card_approver"}},
|
||||
"action": {
|
||||
"value": {
|
||||
"ticket_id": ticket_id,
|
||||
"decision": "approve",
|
||||
"comment": "approved from card",
|
||||
}
|
||||
},
|
||||
},
|
||||
)
|
||||
assert callback_response.status_code == 200
|
||||
assert callback_response.json()["result"]["status"] == "approved"
|
||||
assert callback_response.json()["result"]["approver"] == "ou_card_approver"
|
||||
|
||||
|
||||
def test_new_ledgers_reports_and_risk_events() -> None:
|
||||
domains_response = client.get("/api/v1/business/domains", headers=headers)
|
||||
assert domains_response.status_code == 200
|
||||
@@ -419,6 +481,11 @@ def test_new_ledgers_reports_and_risk_events() -> None:
|
||||
assert risk_response.status_code == 200
|
||||
assert risk_response.json()["created"] >= 1
|
||||
|
||||
enqueue_response = client.post("/api/v1/risks/events/enqueue", headers=headers)
|
||||
assert enqueue_response.status_code == 200
|
||||
assert enqueue_response.json()["queued"] is False
|
||||
assert "result" in enqueue_response.json()
|
||||
|
||||
events_response = client.get("/api/v1/risks/events?status=open", headers=headers)
|
||||
assert events_response.status_code == 200
|
||||
assert any(item["risk_type"] == "overdue_task" for item in events_response.json()["items"])
|
||||
|
||||
Reference in New Issue
Block a user