From 69945b730fd3f6b6138ce50e49fc3392fcd74d71 Mon Sep 17 00:00:00 2001
From: yj <2077506045@qq.com>
Date: 星期一, 28 七月 2025 18:16:52 +0800
Subject: [PATCH] 新增关键词过滤;新增活跃客服统计;新增掉线通知

---
 tests/test_message_processor.py |  164 +++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 154 insertions(+), 10 deletions(-)

diff --git a/tests/test_message_processor.py b/tests/test_message_processor.py
index e4fe1da..e149ce8 100644
--- a/tests/test_message_processor.py
+++ b/tests/test_message_processor.py
@@ -13,8 +13,13 @@
         """娴嬭瘯鍓嶅噯澶�"""
         self.processor = MessageProcessor()
     
-    def test_is_valid_group_message_success(self):
+    @patch('app.services.message_processor.silence_service')
+    @patch('app.services.message_processor.friend_ignore_service')
+    def test_is_valid_group_message_success(self, mock_friend_ignore_service, mock_silence_service):
         """娴嬭瘯鏈夋晥缇よ亰娑堟伅楠岃瘉"""
+        mock_silence_service.is_silence_active.return_value = False
+        mock_friend_ignore_service.is_friend_ignored.return_value = False
+
         callback_data = {
             "messageType": "80001",
             "data": {
@@ -24,7 +29,7 @@
                 "self": False
             }
         }
-        
+
         result = self.processor.is_valid_group_message(callback_data)
         assert result is True
     
@@ -71,12 +76,15 @@
         
         result = self.processor.is_valid_group_message(callback_data)
         assert result is False
-    
-    @patch('app.services.message_processor.redis_queue')
-    def test_enqueue_callback_message_success(self, mock_redis_queue):
-        """娴嬭瘯娑堟伅鍏ラ槦鎴愬姛"""
-        mock_redis_queue.enqueue_message.return_value = True
-        
+
+    @patch('app.services.message_processor.silence_service')
+    @patch('app.services.message_processor.friend_ignore_service')
+    def test_is_valid_group_message_friend_ignored(self, mock_friend_ignore_service, mock_silence_service):
+        """娴嬭瘯濂藉弸鍦ㄥ拷鐣ュ垪琛ㄤ腑鐨勬秷鎭�"""
+        mock_silence_service.is_silence_active.side_effect = [False, False]  # 涓ゆ妫�鏌ラ兘杩斿洖False
+        mock_silence_service.activate_silence_mode.return_value = True
+        mock_friend_ignore_service.is_friend_ignored.return_value = True
+
         callback_data = {
             "messageType": "80001",
             "data": {
@@ -86,9 +94,145 @@
                 "self": False
             }
         }
-        
+
+        result = self.processor.is_valid_group_message(callback_data)
+        assert result is False
+        mock_friend_ignore_service.is_friend_ignored.assert_called_once_with("wxid_test123")
+
+    @patch('app.services.message_processor.silence_service')
+    @patch('app.services.message_processor.friend_ignore_service')
+    def test_is_valid_group_message_friend_not_ignored(self, mock_friend_ignore_service, mock_silence_service):
+        """娴嬭瘯濂藉弸涓嶅湪蹇界暐鍒楄〃涓殑娑堟伅"""
+        mock_silence_service.is_silence_active.return_value = False
+        mock_friend_ignore_service.is_friend_ignored.return_value = False
+
+        callback_data = {
+            "messageType": "80001",
+            "data": {
+                "fromUser": "wxid_test123",
+                "fromGroup": "group123@chatroom",
+                "content": "娴嬭瘯娑堟伅",
+                "self": False
+            }
+        }
+
+        result = self.processor.is_valid_group_message(callback_data)
+        assert result is True
+        mock_friend_ignore_service.is_friend_ignored.assert_called_once_with("wxid_test123")
+
+    @patch('app.services.message_processor.silence_service')
+    @patch('app.services.message_processor.friend_ignore_service')
+    def test_is_valid_group_message_silence_active(self, mock_friend_ignore_service, mock_silence_service):
+        """娴嬭瘯缇ょ粍闈欓粯妯″紡婵�娲绘椂鐨勬秷鎭鐞嗭紙闈炲拷鐣ュソ鍙嬶級"""
+        mock_friend_ignore_service.is_friend_ignored.return_value = False
+        mock_silence_service.is_silence_active.return_value = True
+
+        callback_data = {
+            "messageType": "80001",
+            "data": {
+                "fromUser": "wxid_test123",
+                "fromGroup": "group123@chatroom",
+                "content": "娴嬭瘯娑堟伅",
+                "self": False
+            }
+        }
+
+        result = self.processor.is_valid_group_message(callback_data)
+        assert result is False
+        mock_silence_service.is_silence_active.assert_called_once_with("group123@chatroom")
+
+    @patch('app.services.message_processor.silence_service')
+    @patch('app.services.message_processor.friend_ignore_service')
+    def test_is_valid_group_message_friend_ignored_activate_silence(self, mock_friend_ignore_service, mock_silence_service):
+        """娴嬭瘯濂藉弸琚拷鐣ユ椂婵�娲婚潤榛樻ā寮�"""
+        mock_silence_service.is_silence_active.side_effect = [False, False]  # 绗竴娆℃鏌ユ湭婵�娲伙紝绗簩娆℃鏌ュ拷鐣ュソ鍙嬫椂涔熸湭婵�娲�
+        mock_silence_service.activate_silence_mode.return_value = True
+        mock_friend_ignore_service.is_friend_ignored.return_value = True
+
+        callback_data = {
+            "messageType": "80001",
+            "data": {
+                "fromUser": "wxid_test123",
+                "fromGroup": "group123@chatroom",
+                "content": "娴嬭瘯娑堟伅",
+                "self": False
+            }
+        }
+
+        result = self.processor.is_valid_group_message(callback_data)
+        assert result is False
+        mock_silence_service.activate_silence_mode.assert_called_once_with("group123@chatroom")
+
+    @patch('app.services.message_processor.silence_service')
+    @patch('app.services.message_processor.friend_ignore_service')
+    def test_is_valid_group_message_friend_ignored_extend_silence(self, mock_friend_ignore_service, mock_silence_service):
+        """娴嬭瘯濂藉弸琚拷鐣ユ椂寤堕暱缇ょ粍闈欓粯妯″紡"""
+        mock_silence_service.is_silence_active.return_value = True  # 缇ょ粍闈欓粯妯″紡宸叉縺娲�
+        mock_silence_service.extend_silence_mode.return_value = True
+        mock_friend_ignore_service.is_friend_ignored.return_value = True
+
+        callback_data = {
+            "messageType": "80001",
+            "data": {
+                "fromUser": "wxid_test123",
+                "fromGroup": "group123@chatroom",
+                "content": "娴嬭瘯娑堟伅",
+                "self": False
+            }
+        }
+
+        result = self.processor.is_valid_group_message(callback_data)
+        assert result is False
+        mock_silence_service.extend_silence_mode.assert_called_once_with("group123@chatroom")
+
+    @patch('app.services.message_processor.silence_service')
+    @patch('app.services.message_processor.friend_ignore_service')
+    def test_is_valid_group_message_friend_ignored_in_silence_mode(self, mock_friend_ignore_service, mock_silence_service):
+        """娴嬭瘯缇ょ粍闈欓粯妯″紡涓嬪ソ鍙嬫秷鎭粛鑳藉埛鏂版椂闀�"""
+        # 妯℃嫙缇ょ粍闈欓粯妯″紡宸叉縺娲荤殑鎯呭喌
+        mock_friend_ignore_service.is_friend_ignored.return_value = True
+        mock_silence_service.is_silence_active.return_value = True
+        mock_silence_service.extend_silence_mode.return_value = True
+
+        callback_data = {
+            "messageType": "80001",
+            "data": {
+                "fromUser": "wxid_ignored_friend",
+                "fromGroup": "group123@chatroom",
+                "content": "琚拷鐣ュソ鍙嬪湪缇ょ粍闈欓粯妯″紡涓嬬殑娑堟伅",
+                "self": False
+            }
+        }
+
+        result = self.processor.is_valid_group_message(callback_data)
+        assert result is False
+
+        # 楠岃瘉濂藉弸蹇界暐妫�鏌ヨ璋冪敤
+        mock_friend_ignore_service.is_friend_ignored.assert_called_once_with("wxid_ignored_friend")
+        # 楠岃瘉缇ょ粍闈欓粯妯″紡鏃堕棿琚欢闀�
+        mock_silence_service.extend_silence_mode.assert_called_once_with("group123@chatroom")
+    
+    @patch('app.services.message_processor.silence_service')
+    @patch('app.services.message_processor.friend_ignore_service')
+    @patch('app.services.message_processor.redis_queue')
+    def test_enqueue_callback_message_success(self, mock_redis_queue, mock_friend_ignore_service, mock_silence_service):
+        """娴嬭瘯娑堟伅鍏ラ槦鎴愬姛"""
+        mock_silence_service.is_silence_active.return_value = False
+        mock_friend_ignore_service.is_friend_ignored.return_value = False
+        mock_redis_queue.enqueue_message.return_value = True
+
+        callback_data = {
+            "messageType": "80001",
+            "data": {
+                "fromUser": "wxid_test123",
+                "fromGroup": "group123@chatroom",
+                "content": "娴嬭瘯娑堟伅",
+                "self": False
+            }
+        }
+
         result = self.processor.enqueue_callback_message(callback_data)
-        
+
         assert result is True
         mock_redis_queue.enqueue_message.assert_called_once_with("wxid_test123", callback_data)
     

--
Gitblit v1.9.1