HERMES-GIELIE/tests/test_sessions_search_profile_scope.py

53 lines
2.1 KiB
Python
Raw Normal View History

from types import SimpleNamespace
from unittest.mock import patch
from urllib.parse import urlparse
def _run_search(query):
import api.routes as routes
sessions_meta = [
{"session_id": "active-s", "title": "boring", "profile": "default"},
{"session_id": "other-s", "title": "secret needle title", "profile": "other"},
{"session_id": "other-content-s", "title": "boring", "profile": "other"},
]
sessions = {
"other-content-s": SimpleNamespace(messages=[{"role": "user", "content": "secret needle body"}]),
"active-s": SimpleNamespace(messages=[{"role": "user", "content": "nothing"}]),
"other-s": SimpleNamespace(messages=[]),
}
captured = {}
def fake_j(handler, payload, status=200, extra_headers=None):
captured["status"] = status
captured["payload"] = payload
with patch("api.routes.all_sessions", return_value=list(sessions_meta)), \
patch("api.routes.get_session", side_effect=lambda sid: sessions[sid]), \
patch("api.profiles.get_active_profile_name", return_value="default"), \
patch("api.routes.j", side_effect=fake_j):
routes._handle_sessions_search(SimpleNamespace(), urlparse(query))
return captured
def test_empty_session_search_scopes_to_active_profile():
captured = _run_search("/api/sessions/search")
assert [s["session_id"] for s in captured["payload"]["sessions"]] == ["active-s"]
def test_title_search_should_not_return_other_profile_rows():
captured = _run_search("/api/sessions/search?q=needle&content=0")
assert captured["payload"]["count"] == 0
def test_content_search_should_not_return_other_profile_rows():
captured = _run_search("/api/sessions/search?q=needle&content=1&depth=0")
assert captured["payload"]["count"] == 0
def test_all_profiles_opt_in_keeps_aggregate_session_search():
captured = _run_search("/api/sessions/search?all_profiles=1")
assert captured["payload"]["all_profiles"] is True
assert [s["session_id"] for s in captured["payload"]["sessions"]] == [
"active-s",
"other-s",
"other-content-s",
]