myrmidon / python /tests /unit /services /test_scheduler_service.py
tek Atrust
chore(deploy): build monolithic server for Hugging Face
d5ef46f
Raw
History Blame Contribute Delete
2.97 kB
from datetime import UTC, datetime, timedelta, timezone
from unittest.mock import patch
import pytest
from apscheduler.triggers.cron import CronTrigger
from src.server.services.scheduler_service import is_hf_awake, scheduler_service
def test_is_hf_awake_boundary_conditions():
"""
Test boundary conditions for Hugging Face Sleep Awareness (00:18 ~ 06:41 CST).
"""
# 00:17 CST -> Awake (True)
cst_00_17 = datetime(2026, 6, 8, 0, 17, tzinfo=timezone(timedelta(hours=8)))
with patch("src.server.services.scheduler_service.datetime") as mock_datetime:
mock_datetime.now.return_value = cst_00_17.astimezone(UTC)
assert is_hf_awake() is True
# 00:18 CST -> Sleep (False)
cst_00_18 = datetime(2026, 6, 8, 0, 18, tzinfo=timezone(timedelta(hours=8)))
with patch("src.server.services.scheduler_service.datetime") as mock_datetime:
mock_datetime.now.return_value = cst_00_18.astimezone(UTC)
assert is_hf_awake() is False
# 06:41 CST -> Sleep (False)
cst_06_41 = datetime(2026, 6, 8, 6, 41, tzinfo=timezone(timedelta(hours=8)))
with patch("src.server.services.scheduler_service.datetime") as mock_datetime:
mock_datetime.now.return_value = cst_06_41.astimezone(UTC)
assert is_hf_awake() is False
# 06:42 CST -> Awake (True)
cst_06_42 = datetime(2026, 6, 8, 6, 42, tzinfo=timezone(timedelta(hours=8)))
with patch("src.server.services.scheduler_service.datetime") as mock_datetime:
mock_datetime.now.return_value = cst_06_42.astimezone(UTC)
assert is_hf_awake() is True
@pytest.mark.asyncio
async def test_scheduler_jobs_configuration():
"""
Verify scheduler jobs are configured using correct CronTriggers.
"""
# Initialize scheduler configuration
await scheduler_service._schedule_jobs()
jobs = scheduler_service._scheduler.get_jobs()
# Create mapping of job ids to their triggers
job_triggers = {job.id: job.trigger for job in jobs}
# Verify alice_auto_fetch daily cron schedule (CST 07:00 -> hour=7, minute=0)
alice_trigger = job_triggers.get("alice_auto_fetch_recurring")
assert isinstance(alice_trigger, CronTrigger)
assert str(alice_trigger.timezone) == "Asia/Taipei"
hour_field = next(f for f in alice_trigger.fields if f.name == "hour")
minute_field = next(f for f in alice_trigger.fields if f.name == "minute")
assert str(hour_field) == "7"
assert str(minute_field) == "0"
# Verify token_analysis daily cron schedule (CST 08:20 -> hour=8, minute=20)
token_trigger = job_triggers.get("token_analysis_recurring")
assert isinstance(token_trigger, CronTrigger)
assert str(token_trigger.timezone) == "Asia/Taipei"
token_hour_field = next(f for f in token_trigger.fields if f.name == "hour")
token_minute_field = next(f for f in token_trigger.fields if f.name == "minute")
assert str(token_hour_field) == "8"
assert str(token_minute_field) == "20"