summaryrefslogtreecommitdiff
path: root/tests/test_polling_api.py
diff options
context:
space:
mode:
authorChristian Cleberg <[email protected]>2026-04-11 14:23:01 -0500
committerChristian Cleberg <[email protected]>2026-04-11 14:23:01 -0500
commite2a9508577f3c0d69dccad0c098a6da7fd95a363 (patch)
tree19b81365f749f4c30c9987b0d365409e0da361eb /tests/test_polling_api.py
parent9d88cda2826224aab5cda15424453ea1cad75ae0 (diff)
downloadhutch-stats-e2a9508577f3c0d69dccad0c098a6da7fd95a363.tar.gz
hutch-stats-e2a9508577f3c0d69dccad0c098a6da7fd95a363.tar.bz2
hutch-stats-e2a9508577f3c0d69dccad0c098a6da7fd95a363.zip
feat: run an initial poll when scheduler starts
Diffstat (limited to 'tests/test_polling_api.py')
-rw-r--r--tests/test_polling_api.py31
1 files changed, 31 insertions, 0 deletions
diff --git a/tests/test_polling_api.py b/tests/test_polling_api.py
index 75270e0..b752524 100644
--- a/tests/test_polling_api.py
+++ b/tests/test_polling_api.py
@@ -19,6 +19,7 @@ class InsertingPoller:
service = type("Service", (), {"client": _Closable()})()
self.todo_service = service
self.git_service = service
+ self.tracked_poll_calls: list[str] = []
def track_actor_request(self, db, actor: str, *, update_last_requested: bool = True):
tracked_actor = db.scalar(select(TrackedActor).where(TrackedActor.actor == actor))
@@ -47,6 +48,12 @@ class InsertingPoller:
db.commit()
return 1
+ def poll_tracked_actors(self, db, default_actor: str | None = None) -> dict[str, int]:
+ if default_actor is not None:
+ self.tracked_poll_calls.append(default_actor)
+ return {default_actor: self.poll_all(db, default_actor)}
+ return {}
+
class FailingPoller:
def __init__(self) -> None:
@@ -65,6 +72,9 @@ class FailingPoller:
def poll_all(self, db, actor: str) -> int:
raise SourceHutClientError("boom")
+ def poll_tracked_actors(self, db, default_actor: str | None = None) -> dict[str, int]:
+ raise SourceHutClientError("boom")
+
def test_manual_poll_uses_same_database_session(settings: Settings, db_engine, session_factory) -> None:
app = create_app(settings, engine=db_engine, session_factory=session_factory, poller=InsertingPoller())
@@ -89,3 +99,24 @@ def test_manual_poll_maps_sourcehut_failures_to_502(settings: Settings, db_engin
assert response.status_code == 502
assert "SourceHut polling failed" in response.json()["detail"]
+
+
+def test_scheduler_runs_initial_poll_on_startup(settings: Settings, db_engine, session_factory) -> None:
+ scheduler_settings = settings.model_copy(update={"enable_scheduler": True})
+ poller = InsertingPoller()
+ app = create_app(scheduler_settings, engine=db_engine, session_factory=session_factory, poller=poller)
+
+ with TestClient(app):
+ pass
+
+ assert poller.tracked_poll_calls == ["~ccleberg"]
+
+
+def test_startup_poll_failure_does_not_block_app_start(settings: Settings, db_engine, session_factory) -> None:
+ scheduler_settings = settings.model_copy(update={"enable_scheduler": True})
+ app = create_app(scheduler_settings, engine=db_engine, session_factory=session_factory, poller=FailingPoller())
+
+ with TestClient(app) as client:
+ response = client.get("/health")
+
+ assert response.status_code == 200