2.0.0
Co-Authored-By: Quentin Torroba <quentin.torroba@mistral.ai> Co-Authored-By: Michel Thomazo <michel.thomazo@mistral.ai> Co-Authored-By: Clément Drouin <clement.drouin@mistral.ai> Co-Authored-By: Vincent Guilloux <vincent.guilloux@mistral.ai> Co-Authored-By: Clément Siriex <clement.sirieix@mistral.ai> Co-Authored-By: Kim-Adeline Miguel <kimadeline.miguel@mistral.ai> Co-Authored-By: Thaddee Tyl <thaddee.tyl@gmail.com> Co-Authored-By: David Brochart <david.brochart@gmail.com> Co-Authored-By: Joseph Guhlin <joseph.guhlin@gmail.com> Co-Authored-By: Thomas Kenbeek <thomaskenbeek@gmail.com> Co-Authored-By: Remenby31 <baptiste.cruvellier31@gmail.com>
This commit is contained in:
parent
79f215d91c
commit
d33db9fff8
217 changed files with 16911 additions and 4305 deletions
177
tests/session/test_session_migration.py
Normal file
177
tests/session/test_session_migration.py
Normal file
|
|
@ -0,0 +1,177 @@
|
|||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
from vibe.core.config import SessionLoggingConfig
|
||||
from vibe.core.session.session_migration import migrate_sessions
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def temp_session_dir(tmp_path: Path) -> Path:
|
||||
session_dir = tmp_path / "sessions"
|
||||
session_dir.mkdir()
|
||||
return session_dir
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def session_config(temp_session_dir: Path) -> SessionLoggingConfig:
|
||||
return SessionLoggingConfig(
|
||||
save_dir=str(temp_session_dir), session_prefix="test", enabled=True
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def disabled_session_config() -> SessionLoggingConfig:
|
||||
return SessionLoggingConfig(
|
||||
save_dir="/tmp/test", session_prefix="test", enabled=False
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def old_session_data() -> dict:
|
||||
return {
|
||||
"metadata": {
|
||||
"session_id": "test-session-123",
|
||||
"start_time": "2023-01-01T00:00:00",
|
||||
"end_time": "2023-01-01T01:00:00",
|
||||
"git_commit": "abc123",
|
||||
"git_branch": "main",
|
||||
"username": "testuser",
|
||||
"environment": {"working_directory": "/test"},
|
||||
},
|
||||
"messages": [
|
||||
{"role": "system", "content": "System prompt"},
|
||||
{"role": "user", "content": "Hello"},
|
||||
{"role": "assistant", "content": "Hi there!"},
|
||||
],
|
||||
}
|
||||
|
||||
|
||||
class TestSessionMigration:
|
||||
@pytest.mark.asyncio
|
||||
async def test_migrate_sessions_disabled_config(
|
||||
self, disabled_session_config: SessionLoggingConfig
|
||||
) -> None:
|
||||
"""Test that migration does nothing when config is disabled."""
|
||||
result = await migrate_sessions(disabled_session_config)
|
||||
assert result == 0
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_migrate_sessions_no_save_dir(
|
||||
self, session_config: SessionLoggingConfig
|
||||
) -> None:
|
||||
"""Test that migration handles missing save_dir gracefully."""
|
||||
config = SessionLoggingConfig(save_dir="", session_prefix="test", enabled=True)
|
||||
result = await migrate_sessions(config)
|
||||
assert result == 0
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_migrate_sessions_no_old_files(
|
||||
self, session_config: SessionLoggingConfig
|
||||
) -> None:
|
||||
"""Test that migration handles no old session files gracefully."""
|
||||
session_dir = Path(session_config.save_dir)
|
||||
session_dir.mkdir(exist_ok=True)
|
||||
|
||||
result = await migrate_sessions(session_config)
|
||||
assert result == 0
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_migrate_sessions_successful_migration(
|
||||
self, session_config: SessionLoggingConfig, old_session_data: dict
|
||||
) -> None:
|
||||
"""Test successful migration of old session files."""
|
||||
session_dir = Path(session_config.save_dir)
|
||||
|
||||
old_session_file = session_dir / "test_session-123.json"
|
||||
with open(old_session_file, "w") as f:
|
||||
json.dump(old_session_data, f)
|
||||
|
||||
result = await migrate_sessions(session_config)
|
||||
assert result == 1
|
||||
|
||||
assert not old_session_file.exists()
|
||||
session_subdir = session_dir / "test_session-123"
|
||||
assert session_subdir.is_dir()
|
||||
|
||||
metadata_file = session_subdir / "meta.json"
|
||||
assert metadata_file.is_file()
|
||||
|
||||
with open(metadata_file) as f:
|
||||
metadata = json.load(f)
|
||||
assert metadata == old_session_data["metadata"]
|
||||
|
||||
messages_file = session_subdir / "messages.jsonl"
|
||||
assert messages_file.exists()
|
||||
|
||||
with open(messages_file) as f:
|
||||
lines = f.readlines()
|
||||
assert len(lines) == len(old_session_data["messages"])
|
||||
|
||||
for i, line in enumerate(lines):
|
||||
message = json.loads(line.strip())
|
||||
assert message == old_session_data["messages"][i]
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_migrate_sessions_multiple_files(
|
||||
self, session_config: SessionLoggingConfig, old_session_data: dict
|
||||
) -> None:
|
||||
"""Test migration of multiple old session files."""
|
||||
session_dir = Path(session_config.save_dir)
|
||||
|
||||
session_files = []
|
||||
for i in range(3):
|
||||
session_file = session_dir / f"test_session-{i:03d}.json"
|
||||
session_files.append(session_file)
|
||||
|
||||
modified_data = old_session_data.copy()
|
||||
modified_data["metadata"]["session_id"] = f"test-session-{i}"
|
||||
|
||||
with open(session_file, "w") as f:
|
||||
json.dump(modified_data, f)
|
||||
|
||||
result = await migrate_sessions(session_config)
|
||||
assert result == 3
|
||||
|
||||
for session_file in session_files:
|
||||
assert not session_file.exists()
|
||||
|
||||
for i in range(3):
|
||||
session_subdir = session_dir / f"test_session-{i:03d}"
|
||||
assert session_subdir.exists()
|
||||
assert session_subdir.is_dir()
|
||||
|
||||
metadata_file = session_subdir / "meta.json"
|
||||
messages_file = session_subdir / "messages.jsonl"
|
||||
assert metadata_file.exists()
|
||||
assert messages_file.exists()
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_migrate_sessions_error_handling(
|
||||
self, session_config: SessionLoggingConfig
|
||||
) -> None:
|
||||
"""Test that migration handles errors gracefully and continues."""
|
||||
session_dir = Path(session_config.save_dir)
|
||||
|
||||
valid_session_file = session_dir / "test_session-valid.json"
|
||||
valid_data = {
|
||||
"metadata": {"session_id": "valid-session"},
|
||||
"messages": [{"role": "user", "content": "Hello"}],
|
||||
}
|
||||
with open(valid_session_file, "w") as f:
|
||||
json.dump(valid_data, f)
|
||||
|
||||
invalid_session_file = session_dir / "test_session-invalid.json"
|
||||
with open(invalid_session_file, "w") as f:
|
||||
f.write("{invalid json}")
|
||||
|
||||
result = await migrate_sessions(session_config)
|
||||
assert result == 1
|
||||
|
||||
valid_session_subdir = session_dir / "test_session-valid"
|
||||
assert valid_session_subdir.exists()
|
||||
assert not valid_session_file.exists()
|
||||
assert invalid_session_file.exists()
|
||||
Loading…
Add table
Add a link
Reference in a new issue