Final_Assignment_Template / tests /test_checkpointing.py
yc1838
handle 429
9001c13
Raw
History Blame Contribute Delete
2.33 kB
from __future__ import annotations
import importlib
import tempfile
import types
import unittest
from pathlib import Path
from unittest.mock import patch
from lilith_agent.checkpointing import build_checkpointer
class CheckpointingTests(unittest.TestCase):
def test_build_checkpointer_uses_sqlite_when_available(self) -> None:
class FakeSqliteSaver:
def __init__(self, conn) -> None:
self.conn = conn
def fake_import_module(name: str):
if name == "langgraph.checkpoint.sqlite":
return types.SimpleNamespace(SqliteSaver=FakeSqliteSaver)
raise AssertionError(f"unexpected import: {name}")
with tempfile.TemporaryDirectory() as tmpdir:
tmp_path = Path(tmpdir)
with patch.object(importlib, "import_module", side_effect=fake_import_module):
saver = build_checkpointer(tmp_path)
self.assertIsInstance(saver, FakeSqliteSaver)
self.assertTrue((tmp_path / "threads.sqlite").exists())
def test_build_checkpointer_falls_back_to_in_memory_when_sqlite_package_missing(self) -> None:
class FakeInMemorySaver:
pass
def fake_import_module(name: str):
if name == "langgraph.checkpoint.sqlite":
raise ModuleNotFoundError("No module named 'langgraph.checkpoint.sqlite'")
if name == "langgraph.checkpoint.memory":
return types.SimpleNamespace(InMemorySaver=FakeInMemorySaver)
raise AssertionError(f"unexpected import: {name}")
with tempfile.TemporaryDirectory() as tmpdir:
tmp_path = Path(tmpdir)
with patch.object(importlib, "import_module", side_effect=fake_import_module):
with self.assertLogs("lilith_agent.checkpointing", level="WARNING") as captured:
saver = build_checkpointer(tmp_path)
self.assertIsInstance(saver, FakeInMemorySaver)
self.assertIn("langgraph-checkpoint-sqlite missing", "\n".join(captured.output))
def test_requirements_include_langgraph_checkpoint_sqlite(self) -> None:
requirements = Path("requirements.txt").read_text().splitlines()
self.assertIn("langgraph-checkpoint-sqlite", requirements)
if __name__ == "__main__":
unittest.main()