Keep legacy sidebar tests aligned with visible-row filtering

This commit is contained in:
Rod Boev committed 2026-06-23 11:56:25 -04:00
1 parent 75016c99f6
commit 165433fea6
5 files changed
+40 -18

No files matched your search

+2
View File
@@ -9839,6 +9839,8 @@ def handle_get(handler, parsed) -> bool:
sidebar_source = parse_qs(parsed.query).get("sidebar_source", [""])[0].strip().lower() or None
if sidebar_source not in ("webui", "cli"):
sidebar_source = None
# /api/sessions is the default sidebar contract, so keep the route-owned
# visible-row filter in the shared cache builder for both cache hits and misses.
key = _session_list_cache_key(
active_profile=active_profile,
all_profiles=all_profiles,
@@ -48,6 +48,7 @@ def test_sessions_list_reconciles_stale_stream_state_before_serializing(monkeypa
"session_id": "stale-session",
"title": "Stale Session",
"profile": "default",
"message_count": 1,
"active_stream_id": active_stream_id,
"is_streaming": is_streaming,
"updated_at": 1,
@@ -218,15 +218,19 @@ def test_zero_message_rows_with_visibility_signals_survive(monkeypatch):
handler = _handle_sessions("http://example.com/api/sessions?sidebar_source=webui&exclude_hidden=1")
body = handler.json_body()
by_id = {row["session_id"]: row for row in body["sessions"]}
assert handler.status == 200
assert [r["session_id"] for r in body["sessions"]] == [
"visible-with-message",
assert set(by_id) >= {
"active-stream-row",
"attention-row",
"pending-flag-row",
"pending-user-row",
]
}
assert by_id["active-stream-row"]["active_stream_id"] == "stream-active"
assert by_id["attention-row"]["attention"]["kind"] == "clarify"
assert by_id["pending-flag-row"]["has_pending_user_message"] is True
assert by_id["pending-user-row"]["title"] == "Pending user row"
def test_omit_exclude_hidden_still_returns_default_hidden_rows(monkeypatch):
+20 -7
View File
@@ -85,6 +85,16 @@ def make_session_tracked(created_list, ws=None):
return sid, pathlib.Path(d["session"]["workspace"])
def _make_session_visible(sid):
data, status = post("/api/chat/start", {
"session_id": sid,
"message": "visible row",
"model": "openai/gpt-5.4-mini",
})
assert status == 200, f"chat/start failed with {status}: {data}"
get(f"/api/chat/cancel?stream_id={urllib.parse.quote(data['stream_id'])}")
# ──────────────────────────────────────────────
# Health check (prerequisite for all tests)
@@ -124,7 +134,13 @@ def test_session_create_and_load():
sid = data["session"]["session_id"]
assert len(sid) == 12 # uuid4().hex[:12]
# Give it a title so it's visible in the session list (empty Untitled sessions are filtered)
# Load it directly
loaded = get(f"/api/session?session_id={sid}")
assert loaded["session"]["session_id"] == sid
assert loaded["session"]["messages"] == []
# Give it a real message so the default sidebar route keeps it visible.
_make_session_visible(sid)
post("/api/session/rename", {"session_id": sid, "title": "test-create-verify"})
# Verify it appears in /api/sessions list
@@ -132,11 +148,6 @@ def test_session_create_and_load():
sids = [s["session_id"] for s in sessions["sessions"]]
assert sid in sids, f"New session {sid} not in sessions list"
# Load it directly
loaded = get(f"/api/session?session_id={sid}")
assert loaded["session"]["session_id"] == sid
assert loaded["session"]["messages"] == []
# Cleanup
post("/api/session/delete", {"session_id": sid})
@@ -207,14 +218,16 @@ def test_session_delete_nonexistent():
def test_sessions_list_sorted():
"""Sessions list should be sorted most-recently-updated first."""
# Create two sessions with a title so they're visible (empty Untitled sessions are filtered)
# Create two sessions with a real message so the default sidebar route keeps them visible.
a, _ = post("/api/session/new", {})
time.sleep(0.05)
b, _ = post("/api/session/new", {})
sid_a = a["session"]["session_id"]
sid_b = b["session"]["session_id"]
_make_session_visible(sid_a)
post("/api/session/rename", {"session_id": sid_a, "title": "test-sort-a"})
time.sleep(0.05)
_make_session_visible(sid_b)
post("/api/session/rename", {"session_id": sid_b, "title": "test-sort-b"})
sessions = get("/api/sessions")
+10 -8
View File
@@ -1,7 +1,7 @@
"""
Sprint 15 Tests: session projects (CRUD, move, backward compat).
"""
import json, urllib.error, urllib.request
import json, urllib.error, urllib.parse, urllib.request
from tests._pytest_port import BASE
@@ -30,12 +30,13 @@ def make_session(created_list):
def _make_session_visible(sid):
from api.models import Session
session = Session.load(sid)
assert session is not None
session.messages = [{"role": "user", "content": "visible row", "timestamp": 1.0}]
session.save()
d, status = post("/api/chat/start", {
"session_id": sid,
"message": "visible row",
"model": "openai/gpt-5.4-mini",
})
assert status == 200, f"chat/start failed with {status}: {d}"
get(f"/api/chat/cancel?stream_id={urllib.parse.quote(d['stream_id'])}")
def make_project(created_list, name="Test Project", color=None):
@@ -226,7 +227,8 @@ def test_compact_includes_project_id():
sids = []
try:
sid, sess = make_session(sids)
# Give it a title so it appears in the list
# Give it a real message so the default sidebar route keeps it visible.
_make_session_visible(sid)
post("/api/session/rename", {"session_id": sid, "title": "Compat Test"})
dl, _ = get("/api/sessions")
match = [s for s in dl["sessions"] if s["session_id"] == sid]