mirror of
https://github.com/Nezumi-2711/astrbot_plugin_qq_group_daily_analysis.git
synced 2026-09-22 20:01:04 +00:00
136 lines
5.1 KiB
Python
136 lines
5.1 KiB
Python
import sys
|
|
import asyncio
|
|
import unittest
|
|
from unittest.mock import MagicMock, AsyncMock, patch
|
|
|
|
# Add paths for Docker environment
|
|
sys.path.append("/AstrBot")
|
|
sys.path.append("/AstrBot/data/plugins") # Ensure we can import the plugin as a package
|
|
|
|
# Import real modules using package path
|
|
try:
|
|
from astrbot_plugin_qq_group_daily_analysis.src.scheduler.auto_scheduler import (
|
|
AutoScheduler,
|
|
)
|
|
from astrbot_plugin_qq_group_daily_analysis.main import QQGroupDailyAnalysis
|
|
from astrbot.api.event import filter
|
|
except ImportError as e:
|
|
print(f"ImportError in Docker: {e}")
|
|
# Fallback to local paths if testing locally
|
|
sys.path.append(r"c:\Helianthus\astrpro\AstrBot-master\data\plugins")
|
|
from astrbot_plugin_qq_group_daily_analysis.src.scheduler.auto_scheduler import (
|
|
AutoScheduler,
|
|
)
|
|
from astrbot_plugin_qq_group_daily_analysis.main import QQGroupDailyAnalysis
|
|
from astrbot.api.event import filter
|
|
|
|
|
|
class TestPhase3Docker(unittest.IsolatedAsyncioTestCase):
|
|
async def test_schedule_jobs(self):
|
|
"""Test that schedule_jobs correctly adds jobs to APScheduler."""
|
|
# Mocks for Logic only
|
|
config_manager = MagicMock()
|
|
config_manager.get_enable_auto_analysis.return_value = True
|
|
config_manager.get_auto_analysis_time.return_value = ["09:00", "18:30"]
|
|
|
|
context = MagicMock()
|
|
scheduler = MagicMock()
|
|
context.cron_manager.scheduler = scheduler
|
|
|
|
# Instantiate AutoScheduler
|
|
auto_scheduler = AutoScheduler(
|
|
config_manager,
|
|
MagicMock(), # message_handler
|
|
MagicMock(), # analyzer
|
|
MagicMock(), # report_generator
|
|
MagicMock(), # bot_manager
|
|
MagicMock(), # retry_manager
|
|
)
|
|
|
|
# Call schedule_jobs
|
|
auto_scheduler.schedule_jobs(context)
|
|
|
|
# Verify add_job was called twice
|
|
self.assertEqual(scheduler.add_job.call_count, 2)
|
|
|
|
# Verify call arguments
|
|
args, kwargs = scheduler.add_job.call_args_list[0]
|
|
self.assertEqual(
|
|
kwargs["id"], "astrbot_plugin_qq_group_daily_analysis_trigger_0"
|
|
)
|
|
# Verify trigger via string representation to avoid attribute errors with real CronTrigger objects
|
|
trigger_str = str(kwargs["trigger"])
|
|
self.assertTrue(
|
|
"hour='9'" in trigger_str or "hour=9" in trigger_str,
|
|
f"Trigger mismatch: {trigger_str}",
|
|
)
|
|
self.assertTrue(
|
|
"minute='0'" in trigger_str or "minute=0" in trigger_str,
|
|
f"Trigger mismatch: {trigger_str}",
|
|
)
|
|
|
|
args, kwargs = scheduler.add_job.call_args_list[1]
|
|
self.assertEqual(
|
|
kwargs["id"], "astrbot_plugin_qq_group_daily_analysis_trigger_1"
|
|
)
|
|
trigger_str = str(kwargs["trigger"])
|
|
self.assertTrue(
|
|
"hour='18'" in trigger_str or "hour=18" in trigger_str,
|
|
f"Trigger mismatch: {trigger_str}",
|
|
)
|
|
self.assertTrue(
|
|
"minute='30'" in trigger_str or "minute=30" in trigger_str,
|
|
f"Trigger mismatch: {trigger_str}",
|
|
)
|
|
|
|
async def test_main_on_platform_loaded(self):
|
|
"""Test that main.py's on_platform_loaded triggers job scheduling."""
|
|
context = MagicMock()
|
|
config = MagicMock()
|
|
|
|
# Patch dependencies in main.py using full package path
|
|
with (
|
|
patch(
|
|
"astrbot_plugin_qq_group_daily_analysis.main.ConfigManager"
|
|
) as MockConfigManager,
|
|
patch(
|
|
"astrbot_plugin_qq_group_daily_analysis.main.BotManager"
|
|
) as MockBotManager,
|
|
patch(
|
|
"astrbot_plugin_qq_group_daily_analysis.main.MessageAnalyzer"
|
|
) as MockMessageAnalyzer,
|
|
patch(
|
|
"astrbot_plugin_qq_group_daily_analysis.main.ReportGenerator"
|
|
) as MockReportGenerator,
|
|
patch(
|
|
"astrbot_plugin_qq_group_daily_analysis.main.RetryManager"
|
|
) as MockRetryManager,
|
|
patch(
|
|
"astrbot_plugin_qq_group_daily_analysis.main.AutoScheduler"
|
|
) as MockAutoScheduler,
|
|
):
|
|
mock_auto_scheduler_instance = MockAutoScheduler.return_value
|
|
mock_config_instance = MockConfigManager.return_value
|
|
mock_config_instance.get_enable_auto_analysis.return_value = True
|
|
|
|
mock_bot_manager_instance = MockBotManager.return_value
|
|
mock_bot_manager_instance.initialize_from_config = AsyncMock(
|
|
return_value={"test_platform": MagicMock()}
|
|
)
|
|
|
|
# Instantiate plugin
|
|
plugin = QQGroupDailyAnalysis(context, config)
|
|
|
|
# Call on_platform_loaded
|
|
event = MagicMock()
|
|
await plugin.on_platform_loaded(event)
|
|
|
|
# Verify initialized_from_config called
|
|
mock_bot_manager_instance.initialize_from_config.assert_called_once()
|
|
# Verify schedule_jobs called
|
|
mock_auto_scheduler_instance.schedule_jobs.assert_called_once_with(context)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|