Files
outlookEmailPlus/tests/test_settings_scheduler_reload.py
T

50 lines
1.9 KiB
Python

import unittest
from unittest.mock import MagicMock, patch
from tests._import_app import clear_login_attempts, import_web_app_module
class SettingsSchedulerReloadTests(unittest.TestCase):
"""
对齐:PRD-00007 / FD-00007 / TDD-00007
目标:更新 settings 触发调度器重载时,必须把真实 Flask app 实例传给 scheduler jobs。
"""
@classmethod
def setUpClass(cls):
cls.module = import_web_app_module()
cls.app = cls.module.app
def setUp(self):
with self.app.app_context():
clear_login_attempts()
def _login(self, client, password: str = "testpass123"):
resp = client.post("/login", json={"password": password})
self.assertEqual(resp.status_code, 200)
data = resp.get_json()
self.assertEqual(data.get("success"), True)
def test_update_settings_reload_scheduler_passes_real_app_object(self):
client = self.app.test_client()
self._login(client)
fake_scheduler = MagicMock(name="scheduler")
with patch("outlook_web.services.scheduler.get_scheduler_instance", return_value=fake_scheduler), patch(
"outlook_web.services.scheduler.configure_scheduler_jobs"
) as configure_jobs:
resp = client.put("/api/settings", json={"telegram_poll_interval": 60})
self.assertEqual(resp.status_code, 200)
payload = resp.get_json() or {}
self.assertEqual(payload.get("success"), True)
self.assertEqual(payload.get("scheduler_reloaded"), True)
self.assertTrue(configure_jobs.called, "预期触发调度器重载,但 configure_scheduler_jobs 未被调用")
args, kwargs = configure_jobs.call_args
self.assertEqual(kwargs, {}, "此处调用应使用位置参数,避免未来签名变化导致静默错配")
self.assertIs(args[0], fake_scheduler)
self.assertIs(args[1], self.app)