Files
kontextual-engine/tests/test_artifacts.py

76 lines
2.6 KiB
Python

from kontextual_engine import (
Artifact,
ArtifactMetadata,
ArtifactReference,
ArtifactType,
Collection,
Relationship,
RelationshipGraph,
RelationshipType,
content_digest,
)
def test_artifact_create_updates_digest_and_roundtrips() -> None:
artifact = Artifact.create(
"collection-1",
"brief",
"first version",
artifact_type=ArtifactType.DOCUMENT,
metadata=ArtifactMetadata(tags=["example"], media_type="text/plain"),
)
assert artifact.content_digest == content_digest("first version")
assert artifact.content_size == len("first version".encode("utf-8"))
artifact.update_content("second version")
assert artifact.content_digest == content_digest("second version")
restored = Artifact.from_dict(artifact.to_dict())
assert restored.id == artifact.id
assert restored.metadata.tags == ["example"]
assert restored.artifact_type == ArtifactType.DOCUMENT
def test_artifact_reference_parse_formats() -> None:
assert ArtifactReference.parse("name") == ArtifactReference(name="name")
assert ArtifactReference.parse("space:name") == ArtifactReference(
name="name",
collection_id="space",
)
assert str(ArtifactReference.parse("space:name@v1")) == "space:name@v1"
def test_collection_and_relationship_roundtrip() -> None:
collection = Collection.create("project", domain="markitect")
restored_collection = Collection.from_dict(collection.to_dict())
assert restored_collection.name == "project"
assert restored_collection.domain == "markitect"
relationship = Relationship.create(
"a",
"b",
"depends on",
relationship_type=RelationshipType.DEPENDS_ON,
evidence="test evidence",
)
assert relationship.edge() == ("a", "b", "depends on")
restored_relationship = Relationship.from_dict(relationship.to_dict())
assert restored_relationship.relationship_type == RelationshipType.DEPENDS_ON
assert restored_relationship.evidence == "test evidence"
def test_relationship_graph_detects_cycles_and_orders_dependencies() -> None:
edge_ab = Relationship.create("A", "B", "depends on")
edge_bc = Relationship.create("B", "C", "depends on")
graph = RelationshipGraph.from_relationships([edge_ab, edge_bc])
assert graph.successors("A") == {"B"}
assert graph.predecessors("C") == {"B"}
assert graph.detect_cycles() == []
assert graph.topological_sort().index("C") < graph.topological_sort().index("A")
graph.add(Relationship.create("C", "A", "depends on"))
assert graph.detect_cycles()