""" 静默模式服务测试 """ import time import pytest from unittest.mock import Mock, patch from app.services.silence_service import SilenceService class TestSilenceService: """静默模式服务测试类""" def setup_method(self): """测试前准备""" self.service = SilenceService() @patch('app.services.silence_service.settings') @patch('app.services.silence_service.redis_queue') def test_activate_silence_mode_success(self, mock_redis_queue, mock_settings): """测试成功激活群组静默模式""" # 模拟配置 mock_settings.silence_mode_enabled = True mock_settings.silence_duration_minutes = 10 # 模拟Redis操作 mock_redis_client = Mock() mock_redis_queue.redis_client = mock_redis_client mock_redis_client.setex.return_value = True # 测试激活群组静默模式 group_id = "test_group@chatroom" result = self.service.activate_silence_mode(group_id) assert result is True # 验证Redis调用 assert mock_redis_client.setex.call_count == 2 # 设置两个键 @patch('app.services.silence_service.settings') def test_activate_silence_mode_disabled(self, mock_settings): """测试静默模式功能禁用时的行为""" mock_settings.silence_mode_enabled = False group_id = "test_group@chatroom" result = self.service.activate_silence_mode(group_id) assert result is False @patch('app.services.silence_service.settings') @patch('app.services.silence_service.redis_queue') def test_is_silence_active(self, mock_redis_queue, mock_settings): """测试检查静默模式是否激活""" mock_settings.silence_mode_enabled = True # 模拟Redis操作 mock_redis_client = Mock() mock_redis_queue.redis_client = mock_redis_client # 测试静默模式激活状态 mock_redis_client.exists.return_value = True group_id = "test_group@chatroom" result = self.service.is_silence_active(group_id) assert result is True # 测试静默模式未激活状态 mock_redis_client.exists.return_value = False result = self.service.is_silence_active(group_id) assert result is False @patch('app.services.silence_service.settings') def test_is_silence_active_disabled(self, mock_settings): """测试功能禁用时的静默模式检查""" mock_settings.silence_mode_enabled = False group_id = "test_group@chatroom" result = self.service.is_silence_active(group_id) assert result is False @patch('app.services.silence_service.settings') @patch('app.services.silence_service.redis_queue') def test_get_silence_remaining_time(self, mock_redis_queue, mock_settings): """测试获取静默模式剩余时间""" mock_settings.silence_mode_enabled = True # 模拟Redis操作 mock_redis_client = Mock() mock_redis_queue.redis_client = mock_redis_client # 模拟静默模式激活 mock_redis_client.exists.return_value = True # 模拟结束时间(当前时间 + 300秒) future_time = time.time() + 300 mock_redis_client.get.return_value = str(future_time) group_id = "test_group@chatroom" result = self.service.get_silence_remaining_time(group_id) assert result is not None assert result > 0 assert result <= 300 @patch('app.services.silence_service.settings') @patch('app.services.silence_service.redis_queue') def test_get_silence_remaining_time_inactive(self, mock_redis_queue, mock_settings): """测试静默模式未激活时获取剩余时间""" mock_settings.silence_mode_enabled = True # 模拟Redis操作 mock_redis_client = Mock() mock_redis_queue.redis_client = mock_redis_client mock_redis_client.exists.return_value = False group_id = "test_group@chatroom" result = self.service.get_silence_remaining_time(group_id) assert result is None @patch('app.services.silence_service.settings') @patch('app.services.silence_service.redis_queue') def test_deactivate_silence_mode(self, mock_redis_queue, mock_settings): """测试手动停用静默模式""" # 模拟Redis操作 mock_redis_client = Mock() mock_redis_queue.redis_client = mock_redis_client mock_redis_client.delete.return_value = True result = self.service.deactivate_silence_mode() assert result is True # 验证删除了两个键 assert mock_redis_client.delete.call_count == 2 @patch('app.services.silence_service.settings') @patch('app.services.silence_service.redis_queue') def test_extend_silence_mode(self, mock_redis_queue, mock_settings): """测试延长静默模式""" mock_settings.silence_mode_enabled = True mock_settings.silence_duration_minutes = 10 # 模拟Redis操作 mock_redis_client = Mock() mock_redis_queue.redis_client = mock_redis_client mock_redis_client.setex.return_value = True group_id = "test_group@chatroom" result = self.service.extend_silence_mode(group_id) assert result is True @patch('app.services.silence_service.settings') def test_get_silence_status(self, mock_settings): """测试获取静默模式状态""" mock_settings.silence_mode_enabled = True mock_settings.silence_duration_minutes = 10 with patch.object(self.service, 'is_silence_active', return_value=False): status = self.service.get_silence_status() assert status["enabled"] is True assert status["active"] is False assert status["duration_minutes"] == 10 assert status["remaining_seconds"] is None assert status["remaining_minutes"] is None @patch('app.services.silence_service.settings') def test_get_silence_status_active(self, mock_settings): """测试获取激活状态的静默模式状态""" mock_settings.silence_mode_enabled = True mock_settings.silence_duration_minutes = 10 with patch.object(self.service, 'is_silence_active', return_value=True), \ patch.object(self.service, 'get_silence_remaining_time', return_value=300): status = self.service.get_silence_status() assert status["enabled"] is True assert status["active"] is True assert status["remaining_seconds"] == 300 assert status["remaining_minutes"] == 5.0