Files
openai--openai-agents-python/tests/utils/test_simple_session.py
T
2026-07-13 12:39:17 +08:00

55 lines
1.8 KiB
Python

from __future__ import annotations
from typing import cast
import pytest
from agents.items import TResponseInputItem
from tests.utils.simple_session import CountingSession, IdStrippingSession, SimpleListSession
@pytest.mark.asyncio
async def test_simple_list_session_preserves_history_and_saved_items() -> None:
history: list[TResponseInputItem] = [
cast(TResponseInputItem, {"id": "msg1", "content": "hi", "role": "user"}),
cast(TResponseInputItem, {"id": "msg2", "content": "hello", "role": "assistant"}),
]
session = SimpleListSession(history=history)
items = await session.get_items()
# get_items should return a copy, not the original list.
assert items == history
assert items is not history
# saved_items should mirror the stored list.
assert session.saved_items == history
@pytest.mark.asyncio
async def test_counting_session_tracks_pop_calls() -> None:
session = CountingSession(
history=[cast(TResponseInputItem, {"id": "x", "content": "hi", "role": "user"})]
)
assert session.pop_calls == 0
await session.pop_item()
assert session.pop_calls == 1
await session.pop_item()
assert session.pop_calls == 2
@pytest.mark.asyncio
async def test_id_stripping_session_removes_ids_on_add() -> None:
session = IdStrippingSession()
items: list[TResponseInputItem] = [
cast(TResponseInputItem, {"id": "keep-removed", "content": "hello", "role": "user"}),
cast(TResponseInputItem, {"content": "no-id", "role": "assistant"}),
]
await session.add_items(items)
stored = await session.get_items()
assert all("id" not in item for item in stored if isinstance(item, dict))
# pop_calls should increment when rewinding.
await session.pop_item()
assert session.pop_calls == 1