from datetime import datetime, timezone from sqlalchemy import create_engine, select from app.db import Base, create_session_factory from app.models.memory import MemoryEpisode, MemoryGraph from app.services.local_graph_memory_updater import LocalGraphMemoryUpdater from app.services.memory_activity import AgentActivity def test_local_graph_memory_updater_persists_scoped_activity_episode(): engine = create_engine("sqlite+pysqlite:///:memory:") Base.metadata.create_all(engine) session_factory = create_session_factory(engine) try: with session_factory() as session: session.add( MemoryGraph( id="graph-runtime", organization_id="org-a", project_id="project-a", ) ) session.commit() updater = LocalGraphMemoryUpdater( simulation_id="sim-runtime", graph_id="graph-runtime", organization_id="org-a", session_factory=session_factory, ) updater.start() updater.add_activity( AgentActivity( platform="twitter", agent_id=7, agent_name="Alice", action_type="CREATE_POST", action_args={"content": "Local memory is durable."}, round_num=2, timestamp=datetime.now(timezone.utc).isoformat(), ) ) updater.stop() with session_factory() as session: episodes = list(session.scalars(select(MemoryEpisode))) assert len(episodes) == 1 finally: engine.dispose()