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 = ( '' "" ) self.assertEqual(_parse_system_message_content(raw_text), "“张三”撤回了一条消息") def test_extract_nested_content_in_replacemsg(self): raw_text = ( '"黄智欢" 撤回了一条消息0' ']]>' ) self.assertEqual(_parse_system_message_content(raw_text), '"黄智欢" 撤回了一条消息') def test_extract_revokemsg_text_when_replacemsg_missing(self): raw_text = "你撤回了一条消息" self.assertEqual(_parse_system_message_content(raw_text), "你撤回了一条消息") def test_revoke_fallback_when_no_readable_text(self): raw_text = '' self.assertEqual(_parse_system_message_content(raw_text), "撤回了一条消息") def test_normal_system_message_still_cleaned(self): raw_text = "" self.assertEqual(_parse_system_message_content(raw_text), "张三 加入了群聊") def test_chatroom_top_message_uses_response_name_by_default(self): raw_text = ( " 17990148862@chatroom 1 3546361838777087323 49 " "wxid_7iazcmpjn90k22 21 新青年 68" ) self.assertEqual(_parse_system_message_content(raw_text), "新青年置顶了一条消息") def test_chatroom_top_message_prefers_resolved_display_name(self): raw_text = ( " 17990148862@chatroom 2 3546361838777087323 0 " "wxid_k7zhjk9xvzsk22 21 A 69" ) def resolve_display_name(username: str, fallback: str) -> str: self.assertEqual(username, "wxid_k7zhjk9xvzsk22") self.assertEqual(fallback, "A") return "周鑫" self.assertEqual( _parse_system_message_content(raw_text, resolve_display_name=resolve_display_name), "周鑫移除了一条置顶消息", ) def test_chatroom_top_message_without_comment_markers_still_parses(self): raw_text = "17990148862@chatroom 1 3546361838777087323 49 wxid_7iazcmpjn90k22 21 新青年 68" self.assertEqual(_parse_system_message_content(raw_text), "新青年置顶了一条消息") def test_chatroom_top_message_without_comment_markers_still_prefers_resolved_name(self): raw_text = "17990148862@chatroom 2 3546361838777087323 0 wxid_k7zhjk9xvzsk22 21 A 69" def resolve_display_name(username: str, fallback: str) -> str: self.assertEqual(username, "wxid_k7zhjk9xvzsk22") self.assertEqual(fallback, "A") return "周鑫" self.assertEqual( _parse_system_message_content(raw_text, resolve_display_name=resolve_display_name), "周鑫移除了一条置顶消息", ) def test_chatroom_top_message_xml_payload_still_parses(self): raw_text = ( '' '' '' '' '' '' '' '' '' ) self.assertEqual(_parse_system_message_content(raw_text), "新青年置顶了一条消息") def test_chatroom_top_message_xml_payload_prefers_resolved_name(self): raw_text = ( '' '' '' '' '' '' '' '' '' ) def resolve_display_name(username: str, fallback: str) -> str: self.assertEqual(username, "wxid_k7zhjk9xvzsk22") self.assertEqual(fallback, "A") return "周鑫" self.assertEqual( _parse_system_message_content(raw_text, resolve_display_name=resolve_display_name), "周鑫移除了一条置顶消息", ) if __name__ == "__main__": unittest.main()