Files
WeChatDataAnalysis/tests/test_chat_system_message_parsing.py
2977094657 cf58d26e6f test(chat): 覆盖系统撤回/群名片/实时会话同步相关用例
- 新增系统撤回消息 replacemsg 解析与导出语义测试

- 新增群聊会话预览格式化与群名片 ext_buffer 解析测试

- 新增 realtime 会话列表与 sync_all 落库 last_sender_display_name 测试
2026-02-09 18:31:47 +08:00

43 lines
1.7 KiB
Python

import sys
import unittest
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(ROOT / "src"))
from wechat_decrypt_tool.chat_helpers import _parse_system_message_content
class TestChatSystemMessageParsing(unittest.TestCase):
def test_extract_replacemsg_for_revoke(self):
raw_text = (
'<sysmsg type="revokemsg"><revokemsg><replacemsg><![CDATA[“张三”撤回了一条消息]]>'
"</replacemsg></revokemsg></sysmsg>"
)
self.assertEqual(_parse_system_message_content(raw_text), "“张三”撤回了一条消息")
def test_extract_nested_content_in_replacemsg(self):
raw_text = (
'<sysmsg type="revokemsg"><revokemsg><replacemsg><![CDATA['
'<content>"黄智欢" 撤回了一条消息</content><revoketime>0</revoketime>'
']]></replacemsg></revokemsg></sysmsg>'
)
self.assertEqual(_parse_system_message_content(raw_text), '"黄智欢" 撤回了一条消息')
def test_extract_revokemsg_text_when_replacemsg_missing(self):
raw_text = "<revokemsg>你撤回了一条消息</revokemsg>"
self.assertEqual(_parse_system_message_content(raw_text), "你撤回了一条消息")
def test_revoke_fallback_when_no_readable_text(self):
raw_text = '<sysmsg type="revokemsg"></sysmsg>'
self.assertEqual(_parse_system_message_content(raw_text), "撤回了一条消息")
def test_normal_system_message_still_cleaned(self):
raw_text = "<sysmsg><template><![CDATA[ 张三 加入了群聊 ]]></template></sysmsg>"
self.assertEqual(_parse_system_message_content(raw_text), "张三 加入了群聊")
if __name__ == "__main__":
unittest.main()