Co-authored-by: Alexis Tacnet <alexis@mistral.ai>
Co-authored-by: Clément Drouin <clement.drouin@mistral.ai>
Co-authored-by: Guillaume LE GOFF <guillaume.lgf@gmail.com>
Co-authored-by: Lucas Marandat <31749711+lucasmrdt@users.noreply.github.com>
Co-authored-by: Maxime Dolores <maxime.dolores@ext.mistral.ai>
Co-authored-by: Pierre Rossinès <pierre.rossines@mistral.ai>
Co-authored-by: Quentin <quentin.torroba@mistral.ai>
Co-authored-by: Val <102326092+vdeva@users.noreply.github.com>
Co-authored-by: Vincent G <10739306+VinceOPS@users.noreply.github.com>
Co-authored-by: p.vezia <166131032+le-codeur-rapide@users.noreply.github.com>
Co-authored-by: Hiba Chaabnia <Hiba-Chaabnia@users.noreply.github.com>
Co-authored-by: Nikhil Bhima <nikhilbhima@users.noreply.github.com>
Co-authored-by: Nkipohcs <Nkipohcs@users.noreply.github.com>
Co-authored-by: Mistral Vibe <vibe@mistral.ai>
This commit is contained in:
Mathias Gesbert 2026-06-04 18:26:35 +02:00 committed by GitHub
parent ad0d5c9520
commit 3f8487f761
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
197 changed files with 10819 additions and 2830 deletions

View file

@ -6,7 +6,11 @@ from pathlib import Path
import pytest
from vibe.core.config import SessionLoggingConfig
from vibe.core.session.saved_sessions import update_saved_session_title
from vibe.core.session import last_session_pointer
from vibe.core.session.saved_sessions import (
delete_saved_session,
update_saved_session_title,
)
@pytest.fixture
@ -23,6 +27,21 @@ def session_config(temp_session_dir: Path) -> SessionLoggingConfig:
)
def write_saved_session(
session_config: SessionLoggingConfig,
timestamp: str,
short_id: str,
metadata: dict[str, object],
) -> Path:
saved_session_dir = Path(session_config.save_dir) / f"test_{timestamp}_{short_id}"
saved_session_dir.mkdir()
(saved_session_dir / "messages.jsonl").write_text(
'{"role": "user", "content": "Hello"}\n', encoding="utf-8"
)
(saved_session_dir / "meta.json").write_text(json.dumps(metadata), encoding="utf-8")
return saved_session_dir
class TestUpdateSavedSessionTitle:
@pytest.mark.asyncio
async def test_updates_saved_session_title_without_losing_existing_metadata(
@ -145,6 +164,22 @@ class TestUpdateSavedSessionTitle:
"missing-session", "Renamed", session_config
)
@pytest.mark.asyncio
async def test_skips_non_object_candidate_metadata(
self, session_config: SessionLoggingConfig
) -> None:
session_dir = Path(session_config.save_dir)
saved_session_dir = session_dir / "test_20240101_120000_eeeeeeee"
saved_session_dir.mkdir()
(saved_session_dir / "messages.jsonl").write_text(
'{"role": "user", "content": "Hello"}\n', encoding="utf-8"
)
(saved_session_dir / "meta.json").write_text("[]", encoding="utf-8")
with pytest.raises(ValueError, match="Session not found: eeeeeeee-5555"):
await update_saved_session_title("eeeeeeee-5555", "Renamed", session_config)
@pytest.mark.asyncio
async def test_requires_exact_saved_session_id(
self, session_config: SessionLoggingConfig
@ -176,3 +211,120 @@ class TestUpdateSavedSessionTitle:
assert (
json.loads(metadata_file.read_text(encoding="utf-8")) == original_metadata
)
class TestDeleteSavedSession:
@pytest.mark.asyncio
async def test_deletes_saved_session_directory(
self, session_config: SessionLoggingConfig
) -> None:
target_dir = write_saved_session(
session_config,
"20240101_120000",
"ffffffff",
{"session_id": "ffffffff-6666", "title": "Target"},
)
other_dir = write_saved_session(
session_config,
"20240101_120000",
"11111111",
{"session_id": "11111111-7777", "title": "Other"},
)
await delete_saved_session("ffffffff-6666", session_config)
assert not target_dir.exists()
assert other_dir.exists()
@pytest.mark.asyncio
async def test_clears_matching_last_session_pointers(
self, session_config: SessionLoggingConfig
) -> None:
target_dir = write_saved_session(
session_config,
"20240101_120000",
"ffffffff",
{"session_id": "ffffffff-6666", "title": "Target"},
)
pointer_dir = (
Path(session_config.save_dir) / last_session_pointer.POINTER_DIR_NAME
)
pointer_dir.mkdir()
matching_pointer = pointer_dir / "ttys001"
other_pointer = pointer_dir / "ttys002"
matching_pointer.write_text("ffffffff-6666\n", encoding="utf-8")
other_pointer.write_text("other-session\n", encoding="utf-8")
await delete_saved_session("ffffffff-6666", session_config)
assert not target_dir.exists()
assert not matching_pointer.exists()
assert other_pointer.read_text(encoding="utf-8") == "other-session\n"
@pytest.mark.asyncio
async def test_succeeds_for_missing_saved_session(
self, session_config: SessionLoggingConfig
) -> None:
await delete_saved_session("missing-session", session_config)
@pytest.mark.asyncio
async def test_clears_stale_last_session_pointer_for_missing_saved_session(
self, session_config: SessionLoggingConfig
) -> None:
pointer_dir = (
Path(session_config.save_dir) / last_session_pointer.POINTER_DIR_NAME
)
pointer_dir.mkdir()
matching_pointer = pointer_dir / "ttys001"
other_pointer = pointer_dir / "ttys002"
matching_pointer.write_text("missing-session\n", encoding="utf-8")
other_pointer.write_text("other-session\n", encoding="utf-8")
await delete_saved_session("missing-session", session_config)
assert not matching_pointer.exists()
assert other_pointer.read_text(encoding="utf-8") == "other-session\n"
@pytest.mark.asyncio
async def test_requires_exact_saved_session_id_before_deleting(
self, session_config: SessionLoggingConfig
) -> None:
collision_dir = write_saved_session(
session_config,
"20240101_120000",
"aaaaaaaa",
{"session_id": "aaaaaaaa-1111", "title": "Collision"},
)
target_dir = write_saved_session(
session_config,
"20240101_120500",
"aaaaaaaa",
{"session_id": "aaaaaaaa-2222", "title": "Target"},
)
await delete_saved_session("aaaaaaaa-2222", session_config)
assert collision_dir.exists()
assert not target_dir.exists()
@pytest.mark.asyncio
async def test_skips_invalid_candidate_metadata_before_deleting(
self, session_config: SessionLoggingConfig
) -> None:
invalid_dir = Path(session_config.save_dir) / "test_20240101_120000_bbbbbbbb"
invalid_dir.mkdir()
(invalid_dir / "messages.jsonl").write_text(
'{"role": "user", "content": "Hello"}\n', encoding="utf-8"
)
(invalid_dir / "meta.json").write_text("[]", encoding="utf-8")
target_dir = write_saved_session(
session_config,
"20240101_120500",
"bbbbbbbb",
{"session_id": "bbbbbbbb-3333", "title": "Target"},
)
await delete_saved_session("bbbbbbbb-3333", session_config)
assert invalid_dir.exists()
assert not target_dir.exists()