test_admin_panel.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. from datetime import UTC, datetime, timedelta
  2. from types import SimpleNamespace
  3. from unittest.mock import AsyncMock
  4. async def test_private_admin_can_toggle_identity_notifications(app_modules, monkeypatch):
  5. panel = app_modules.load("wbb.modules.admin_panel")
  6. apply_settings = AsyncMock(return_value={})
  7. show_section = AsyncMock()
  8. monkeypatch.setattr(panel, "ensure_permission", AsyncMock())
  9. monkeypatch.setattr(
  10. panel,
  11. "get_automation_settings",
  12. AsyncMock(
  13. return_value={
  14. "identity_monitor": {"enabled": True, "notify_in_chat": False}
  15. }
  16. ),
  17. )
  18. monkeypatch.setattr(panel, "apply_automation_settings", apply_settings)
  19. monkeypatch.setattr(panel, "record_audit", AsyncMock())
  20. monkeypatch.setattr(panel, "_show_section", show_section)
  21. query = SimpleNamespace(
  22. from_user=SimpleNamespace(id=88, first_name="管理员"),
  23. answer=AsyncMock(),
  24. )
  25. panel._confirmations["identity-toggle"] = {
  26. "actor_id": 88,
  27. "direct": {
  28. "action": "identity_monitor_toggle",
  29. "chat_id": -100,
  30. "key": "notify_in_chat",
  31. },
  32. "expires_at": datetime.now(UTC) + timedelta(minutes=1),
  33. }
  34. await panel._execute_direct_confirmation(query, "identity-toggle")
  35. apply_settings.assert_awaited_once_with(
  36. -100,
  37. {"identity_monitor": {"enabled": True, "notify_in_chat": True}},
  38. actor_id=88,
  39. )
  40. show_section.assert_awaited_once_with(query, -100, "identity")
  41. query.answer.assert_awaited_once_with("操作成功。", show_alert=True)