Files
xb/app/tests/test_wechat_bot_bridge_skip.py

83 lines
3.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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()