47 lines
1.5 KiB
Python
47 lines
1.5 KiB
Python
"""Tests for orac.followup: recent-activity tracker + screener rate limit."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import time
|
|
|
|
from orac import followup
|
|
|
|
|
|
def test_untouched_channel_is_not_recent() -> None:
|
|
followup.reset()
|
|
assert followup.was_recent("unused", window_s=60.0) is False
|
|
assert followup.last_interaction_age("unused") is None
|
|
|
|
|
|
def test_touch_then_was_recent_within_window() -> None:
|
|
followup.reset()
|
|
followup.touch("Public")
|
|
assert followup.was_recent("Public", window_s=60.0) is True
|
|
age = followup.last_interaction_age("Public")
|
|
assert age is not None and age < 1.0
|
|
|
|
|
|
def test_was_recent_expires_after_window() -> None:
|
|
followup.reset()
|
|
followup.touch("Public")
|
|
# Immediately check with a zero-width window — should not count as recent.
|
|
time.sleep(0.01)
|
|
assert followup.was_recent("Public", window_s=0.001) is False
|
|
|
|
|
|
def test_screener_ok_rate_limits_per_channel() -> None:
|
|
followup.reset()
|
|
# First call allowed
|
|
assert followup.screener_ok("Public", min_interval_s=0.5) is True
|
|
# Immediate second call blocked
|
|
assert followup.screener_ok("Public", min_interval_s=0.5) is False
|
|
# Different channel not blocked
|
|
assert followup.screener_ok("#general", min_interval_s=0.5) is True
|
|
|
|
|
|
def test_screener_ok_allows_after_interval() -> None:
|
|
followup.reset()
|
|
assert followup.screener_ok("Public", min_interval_s=0.05) is True
|
|
time.sleep(0.1)
|
|
assert followup.screener_ok("Public", min_interval_s=0.05) is True
|