Files
odysseus/tests/test_poll_endpoint_no_task_interrupt.py
T

67 lines
1.6 KiB
Python

"""Regression tests for polling endpoints and foreground task interruption."""
import asyncio
import importlib
def _reload_gate():
import src.interactive_gate as ig
importlib.reload(ig)
return ig
def test_tasks_runs_recent_is_passive():
ig = _reload_gate()
assert not ig.should_track_interactive_request(
"/api/tasks/runs/recent", "GET"
)
def test_tasks_runs_recent_does_not_affect_other_task_paths():
ig = _reload_gate()
# A neighboring mutating path must remain interactive.
assert ig.should_track_interactive_request(
"/api/tasks/runs/recent/something", "POST"
)
def test_heartbeat_does_not_stop_background_tasks_when_gate_disabled(monkeypatch):
ig = _reload_gate()
monkeypatch.setenv("BACKGROUND_TASK_FOREGROUND_GATE", "false")
stop_calls = []
async def fake_stop_background_tasks_for_foreground(*, reason):
stop_calls.append(reason)
result = asyncio.run(
ig.maybe_stop_background_tasks_for_heartbeat(
fake_stop_background_tasks_for_foreground
)
)
assert result is False
assert stop_calls == []
def test_heartbeat_stops_background_tasks_when_gate_enabled(monkeypatch):
ig = _reload_gate()
monkeypatch.delenv("BACKGROUND_TASK_FOREGROUND_GATE", raising=False)
stop_calls = []
async def fake_stop_background_tasks_for_foreground(*, reason):
stop_calls.append(reason)
result = asyncio.run(
ig.maybe_stop_background_tasks_for_heartbeat(
fake_stop_background_tasks_for_foreground
)
)
assert result is True
assert stop_calls == ["browser heartbeat"]