Files
wehub-resource-sync c889a57b6b
Test Suites / Build CI Environment (push) Has been cancelled
Test Suites / Basic Tests (push) Has been cancelled
Test Suites / End-to-End Tests (push) Has been cancelled
Test Suites / CLI Tests (push) Has been cancelled
Test Suites / Slow End-to-End Tests (push) Has been cancelled
Test Suites / Graph Database Tests (push) Has been cancelled
Test Suites / Vector DB Tests (push) Has been cancelled
Test Suites / Temporal Graph Test (push) Has been cancelled
Test Suites / Search Test on Different DBs (push) Has been cancelled
Test Suites / Example Tests (push) Has been cancelled
Test Suites / Notebook Tests (push) Has been cancelled
Test Suites / OS and Python Tests Ubuntu (push) Has been cancelled
Test Suites / OS and Python Tests Extended (push) Has been cancelled
Test Suites / LLM Test Suite (push) Has been cancelled
Test Suites / S3 File Storage Test (push) Has been cancelled
Test Suites / Run Integration Tests (push) Has been cancelled
Test Suites / MCP Tests (push) Has been cancelled
Test Suites / Docker Compose Test (push) Has been cancelled
Test Suites / Docker CI test (push) Has been cancelled
Test Suites / Relational DB Migration Tests (push) Has been cancelled
Test Suites / Distributed Cognee Test (push) Has been cancelled
Test Suites / DB Examples Tests (push) Has been cancelled
Test Suites / Test Completion Status (push) Has been cancelled
Test Suites / Claude Code Review (push) Has been cancelled
Test Suites / basic checks (push) Has been cancelled
build | Build and Push Cognee MCP Docker Image to dockerhub / docker-build-and-push (push) Has been cancelled
Scorecard supply-chain security / Scorecard analysis (push) Has been cancelled
build | Build and Push Docker Image to dockerhub / docker-build-and-push (push) Has been cancelled
Weighted Edges Tests / Test Weighted Edges Core Functionality (3.11) (push) Has been cancelled
Weighted Edges Tests / Test Weighted Edges Core Functionality (3.12) (push) Has been cancelled
Weighted Edges Tests / Test Weighted Edges with Different Graph Databases (kuzu, kuzu) (push) Has been cancelled
Weighted Edges Tests / Test Weighted Edges with Different Graph Databases (neo4j, neo4j) (push) Has been cancelled
Weighted Edges Tests / Test Weighted Edges Examples (push) Has been cancelled
Weighted Edges Tests / Code Quality for Weighted Edges (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:02:24 +08:00

119 lines
4.2 KiB
Python

"""Unit tests for the memory-provenance graph builder (pure projection logic)."""
from importlib import import_module
# Import via importlib for consistency with the visualize submodule access pattern.
_module = import_module("cognee.api.v1.visualize.memory_provenance")
build_provenance_graph = _module.build_provenance_graph
def _scenario():
return dict(
tenants=[{"id": "T", "name": "Acme Logistics"}],
users=[
{"id": "U1", "name": "alice@x", "tenant_ids": ["T"]},
{"id": "U2", "name": "bob@x", "tenant_ids": ["T"]},
],
datasets=[
{"id": "D1", "name": "Fleet Ops", "owner_id": "U1", "tenant_id": "T"},
{"id": "D2", "name": "Carrier Intel", "owner_id": "U2", "tenant_id": "T"},
],
files=[
{"id": "F1", "name": "a.txt", "dataset_ids": ["D1"]},
{"id": "F2", "name": "b.txt", "dataset_ids": ["D1", "D2"]},
],
agents=[
{
"id": "A1",
"name": "dispatch-copilot",
"user_id": "U1",
"session_id": "S1",
"datasets": [
{"dataset_id": "D1", "role": "read_write"},
{"dataset_id": "D2", "role": "read"},
],
}
],
sessions=[
{"id": "S1", "name": "sess1", "user_id": "U1", "dataset_id": "D1"},
{"id": "S2", "name": "sess2", "user_id": "U2", "dataset_id": "D2", "agent_id": "A1"},
],
)
def _build(**overrides):
args = _scenario()
args.update(overrides)
nodes, edges = build_provenance_graph(**args)
node_types = {nid: props["type"] for nid, props in nodes}
edge_set = {(s, t, rel) for s, t, rel, _ in edges}
return node_types, edge_set
def test_nodes_are_namespaced_with_correct_types():
node_types, _ = _build()
assert node_types["tenant:T"] == "Tenant"
assert node_types["user:U1"] == "User"
assert node_types["dataset:D1"] == "Dataset"
assert node_types["file:F1"] == "TextDocument" # files render in the Documents column
assert node_types["agent:A1"] == "Agent"
assert node_types["session:S1"] == "Session"
def test_ownership_and_membership_edges():
_, edges = _build()
assert ("tenant:T", "user:U1", "has_member") in edges
assert ("tenant:T", "user:U2", "has_member") in edges
assert ("user:U1", "dataset:D1", "owns") in edges
assert ("user:U2", "dataset:D2", "owns") in edges
# a file shared by two datasets is contained by both
assert ("dataset:D1", "file:F2", "contains") in edges
assert ("dataset:D2", "file:F2", "contains") in edges
def test_agent_read_write_roles():
_, edges = _build()
assert ("user:U1", "agent:A1", "operates") in edges
# read_write produces BOTH reads and writes
assert ("agent:A1", "dataset:D1", "reads") in edges
assert ("agent:A1", "dataset:D1", "writes") in edges
# read-only produces reads but NOT writes
assert ("agent:A1", "dataset:D2", "reads") in edges
assert ("agent:A1", "dataset:D2", "writes") not in edges
def test_session_linkage():
_, edges = _build()
# agent.session_id links the agent to S1; session.agent_id links it to S2
assert ("agent:A1", "session:S1", "wrote") in edges
assert ("agent:A1", "session:S2", "wrote") in edges
# sessions are recorded into their dataset
assert ("session:S1", "dataset:D1", "recorded_in") in edges
assert ("session:S2", "dataset:D2", "recorded_in") in edges
def test_memory_layer_links_to_source_file():
node_types, edges = _build(
memory={
"nodes": [("n1", {"type": "Entity", "name": "Carlos"})],
"edges": [],
"links": [{"node_id": "n1", "data_id": "F1", "dataset_id": "D1"}],
}
)
assert node_types["n1"] == "Entity"
assert ("file:F1", "n1", "mentions") in edges
def test_empty_input_is_safe():
nodes, edges = build_provenance_graph()
assert nodes == []
assert edges == []
def test_dangling_references_are_skipped():
# owner U9 / dataset D9 don't exist as nodes → no phantom edges
_, edges = _build(
datasets=[{"id": "D1", "name": "Fleet", "owner_id": "U9", "tenant_id": "T"}],
)
assert not any(t == "dataset:D1" and rel == "owns" for _, t, rel in edges)