Files
ai_orchestrator/tests/integration/test_sqlalchemy_storage.py
T
2026-07-03 21:18:32 +03:00

80 lines
2.7 KiB
Python

from pathlib import Path
from ai_orchestrator.config import AppSettings
from ai_orchestrator.domain.enums import NodeType, PolicyDecisionType
from ai_orchestrator.domain.events import DomainEvent
from ai_orchestrator.domain.models import (
ConfirmationRequest,
ExecutionGraph,
ExecutionNode,
PolicyDecision,
Task,
WorkerSession,
)
from ai_orchestrator.infrastructure.storage.factory import create_storage_bundle
def test_sqlite_storage_persists_task_graph_and_events(tmp_path: Path) -> None:
db_path = tmp_path / "orchestrator.sqlite3"
settings = AppSettings(
storage_backend="sqlite",
database_url=f"sqlite:///{db_path.as_posix()}",
)
storage = create_storage_bundle(settings)
task = Task(project_id="default", goal="Persist me", inputs={"a": 1})
storage.task_repository.create(task)
node = ExecutionNode(
task_id=task.task_id,
node_type=NodeType.PLANNER,
input_data={"goal": "Persist me"},
)
graph = ExecutionGraph(task_id=task.task_id, nodes=[node])
storage.graph_repository.save(graph)
storage.event_store.append(
DomainEvent(event_type="task_created", task_id=task.task_id, payload={"goal": task.goal})
)
stored_task = storage.task_repository.get(task.task_id)
stored_graph = storage.graph_repository.get(task.task_id)
stored_events = storage.event_store.list_by_task(task.task_id)
assert stored_task is not None
assert stored_task.goal == "Persist me"
assert stored_graph is not None
assert stored_graph.nodes[0].node_type == NodeType.PLANNER
assert stored_events[0].event_type == "task_created"
def test_sqlite_storage_persists_confirmation_and_worker(tmp_path: Path) -> None:
db_path = tmp_path / "orchestrator.sqlite3"
settings = AppSettings(
storage_backend="sqlite",
database_url=f"sqlite:///{db_path.as_posix()}",
)
storage = create_storage_bundle(settings)
confirmation = ConfirmationRequest(
task_id="task_1",
node_id="node_1",
decision=PolicyDecision(
decision=PolicyDecisionType.CONFIRM,
reason="Need approval",
requires_confirmation=True,
),
)
worker = WorkerSession(
worker_id="worker_home_pc",
name="Home PC",
machine="DESKTOP-1",
os="windows",
version="0.1.0",
capabilities=["file.read"],
)
storage.confirmation_repository.create(confirmation)
storage.worker_repository.save(worker)
assert storage.confirmation_repository.get(confirmation.confirmation_id) is not None
assert storage.worker_repository.get(worker.session_id) is not None
assert len(storage.worker_repository.list_active()) == 1