新增功能
This commit is contained in:
@@ -24,7 +24,13 @@ try:
|
||||
except ImportError:
|
||||
QApplication = None
|
||||
else:
|
||||
from wechat_gui_qt import APP_QSS, CapsuleWindow, MainWindow, QueuePage
|
||||
from wechat_gui_qt import (
|
||||
APP_QSS,
|
||||
CapsuleWindow,
|
||||
MainWindow,
|
||||
QueuePage,
|
||||
SettingsPage,
|
||||
)
|
||||
|
||||
|
||||
@skipUnless(QApplication is not None, "当前测试环境未安装 PySide6")
|
||||
@@ -210,6 +216,104 @@ class QueuePageDeleteTest(TestCase):
|
||||
|
||||
self.assertEqual(emitted, [[full_key]])
|
||||
|
||||
def test_retry_action_emits_only_a_real_retry_wait_task(self):
|
||||
full_key = "72" * 40
|
||||
with tempfile.TemporaryDirectory() as folder:
|
||||
root = Path(folder)
|
||||
(root / "pending_replies.json").write_text(
|
||||
json.dumps({full_key: {
|
||||
"display_name": "陈女士@微信",
|
||||
"created_at": 1,
|
||||
"stage": "retry_wait",
|
||||
"resume_failures": 1,
|
||||
}}),
|
||||
encoding="utf-8",
|
||||
)
|
||||
with mock.patch("wechat_gui_qt.SCRIPT_DIR", root):
|
||||
page = QueuePage()
|
||||
emitted = []
|
||||
page.retryTasksRequested.connect(emitted.append)
|
||||
page.queue_table.selectRow(0)
|
||||
page._select_visible_task(0)
|
||||
self.assertTrue(page.retry_queue_button.isEnabled())
|
||||
page._request_retry_selected()
|
||||
page.deleteLater()
|
||||
self.app.processEvents()
|
||||
|
||||
self.assertEqual(emitted, [[full_key]])
|
||||
|
||||
|
||||
@skipUnless(QApplication is not None, "当前测试环境未安装 PySide6")
|
||||
class SettingsSendModeTest(TestCase):
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
cls.app = QApplication.instance() or QApplication([])
|
||||
cls.app.setStyleSheet(APP_QSS)
|
||||
|
||||
def test_mode_buttons_are_exclusive_reflect_settings_and_emit_values(self):
|
||||
settings = MainWindow._runtime_defaults()
|
||||
settings["send_mode"] = "review"
|
||||
page = SettingsPage(settings)
|
||||
self.assertFalse(page.auto_send_mode.isChecked())
|
||||
self.assertTrue(page.review_send_mode.isChecked())
|
||||
self.assertEqual(page.values()["send_mode"], "review")
|
||||
|
||||
page.auto_send_mode.click()
|
||||
self.app.processEvents()
|
||||
|
||||
self.assertTrue(page.auto_send_mode.isChecked())
|
||||
self.assertFalse(page.review_send_mode.isChecked())
|
||||
self.assertEqual(page.values()["send_mode"], "auto")
|
||||
page.deleteLater()
|
||||
self.app.processEvents()
|
||||
|
||||
def test_window_redetection_reports_the_real_detected_handle(self):
|
||||
page = SettingsPage(MainWindow._runtime_defaults())
|
||||
with (
|
||||
mock.patch("wechat_bot.find_wx_hwnd", return_value=0x1234),
|
||||
mock.patch("wechat_gui_qt.QMessageBox.information") as information,
|
||||
):
|
||||
page._redetect_wecom_window()
|
||||
|
||||
self.assertIn("0x00001234", information.call_args.args[2])
|
||||
page.deleteLater()
|
||||
self.app.processEvents()
|
||||
|
||||
def test_builtin_risk_categories_are_read_only_and_rule_management_emits(self):
|
||||
page = SettingsPage(MainWindow._runtime_defaults())
|
||||
self.assertTrue(page.risk_rule_buttons)
|
||||
self.assertTrue(all(not button.isEnabled() for button in page.risk_rule_buttons))
|
||||
emitted = []
|
||||
page.securityRulesRequested.connect(lambda: emitted.append(True))
|
||||
|
||||
page.manage_rules_button.click()
|
||||
self.app.processEvents()
|
||||
|
||||
self.assertEqual(emitted, [True])
|
||||
page.deleteLater()
|
||||
self.app.processEvents()
|
||||
|
||||
def test_rule_management_navigation_targets_ai_security_policy(self):
|
||||
window = MainWindow.__new__(MainWindow)
|
||||
QMainWindow.__init__(window)
|
||||
tab_buttons = [mock.Mock(), mock.Mock(), mock.Mock()]
|
||||
window.persona_page = SimpleNamespace(
|
||||
persona_tab_buttons=tab_buttons,
|
||||
_focus_persona_tab=mock.Mock(),
|
||||
)
|
||||
window.show_page = mock.Mock()
|
||||
with mock.patch(
|
||||
"wechat_gui_qt.QTimer.singleShot",
|
||||
side_effect=lambda _delay, callback: callback(),
|
||||
):
|
||||
window._show_security_rules()
|
||||
|
||||
window.show_page.assert_called_once_with(3)
|
||||
tab_buttons[2].setChecked.assert_called_once_with(True)
|
||||
window.persona_page._focus_persona_tab.assert_called_once_with("安全策略")
|
||||
window.deleteLater()
|
||||
self.app.processEvents()
|
||||
|
||||
|
||||
@skipUnless(QApplication is not None, "当前测试环境未安装 PySide6")
|
||||
class MainWindowMinimizeTest(TestCase):
|
||||
@@ -227,6 +331,7 @@ class MainWindowMinimizeTest(TestCase):
|
||||
self.window._saved_geometry = None
|
||||
self.window._was_maximized = False
|
||||
self.window._portal_was_visible = False
|
||||
self.window.runtime_settings = {"minimize_on_close": True}
|
||||
self.window.capsule = CapsuleWindow()
|
||||
|
||||
self.window.stack = QStackedWidget()
|
||||
|
||||
Reference in New Issue
Block a user