新增功能

This commit is contained in:
Your Name
2026-08-19 17:35:59 +08:00
parent f8c78739e7
commit 05050ff6f3
188 changed files with 18838 additions and 5337 deletions
+106 -1
View File
@@ -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()