feat: initial import (exclude templates and runtime temp files)
This commit is contained in:
82
app/tests/test_wechat_bot_bridge_skip.py
Normal file
82
app/tests/test_wechat_bot_bridge_skip.py
Normal file
@@ -0,0 +1,82 @@
|
||||
#!/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()
|
||||
Reference in New Issue
Block a user