Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 17 additions & 8 deletions backend/tests/agent/test_rate_limiter.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,18 @@
from agent.rate_limiter import RateLimiter, PACIFIC_TZ

class TestRateLimiter(unittest.TestCase):
def test_daily_reset_logic(self):
@patch('agent.rate_limiter.datetime')
def test_daily_reset_logic(self, mock_datetime):
"""Test that daily reset occurs at midnight Pacific Time."""
# Setup mock time
now_date = datetime(2023, 10, 2, 12, 0, 0, tzinfo=PACIFIC_TZ)
mock_datetime.now.return_value = now_date

limiter = RateLimiter()

# Manually set last reset date to yesterday
yesterday = datetime.now(PACIFIC_TZ).date() - timedelta(days=1)
limiter._last_reset_date = yesterday
yesterday_date = now_date.date() - timedelta(days=1)
limiter._last_reset_date = yesterday_date

# Add some dummy requests
limiter._requests_per_day.append(12345)
Expand All @@ -24,15 +29,19 @@ def test_daily_reset_logic(self):

# Should be cleared
self.assertEqual(len(limiter._requests_per_day), 0)
self.assertEqual(limiter._last_reset_date, datetime.now(PACIFIC_TZ).date())
self.assertEqual(limiter._last_reset_date, now_date.date())

def test_no_reset_same_day(self):
@patch('agent.rate_limiter.datetime')
def test_no_reset_same_day(self, mock_datetime):
"""Test that daily reset does not occur on the same day."""
# Setup mock time
now_date = datetime(2023, 10, 2, 12, 0, 0, tzinfo=PACIFIC_TZ)
mock_datetime.now.return_value = now_date

limiter = RateLimiter()

# Set last reset date to today
today = datetime.now(PACIFIC_TZ).date()
limiter._last_reset_date = today
limiter._last_reset_date = now_date.date()

# Add some dummy requests
limiter._requests_per_day.append(12345)
Expand All @@ -43,7 +52,7 @@ def test_no_reset_same_day(self):

# Should NOT be cleared
self.assertEqual(len(limiter._requests_per_day), 1)
self.assertEqual(limiter._last_reset_date, today)
self.assertEqual(limiter._last_reset_date, now_date.date())

if __name__ == "__main__":
unittest.main()
45 changes: 45 additions & 0 deletions backend/tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,51 @@
sys.path.insert(0, str(SRC_PATH))


# =============================================================================
# Pytest Hooks
# =============================================================================

def pytest_addoption(parser):
"""Add custom command line options."""
parser.addoption(
"--only-extended",
action="store_true",
default=False,
help="run only extended tests",
)


def pytest_configure(config):
"""Configure custom markers."""
config.addinivalue_line("markers", "extended: mark test as extended test")


def pytest_collection_modifyitems(config, items):
"""Filter tests based on --only-extended flag."""
if config.getoption("--only-extended"):
# --only-extended given: remove tests NOT marked extended
selected = []
deselected = []
for item in items:
if "extended" in item.keywords:
selected.append(item)
else:
deselected.append(item)
items[:] = selected
config.hook.pytest_deselected(items=deselected)
else:
# --only-extended NOT given: remove tests marked extended
selected = []
deselected = []
for item in items:
if "extended" not in item.keywords:
selected.append(item)
else:
deselected.append(item)
items[:] = selected
config.hook.pytest_deselected(items=deselected)


# =============================================================================
# State Fixtures
# =============================================================================
Expand Down
2 changes: 2 additions & 0 deletions backend/tests/test_utils_hypothesis.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
import pytest
from agent.utils import insert_citation_markers

pytestmark = pytest.mark.extended

@settings(suppress_health_check=[HealthCheck.too_slow])
@given(
text=st.text(min_size=1, max_size=500),
Expand Down