Implement tab-scoped runs pagination state

This commit is contained in:
Abel Luck 2026-03-31 12:12:36 +02:00
parent dce67ea9e3
commit c834c3c254
6 changed files with 444 additions and 62 deletions

41
tests/test_tab_state.py Normal file
View file

@ -0,0 +1,41 @@
from __future__ import annotations
from datetime import UTC, datetime, timedelta
from repub.datastar import TabStateStore
def test_tab_state_store_tracks_page_state_per_tab_and_connection_count() -> None:
store = TabStateStore()
store.connect("tab-1")
store.connect("tab-1")
store.update_page_state(
"tab-1",
"runs",
lambda state: {**state, "completed_page": 2},
)
assert store.get_tab_state("tab-1") == {"runs": {"completed_page": 2}}
store.disconnect("tab-1")
assert store.get_tab_state("tab-1") == {"runs": {"completed_page": 2}}
store.disconnect("tab-1")
assert store.get_tab_state("tab-1") is None
def test_tab_state_store_cleans_only_stale_disconnected_tabs() -> None:
store = TabStateStore(clean_age_threshold=timedelta(hours=24))
now = datetime(2026, 3, 31, 12, 0, tzinfo=UTC)
store.connect("stale-tab", now=now - timedelta(days=2))
store.connect("fresh-tab", now=now)
removed = store.cleanup_stale(now=now)
assert removed == {"stale-tab"}
assert store.get_tab_state("stale-tab") is None
assert store.get_tab_state("fresh-tab") == {}