"""Tests for runtime/conversation/session.py."""

from __future__ import annotations

from runtime.conversation.session import Session, SessionStore


def test_session_add_messages():
    s = Session(slug="test-persona")
    s.add_user("Hello")
    s.add_assistant("Greetings.")
    assert len(s.history()) == 2
    assert s.history()[0]["role"] == "user"
    assert s.history()[1]["role"] == "assistant"


def test_session_history_is_copy():
    s = Session(slug="test-persona")
    s.add_user("Hi")
    h = s.history()
    h.append({"role": "user", "content": "extra"})
    assert len(s.history()) == 1


def test_session_clear():
    s = Session(slug="test-persona")
    s.add_user("Hello")
    s.clear()
    assert s.history() == []


def test_store_create_and_get():
    store = SessionStore()
    s = store.create("marcus-aurelius")
    assert store.get(s.session_id) is s


def test_store_get_missing_returns_none():
    store = SessionStore()
    assert store.get("nonexistent") is None


def test_store_get_or_create_returns_existing():
    store = SessionStore()
    s = store.create("test")
    s2 = store.get_or_create(s.session_id, "test")
    assert s2 is s


def test_store_get_or_create_creates_new_if_missing():
    store = SessionStore()
    s = store.get_or_create(None, "test")
    assert s.slug == "test"
    assert len(store) == 1


def test_store_delete():
    store = SessionStore()
    s = store.create("test")
    store.delete(s.session_id)
    assert store.get(s.session_id) is None
