""" API session management test for the /chat endpoint. Purpose: - Verify that the FastAPI /chat endpoint stores conversation history in the in-memory session store - Verify that repeated requests with the same session_id reuse the same stored session history - Verify that the endpoint appends new conversation turns after each request This test focuses on API/session behavior only. It does not test the real LLM or retrieval pipeline, which are covered separately by agent/graph integration tests. To run this test, enter the following code in the terminal: sudo apt install python3-pytest .venv/bin/pip install ollama PYTHONPATH=src pytest tests/test_chat_sessions.py -q -s """ from fastapi.testclient import TestClient from walkxr_ai.api.main import app, session_store import walkxr_ai.api.main as main_module # Create a test client for FastAPI # This allows us to simulate HTTP requests without running a live server client = TestClient(app) def test_chat_endpoint_reuses_session_history(monkeypatch) -> None: """ Verify that repeated /chat requests with the same session_id reuse and extend the stored session history. """ # Resets in-memory session store at the start of the test to ensure clean slate session_store.clear() # Generate a mock response for the agent's get_response method to isolate session behavior def mock_get_response(user_input, history, user_id, session_id, stage): return { "response_text": f"Echo: {user_input}", "source_chunks": [], "debug": { "error": None, "phase": "history_updated", }, } # Replace the real get_response method with our mock response monkeypatch.setattr(main_module.agent, "get_response", mock_get_response) # Two sequential requests with the same session_id should build up the session history payload = { "user_id": "test_user", "session_id": "session_123", "stage": "conversation", "message": "Hello", } response_1 = client.post("/chat", json=payload) assert response_1.status_code == 200 payload["message"] = "How are you?" response_2 = client.post("/chat", json=payload) assert response_2.status_code == 200 # Verify that the session store has the correct history for session_123 assert "session_123" in session_store assert len(session_store["session_123"]) == 2 assert session_store["session_123"][0] == ("Hello", "Echo: Hello") assert session_store["session_123"][1] == ("How are you?", "Echo: How are you?")