限制待收听留言周期提醒来源
This commit is contained in:
@@ -1,7 +1,6 @@
|
|||||||
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
||||||
from apscheduler.triggers.interval import IntervalTrigger
|
from apscheduler.triggers.interval import IntervalTrigger
|
||||||
from banban.service.pending_voice_message import pending_voice_message_service
|
from banban.service.pending_voice_message import pending_voice_message_service
|
||||||
from services.offline_audio_cache import offline_audio_cache
|
|
||||||
from utils.logger import session_logger as logger
|
from utils.logger import session_logger as logger
|
||||||
|
|
||||||
class TaskScheduler:
|
class TaskScheduler:
|
||||||
@@ -35,11 +34,9 @@ class TaskScheduler:
|
|||||||
async def _execute_task(self):
|
async def _execute_task(self):
|
||||||
try:
|
try:
|
||||||
pending_devices = await pending_voice_message_service.list_devices_with_pending()
|
pending_devices = await pending_voice_message_service.list_devices_with_pending()
|
||||||
audio_cache = await offline_audio_cache.get_all_audio_cache()
|
device_ids = list(dict.fromkeys(pending_devices))
|
||||||
fallback_devices = list(audio_cache.keys()) if audio_cache else []
|
|
||||||
device_ids = list(dict.fromkeys([*pending_devices, *fallback_devices]))
|
|
||||||
if not device_ids:
|
if not device_ids:
|
||||||
logger.warning("", "", "无离线音频缓存,跳过本次执行")
|
logger.warning("", "", "无待收听留言,跳过本次执行")
|
||||||
return
|
return
|
||||||
for device_id in device_ids:
|
for device_id in device_ids:
|
||||||
sent = await pending_voice_message_service.notify_device_pending_message(
|
sent = await pending_voice_message_service.notify_device_pending_message(
|
||||||
|
|||||||
@@ -87,13 +87,28 @@ async def test_scheduler_sends_pending_notice_without_websocket_check(monkeypatc
|
|||||||
calls.append(target_device_id)
|
calls.append(target_device_id)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
class FakeOfflineAudioCache:
|
|
||||||
async def get_all_audio_cache(self):
|
|
||||||
return {}
|
|
||||||
|
|
||||||
monkeypatch.setattr("services.scheduler.pending_voice_message_service", FakePendingVoiceService())
|
monkeypatch.setattr("services.scheduler.pending_voice_message_service", FakePendingVoiceService())
|
||||||
monkeypatch.setattr("services.scheduler.offline_audio_cache", FakeOfflineAudioCache())
|
|
||||||
|
|
||||||
await scheduler._execute_task()
|
await scheduler._execute_task()
|
||||||
|
|
||||||
assert calls == ["TalkingQ_device001"]
|
assert calls == ["TalkingQ_device001"]
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_scheduler_skips_notice_when_no_pending_messages(monkeypatch):
|
||||||
|
scheduler = TaskScheduler()
|
||||||
|
calls = []
|
||||||
|
|
||||||
|
class FakePendingVoiceService:
|
||||||
|
async def list_devices_with_pending(self):
|
||||||
|
return []
|
||||||
|
|
||||||
|
async def notify_device_pending_message(self, *, target_device_id):
|
||||||
|
calls.append(target_device_id)
|
||||||
|
return True
|
||||||
|
|
||||||
|
monkeypatch.setattr("services.scheduler.pending_voice_message_service", FakePendingVoiceService())
|
||||||
|
|
||||||
|
await scheduler._execute_task()
|
||||||
|
|
||||||
|
assert calls == []
|
||||||
|
|||||||
Reference in New Issue
Block a user