diff options
Diffstat (limited to 'tests/test_polling_api.py')
| -rw-r--r-- | tests/test_polling_api.py | 31 |
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 |
