feat: 完成三角色工作台及金租对公Skills全流程演示

This commit is contained in:
NathanAlex7
2026-09-15 10:32:24 +08:00
parent 5f0b1f9409
commit 47ec090345
58 changed files with 2534 additions and 609 deletions
+25
View File
@@ -3,6 +3,7 @@ import os
import sqlite3
import tempfile
import unittest
from copy import deepcopy
from pathlib import Path
from unittest.mock import patch
from fastapi import FastAPI
@@ -10,6 +11,7 @@ from fastapi.testclient import TestClient
from api import risk_agent_config as engine
from api.risk_agent_alignment import align
from api.risk_agent_connectors import execute, validate_query
from services.business_demo_database import build_business_demo_database, database_summary
class AlignmentTests(unittest.TestCase):
@@ -39,6 +41,29 @@ class AlignmentTests(unittest.TestCase):
class DatabaseTests(unittest.TestCase):
def test_multitable_business_database_and_configured_cards(self):
with tempfile.TemporaryDirectory() as root:
database = build_business_demo_database(Path(root) / "business.sqlite3")
summary = database_summary(database)
self.assertEqual(len(summary["tables"]), 11)
self.assertEqual(summary["tables"]["lease_project"], 3)
connection = deepcopy(next(item for item in engine.SEED["connections"] if item["id"] == "conn-business-demo"))
connection["database"] = str(database)
cards = {item["id"]: item for item in engine.SEED["cards"] if item["id"].startswith("card-business-")}
with patch.dict(os.environ, {"XINGBANG_SQLITE_ROOT": root}):
project = engine.query_card(cards["card-business-project"], connection, "DEMO-B")
finance = engine.query_card(cards["card-business-finance"], connection, "DEMO-B")
credit = engine.query_card(cards["card-business-credit"], connection, "DEMO-B")
lease = engine.query_card(cards["card-business-lease"], connection, "DEMO-B")
repayment = engine.query_card(cards["card-business-repayment"], connection, "DEMO-B")
self.assertEqual(project[0]["facility_amount"], 5000)
self.assertEqual(len(finance), 2)
self.assertIsNone(finance[-1]["operating_cashflow"])
self.assertEqual(credit[0]["legal_case_count"], 1)
self.assertEqual(lease[0]["lease_total_value"], 5400)
self.assertEqual(lease[0]["duplicate_asset_count"], 1)
self.assertEqual(repayment[0]["evidence_status"], "缺少最新流水")
def test_real_sqlite_read_only_and_allowlist(self):
with tempfile.TemporaryDirectory() as root:
file=Path(root)/"erp.sqlite"