优化自动每日指令与扫码退出秘境
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import asyncio
|
||||
import json
|
||||
import logging
|
||||
import tempfile
|
||||
import unittest
|
||||
@@ -21,6 +22,8 @@ from app.danmu_queue import (
|
||||
COMMAND_ALLOWED_ROLE_DEFAULTS,
|
||||
BetterGIRunner,
|
||||
CommandHandler,
|
||||
Config,
|
||||
build_public_command_hints,
|
||||
)
|
||||
|
||||
|
||||
@@ -32,14 +35,17 @@ class DailyCommandIntegrationTests(unittest.IsolatedAsyncioTestCase):
|
||||
data={
|
||||
"commands": {
|
||||
"run": {"enabled": True, "aliases": ["执行", "跑"]},
|
||||
"daily": {"enabled": True, "aliases": ["自动每日"]},
|
||||
"daily": {
|
||||
"enabled": True,
|
||||
"aliases": ["自动每日", "每日", "日常", "做每日", "做日常"],
|
||||
},
|
||||
"switch_party": {
|
||||
"enabled": True,
|
||||
"aliases": ["切换队伍", "更换队伍"],
|
||||
"aliases": ["切换队伍", "更换队伍", "换队伍", "换队"],
|
||||
},
|
||||
"edit_party": {
|
||||
"enabled": True,
|
||||
"aliases": ["修改队员", "更换队员"],
|
||||
"aliases": ["修改队员", "更换队员", "换队员", "换角色"],
|
||||
},
|
||||
}
|
||||
},
|
||||
@@ -315,6 +321,86 @@ class DailyCommandIntegrationTests(unittest.IsolatedAsyncioTestCase):
|
||||
self.handler._split_command_text("修改队员芙宁娜纳西妲钟离雷电将军"),
|
||||
("修改队员", "芙宁娜纳西妲钟离雷电将军"),
|
||||
)
|
||||
self.assertEqual(
|
||||
self.handler._split_command_text("日常秘境 风本"),
|
||||
("日常", "秘境 风本"),
|
||||
)
|
||||
self.assertEqual(
|
||||
self.handler._split_command_text("换队永冻队"),
|
||||
("换队", "永冻队"),
|
||||
)
|
||||
self.assertEqual(
|
||||
self.handler._split_command_text("换角色芙宁娜纳西妲钟离雷电将军"),
|
||||
("换角色", "芙宁娜纳西妲钟离雷电将军"),
|
||||
)
|
||||
|
||||
def test_longest_new_alias_wins_for_contiguous_arguments(self):
|
||||
self.assertEqual(
|
||||
self.handler._split_command_text("换队员芙宁娜纳西妲钟离雷电将军"),
|
||||
("换队员", "芙宁娜纳西妲钟离雷电将军"),
|
||||
)
|
||||
|
||||
async def test_confirmed_login_announces_daily_and_party_usage(self):
|
||||
self.queue_mgr.state["login_status"] = "confirming"
|
||||
|
||||
await self.handler._cmd_confirm_login(123, "测试用户", "是")
|
||||
|
||||
self.assertEqual(self.broadcaster.broadcast.await_count, 2)
|
||||
first, second = self.broadcaster.broadcast.await_args_list
|
||||
self.assertIn("发送“每日”完成基础每日", first.args[0])
|
||||
self.assertTrue(first.kwargs["tts"])
|
||||
self.assertIn("每日 秘境 风本", second.args[0])
|
||||
self.assertIn("换队 永冻队", second.args[0])
|
||||
self.assertIn("换角色 四名角色", second.args[0])
|
||||
self.assertIn("执行 组名", second.args[0])
|
||||
self.assertFalse(second.kwargs["tts"])
|
||||
self.assertTrue(second.kwargs["danmu"])
|
||||
|
||||
def test_public_command_hints_are_sanitized_and_use_shortest_alias(self):
|
||||
config_data = {
|
||||
"commands": self.config.data["commands"],
|
||||
"bilibili": {"cookie": "secret"},
|
||||
}
|
||||
|
||||
hints = build_public_command_hints(config_data)
|
||||
|
||||
self.assertEqual(set(hints), {"daily", "switch_party", "edit_party"})
|
||||
self.assertEqual(hints["daily"]["preferred_alias"], "每日")
|
||||
self.assertEqual(hints["switch_party"]["preferred_alias"], "换队")
|
||||
self.assertEqual(hints["edit_party"]["preferred_alias"], "换角色")
|
||||
self.assertNotIn("bilibili", hints)
|
||||
|
||||
def test_new_command_alias_defaults_are_complete(self):
|
||||
config_path = self.root / "config.json"
|
||||
config_path.write_text(json.dumps({}), encoding="utf-8")
|
||||
|
||||
config = Config(str(config_path))
|
||||
|
||||
self.assertEqual(
|
||||
config.data["commands"]["daily"]["aliases"],
|
||||
["自动每日", "每日", "日常", "做每日", "做日常"],
|
||||
)
|
||||
self.assertEqual(
|
||||
config.data["commands"]["switch_party"]["aliases"],
|
||||
["切换队伍", "更换队伍", "换队伍", "换队"],
|
||||
)
|
||||
self.assertEqual(
|
||||
config.data["commands"]["edit_party"]["aliases"],
|
||||
["修改队员", "更换队员", "换队员", "换角色"],
|
||||
)
|
||||
|
||||
def test_disabled_command_hint_has_no_public_alias(self):
|
||||
config_data = {
|
||||
"commands": {
|
||||
"daily": {"enabled": False, "aliases": ["每日"]},
|
||||
}
|
||||
}
|
||||
|
||||
hints = build_public_command_hints(config_data)
|
||||
|
||||
self.assertFalse(hints["daily"]["enabled"])
|
||||
self.assertEqual(hints["daily"]["aliases"], [])
|
||||
self.assertEqual(hints["daily"]["preferred_alias"], "")
|
||||
|
||||
def test_new_command_permissions_match_run(self):
|
||||
for key in ("daily", "switch_party", "edit_party"):
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
import json
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
class LoginScriptDomainExitTests(unittest.TestCase):
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
cls.script_dir = Path(__file__).resolve().parents[1] / "integrations" / "扫码上号"
|
||||
cls.source = (cls.script_dir / "main.js").read_text(encoding="utf-8")
|
||||
cls.settings = json.loads((cls.script_dir / "settings.json").read_text(encoding="utf-8"))
|
||||
cls.manifest = json.loads((cls.script_dir / "manifest.json").read_text(encoding="utf-8"))
|
||||
|
||||
def test_domain_exit_requires_specific_ocr_text_before_click(self):
|
||||
self.assertIn('combinedText.includes("退出秘境")', self.source)
|
||||
self.assertIn('result.text.includes("确认") && result.x >= 900', self.source)
|
||||
|
||||
def test_legacy_and_default_confirm_coordinates_are_corrected(self):
|
||||
defaults = {
|
||||
item.get("name"): item.get("default")
|
||||
for item in self.settings
|
||||
if isinstance(item, dict) and item.get("name")
|
||||
}
|
||||
self.assertEqual(defaults["confirmExitX"], "1164")
|
||||
self.assertEqual(defaults["confirmExitY"], "757")
|
||||
self.assertIn("confirmExitX === 830 && confirmExitY === 600", self.source)
|
||||
|
||||
def test_private_login_script_version_is_updated(self):
|
||||
self.assertEqual(self.manifest["version"], "1.1")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user