132 lines
3.8 KiB
Python
Raw Normal View History

2025-11-04 08:01:20 +01:00
import json
2025-11-04 08:09:12 +01:00
import os
import pytest
from rp.core.session import SessionManager
2025-11-04 08:01:20 +01:00
2025-11-04 08:09:12 +01:00
2025-11-04 08:01:20 +01:00
@pytest.fixture
def temp_sessions_dir(tmp_path, monkeypatch):
from rp.core import session
2025-11-04 08:09:12 +01:00
2025-11-04 08:01:20 +01:00
original_dir = session.SESSIONS_DIR
2025-11-04 08:09:12 +01:00
monkeypatch.setattr(session, "SESSIONS_DIR", str(tmp_path))
2025-11-04 08:01:20 +01:00
# Clean any existing files
import shutil
2025-11-04 08:09:12 +01:00
2025-11-04 08:01:20 +01:00
if os.path.exists(str(tmp_path)):
shutil.rmtree(str(tmp_path))
os.makedirs(str(tmp_path), exist_ok=True)
yield tmp_path
2025-11-04 08:09:12 +01:00
monkeypatch.setattr(session, "SESSIONS_DIR", original_dir)
2025-11-04 08:01:20 +01:00
def test_session_manager_init(temp_sessions_dir):
2025-11-04 08:09:12 +01:00
SessionManager()
2025-11-04 08:01:20 +01:00
assert os.path.exists(temp_sessions_dir)
2025-11-04 08:09:12 +01:00
2025-11-04 08:01:20 +01:00
def test_save_and_load_session(temp_sessions_dir):
manager = SessionManager()
name = "test_session"
messages = [{"role": "user", "content": "Hello"}]
metadata = {"test": True}
2025-11-04 08:09:12 +01:00
2025-11-04 08:01:20 +01:00
assert manager.save_session(name, messages, metadata)
2025-11-04 08:09:12 +01:00
2025-11-04 08:01:20 +01:00
loaded = manager.load_session(name)
assert loaded is not None
2025-11-04 08:09:12 +01:00
assert loaded["name"] == name
assert loaded["messages"] == messages
assert loaded["metadata"] == metadata
2025-11-04 08:01:20 +01:00
def test_load_nonexistent_session(temp_sessions_dir):
manager = SessionManager()
loaded = manager.load_session("nonexistent")
assert loaded is None
2025-11-04 08:09:12 +01:00
2025-11-04 08:01:20 +01:00
def test_list_sessions(temp_sessions_dir):
manager = SessionManager()
# Save a session
manager.save_session("session1", [{"role": "user", "content": "Hi"}])
manager.save_session("session2", [{"role": "user", "content": "Hello"}])
2025-11-04 08:09:12 +01:00
2025-11-04 08:01:20 +01:00
sessions = manager.list_sessions()
assert len(sessions) == 2
2025-11-04 08:09:12 +01:00
assert sessions[0]["name"] == "session2" # sorted by created_at desc
2025-11-04 08:01:20 +01:00
def test_delete_session(temp_sessions_dir):
manager = SessionManager()
name = "to_delete"
manager.save_session(name, [{"role": "user", "content": "Test"}])
2025-11-04 08:09:12 +01:00
2025-11-04 08:01:20 +01:00
assert manager.delete_session(name)
assert manager.load_session(name) is None
2025-11-04 08:09:12 +01:00
2025-11-04 08:01:20 +01:00
def test_delete_nonexistent_session(temp_sessions_dir):
manager = SessionManager()
assert not manager.delete_session("nonexistent")
2025-11-04 08:09:12 +01:00
2025-11-04 08:01:20 +01:00
def test_export_session_json(temp_sessions_dir, tmp_path):
manager = SessionManager()
name = "export_test"
messages = [{"role": "user", "content": "Export me"}]
manager.save_session(name, messages)
2025-11-04 08:09:12 +01:00
2025-11-04 08:01:20 +01:00
output_path = tmp_path / "exported.json"
2025-11-04 08:09:12 +01:00
assert manager.export_session(name, str(output_path), "json")
2025-11-04 08:01:20 +01:00
assert output_path.exists()
2025-11-04 08:09:12 +01:00
2025-11-04 08:01:20 +01:00
with open(output_path) as f:
data = json.load(f)
2025-11-04 08:09:12 +01:00
assert data["name"] == name
2025-11-04 08:01:20 +01:00
def test_export_session_markdown(temp_sessions_dir, tmp_path):
manager = SessionManager()
name = "export_md"
messages = [{"role": "user", "content": "Markdown export"}]
manager.save_session(name, messages)
2025-11-04 08:09:12 +01:00
2025-11-04 08:01:20 +01:00
output_path = tmp_path / "exported.md"
2025-11-04 08:09:12 +01:00
assert manager.export_session(name, str(output_path), "markdown")
2025-11-04 08:01:20 +01:00
assert output_path.exists()
2025-11-04 08:09:12 +01:00
2025-11-04 08:01:20 +01:00
content = output_path.read_text()
assert "# Session: export_md" in content
2025-11-04 08:09:12 +01:00
2025-11-04 08:01:20 +01:00
def test_export_session_txt(temp_sessions_dir, tmp_path):
manager = SessionManager()
name = "export_txt"
messages = [{"role": "user", "content": "Text export"}]
manager.save_session(name, messages)
2025-11-04 08:09:12 +01:00
2025-11-04 08:01:20 +01:00
output_path = tmp_path / "exported.txt"
2025-11-04 08:09:12 +01:00
assert manager.export_session(name, str(output_path), "txt")
2025-11-04 08:01:20 +01:00
assert output_path.exists()
2025-11-04 08:09:12 +01:00
2025-11-04 08:01:20 +01:00
content = output_path.read_text()
assert "Session: export_txt" in content
2025-11-04 08:09:12 +01:00
2025-11-04 08:01:20 +01:00
def test_export_nonexistent_session(temp_sessions_dir, tmp_path):
manager = SessionManager()
output_path = tmp_path / "nonexistent.json"
2025-11-04 08:09:12 +01:00
assert not manager.export_session("nonexistent", str(output_path), "json")
2025-11-04 08:01:20 +01:00
def test_export_unsupported_format(temp_sessions_dir, tmp_path):
manager = SessionManager()
name = "test"
manager.save_session(name, [{"role": "user", "content": "Test"}])
2025-11-04 08:09:12 +01:00
2025-11-04 08:01:20 +01:00
output_path = tmp_path / "test.unsupported"
2025-11-04 08:09:12 +01:00
assert not manager.export_session(name, str(output_path), "unsupported")