83 lines
3.0 KiB
Python
83 lines
3.0 KiB
Python
#!/usr/bin/env python3
|
||
from __future__ import annotations
|
||
|
||
import unittest
|
||
from argparse import Namespace
|
||
from pathlib import Path
|
||
from tempfile import TemporaryDirectory
|
||
|
||
from wechat_bot_bridge import WechatXibaoBridge
|
||
|
||
|
||
class WechatBotBridgeSkipTests(unittest.TestCase):
|
||
def _new_bridge(self, tmp_dir: str) -> WechatXibaoBridge:
|
||
base = Path(tmp_dir)
|
||
args = Namespace(
|
||
wechat_base_url="http://127.0.0.1:18238",
|
||
xibao_base_url="http://127.0.0.1:8787",
|
||
wechat_auth_key="",
|
||
wechat_session_file=str(base / "session.json"),
|
||
sync_count=30,
|
||
poll_interval=2.0,
|
||
max_images=3,
|
||
once=True,
|
||
dry_run=True,
|
||
allow_from="",
|
||
state_file=str(base / "state.json"),
|
||
meta_file=str(base / "meta.json"),
|
||
daily_cleanup_time="00:10",
|
||
)
|
||
return WechatXibaoBridge(args)
|
||
|
||
def test_parse_skip_command(self) -> None:
|
||
with TemporaryDirectory() as tmp_dir:
|
||
bridge = self._new_bridge(tmp_dir)
|
||
cmd = bridge.parse_command("跳过3")
|
||
self.assertIsNotNone(cmd)
|
||
self.assertEqual(cmd.get("action"), "set_skip")
|
||
self.assertEqual(cmd.get("count"), "3")
|
||
|
||
cmd2 = bridge.parse_command("跳过(12)")
|
||
self.assertIsNotNone(cmd2)
|
||
self.assertEqual(cmd2.get("action"), "set_skip")
|
||
self.assertEqual(cmd2.get("count"), "12")
|
||
|
||
def test_apply_daily_skip_to_numbered_lines(self) -> None:
|
||
with TemporaryDirectory() as tmp_dir:
|
||
bridge = self._new_bridge(tmp_dir)
|
||
bridge.set_daily_skip("wxid_u1", 2)
|
||
|
||
raw = "#接龙\n1、第一条\n2、第二条\n3、第三条\n说明文本"
|
||
text, removed, requested = bridge.apply_daily_skip_to_raw_text("wxid_u1", raw)
|
||
self.assertEqual(requested, 2)
|
||
self.assertEqual(removed, 2)
|
||
self.assertIn("3、第三条", text)
|
||
self.assertNotIn("1、第一条", text)
|
||
self.assertNotIn("2、第二条", text)
|
||
|
||
def test_skip_zero_clears_setting(self) -> None:
|
||
with TemporaryDirectory() as tmp_dir:
|
||
bridge = self._new_bridge(tmp_dir)
|
||
bridge.set_daily_skip("wxid_u2", 5)
|
||
self.assertEqual(bridge.get_daily_skip("wxid_u2"), 5)
|
||
bridge.set_daily_skip("wxid_u2", 0)
|
||
self.assertEqual(bridge.get_daily_skip("wxid_u2"), 0)
|
||
|
||
def test_stale_daily_skip_is_invalidated(self) -> None:
|
||
with TemporaryDirectory() as tmp_dir:
|
||
bridge = self._new_bridge(tmp_dir)
|
||
bridge.meta["daily_skip"] = {
|
||
"wxid_old": {
|
||
"date": "2000-01-01",
|
||
"count": 3,
|
||
"updated_at": "2000-01-01T00:00:00",
|
||
}
|
||
}
|
||
value = bridge.get_daily_skip("wxid_old")
|
||
self.assertEqual(value, 0)
|
||
self.assertNotIn("wxid_old", bridge.meta.get("daily_skip", {}))
|
||
|
||
|
||
if __name__ == "__main__":
|
||
unittest.main()
|