Initial commit: InternalAuditInterprise
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
"""数据中台穿透 API 集成测试(需 PostgreSQL)。
|
||||
|
||||
通过 TestClient 调用 /datahub/penetrate,验证统一穿透查询服务端到端可用。
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import uuid
|
||||
|
||||
import pytest
|
||||
from fastapi.testclient import TestClient
|
||||
|
||||
from app.datahub.graph_repo import add_relationship, upsert_entity
|
||||
from app.datahub.ontology import EntityType, RelationshipType
|
||||
from app.db import get_session
|
||||
from app.main import app
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
def client(session):
|
||||
# 用集成测试的事务化 session 覆盖应用依赖,保证测试数据回滚
|
||||
app.dependency_overrides[get_session] = lambda: session
|
||||
try:
|
||||
yield TestClient(app)
|
||||
finally:
|
||||
app.dependency_overrides.pop(get_session, None)
|
||||
|
||||
|
||||
def test_penetrate_endpoint_detects_related(client, session):
|
||||
suffix = uuid.uuid4().hex[:8]
|
||||
controller = upsert_entity(session, EntityType.LEGAL_PERSON, f"CTRL-{suffix}", "实控人")
|
||||
cust = upsert_entity(session, EntityType.CUSTOMER, f"CUST-{suffix}", "政企客户")
|
||||
rep = upsert_entity(session, EntityType.LEGAL_PERSON, f"REP-{suffix}", "法人")
|
||||
add_relationship(session, RelationshipType.LEGAL_REP_OF, rep, cust)
|
||||
add_relationship(session, RelationshipType.RELATED_TO, rep, controller)
|
||||
session.flush()
|
||||
|
||||
resp = client.post(
|
||||
"/datahub/penetrate",
|
||||
json={"start_entity_id": str(controller.id), "max_depth": 3},
|
||||
)
|
||||
assert resp.status_code == 200
|
||||
body = resp.json()
|
||||
related_ids = {r["entity"]["id"] for r in body["related"]}
|
||||
assert str(cust.id) in related_ids
|
||||
assert body["related_count"] >= 2
|
||||
|
||||
|
||||
def test_penetrate_unknown_entity_404(client):
|
||||
resp = client.post(
|
||||
"/datahub/penetrate",
|
||||
json={"start_entity_id": str(uuid.uuid4()), "max_depth": 2},
|
||||
)
|
||||
assert resp.status_code == 404
|
||||
|
||||
|
||||
def test_get_entity_endpoint(client, session):
|
||||
suffix = uuid.uuid4().hex[:8]
|
||||
e = upsert_entity(session, EntityType.SUPPLIER, f"SUP-{suffix}", "供应商甲")
|
||||
session.flush()
|
||||
resp = client.get(f"/datahub/entities/{e.id}")
|
||||
assert resp.status_code == 200
|
||||
assert resp.json()["business_key"] == f"SUP-{suffix}"
|
||||
Reference in New Issue
Block a user