Dependency graph vizualization

This commit is contained in:
2026-05-03 12:52:51 +02:00
parent 60ebef0281
commit 8a5e38ce68
7 changed files with 543 additions and 1 deletions

View File

@@ -189,6 +189,9 @@ def test_openapi_contract_snapshot_for_stable_agent_paths():
"/repos/{repository_id}/ability-map": {
"get": {"tags": ["registry"], "success_schema": "RepositoryAbilityMapResponse"}
},
"/repos/{repository_id}/dependency-graph": {
"get": {"tags": ["registry"], "success_schema": "object"}
},
"/repos/{repository_id}/analysis-runs": {
"get": {"tags": ["analysis"], "success_schema": "list[AnalysisRunResponse]"},
"post": {"tags": ["analysis"], "success_schema": "ScanSummaryResponse"},
@@ -1365,6 +1368,10 @@ def test_ui_register_analyze_and_approve_loop(tmp_path):
f'<a class="button secondary" href="/ui/repos/{repository_id}/scope">SCOPE</a>'
in detail_response.text
)
assert (
f'<a class="button secondary" href="/ui/repos/{repository_id}/dependency-graph">Dependency Graph</a>'
in detail_response.text
)
repo_scope_response = client.get(f"/ui/repos/{repository_id}/scope")
assert repo_scope_response.status_code == 200
@@ -1491,6 +1498,24 @@ def test_ui_register_analyze_and_approve_loop(tmp_path):
assert "Elements" in approved_detail.text
assert "q=Report+Service+Status" in approved_detail.text
graph_response = client.get(f"/repos/{repository_id}/dependency-graph")
assert graph_response.status_code == 200
graph_payload = graph_response.json()
assert graph_payload["mode"] == "full"
assert graph_payload["metrics"]["node_count"] >= 4
assert graph_payload["metrics"]["edge_count"] >= 3
assert any(
element["data"].get("kind") == "scope"
for element in graph_payload["elements"]
if "source" not in element["data"]
)
graph_page = client.get(f"/ui/repos/{repository_id}/dependency-graph")
assert graph_page.status_code == 200
assert "Dependency Graph" in graph_page.text
assert "cytoscape.min.js" in graph_page.text
assert 'data-graph-mode="impact"' in graph_page.text
scope_listing = client.get(
f"/ui/repos/{repository_id}/elements",
params={"scope": "all", "type": "scopes", "entry_filter": "approved"},