feat(admin): 添加用户管理相关文件

添加用户管理视图、API和状态管理文件
This commit is contained in:
张翔
2026-03-28 14:37:29 +08:00
commit 08ea5fbe98
1643 changed files with 255646 additions and 0 deletions
@@ -0,0 +1,137 @@
import pytest
import logging
import sys
from pathlib import Path
from unittest.mock import patch, MagicMock
from apitest.config.config_manager import ConfigManager
from apitest.config.logger_manager import LoggerManager
class TestLoggerManager:
"""测试LoggerManager日志管理器"""
@pytest.fixture
def mock_config_manager(self):
"""模拟配置管理器"""
config_manager = MagicMock(spec=ConfigManager)
config_manager.get_log_level.return_value = "INFO"
config_manager.get_log_format.return_value = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
config_manager.get_log_file.return_value = None
return config_manager
@pytest.fixture
def logger_manager(self, mock_config_manager):
"""创建日志管理器实例"""
return LoggerManager(mock_config_manager)
def test_logger_manager_initialization(self, mock_config_manager):
"""测试日志管理器初始化"""
logger_manager = LoggerManager(mock_config_manager)
assert logger_manager.config_manager == mock_config_manager
assert isinstance(logger_manager._loggers, dict)
@pytest.fixture
def mock_config_manager_with_file(self, tmp_path):
"""模拟带日志文件的配置管理器"""
config_manager = MagicMock(spec=ConfigManager)
config_manager.get_log_level.return_value = "DEBUG"
config_manager.get_log_format.return_value = "%(name)s - %(levelname)s - %(message)s"
config_manager.get_log_file.return_value = tmp_path / "test.log"
return config_manager
def test_logger_manager_with_file(self, mock_config_manager_with_file):
"""测试带日志文件的日志管理器初始化"""
logger_manager = LoggerManager(mock_config_manager_with_file)
assert logger_manager.config_manager == mock_config_manager_with_file
def test_get_logger(self, logger_manager):
"""测试获取日志记录器"""
logger = logger_manager.get_logger("test_logger")
assert isinstance(logger, logging.Logger)
assert logger.name == "test_logger"
assert "test_logger" in logger_manager._loggers
def test_get_logger_cached(self, logger_manager):
"""测试获取缓存的日志记录器"""
logger1 = logger_manager.get_logger("test_logger")
logger2 = logger_manager.get_logger("test_logger")
assert logger1 is logger2
def test_set_level(self, logger_manager):
"""测试设置日志级别"""
logger_manager.set_level("DEBUG")
root_logger = logging.getLogger()
assert root_logger.level == logging.DEBUG
def test_add_file_handler(self, logger_manager, tmp_path):
"""测试添加文件处理器"""
log_file = tmp_path / "test_add_handler.log"
initial_handler_count = len([h for h in logging.getLogger().handlers if isinstance(h, logging.FileHandler)])
logger_manager.add_file_handler(log_file)
root_logger = logging.getLogger()
file_handlers = [h for h in root_logger.handlers if isinstance(h, logging.FileHandler)]
assert len(file_handlers) > initial_handler_count
new_handlers = file_handlers[initial_handler_count:]
assert len(new_handlers) > 0
assert str(log_file) in new_handlers[0].baseFilename
def test_add_file_handler_with_level(self, logger_manager, tmp_path):
"""测试添加带级别的文件处理器"""
log_file = tmp_path / "test_add_handler_level.log"
initial_handler_count = len([h for h in logging.getLogger().handlers if isinstance(h, logging.FileHandler)])
logger_manager.add_file_handler(log_file, "ERROR")
root_logger = logging.getLogger()
file_handlers = [h for h in root_logger.handlers if isinstance(h, logging.FileHandler)]
assert len(file_handlers) > initial_handler_count
new_handlers = file_handlers[initial_handler_count:]
assert len(new_handlers) > 0
assert new_handlers[0].level == logging.ERROR
def test_remove_all_handlers(self, logger_manager):
"""测试移除所有处理器"""
original_handler_count = len(logging.getLogger().handlers)
logger_manager.remove_all_handlers()
assert len(logging.getLogger().handlers) == 0
@patch('apitest.config.logger_manager.setup_logger')
def test_setup_logger_function(self, mock_setup):
"""测试setup_logger函数"""
from apitest.config.logger_manager import setup_logger
mock_config = MagicMock(spec=ConfigManager)
setup_logger(mock_config)
mock_setup.assert_called_once_with(mock_config)
class TestSetupLoggerIntegration:
"""测试setup_logger集成"""
def test_setup_logger_creates_logger_manager(self):
"""测试setup_logger创建日志管理器"""
config_data = {
"logging": {
"level": "INFO",
"format": "%(name)s - %(levelname)s - %(message)s",
"file": None
}
}
with patch('apitest.config.config_manager.ConfigManager') as mock_config_class:
mock_config = MagicMock(spec=ConfigManager)
mock_config.get_log_level.return_value = "INFO"
mock_config.get_log_format.return_value = "%(name)s - %(levelname)s - %(message)s"
mock_config.get_log_file.return_value = None
mock_config_class.return_value = mock_config
from apitest.config.logger_manager import setup_logger
logger_manager = setup_logger(mock_config)
assert isinstance(logger_manager, LoggerManager)
assert logger_manager.config_manager == mock_config