Protokoll #27903

ID27903
Zeitstempel2025-12-28 12:33:06.483893
Clientroot
IP145.224.72.140
Modellclaude-sonnet-4-20250514
Statuscompleted
Tokens934 (Input: 33, Output: 901)
Dauer82 ms
Request-Zeit2025-12-28 12:33:06.483893
Response-Zeit2025-12-28 12:33:06.565543

Request

{
    "event": "PreToolUse",
    "tool_name": "Read",
    "tool_input": {
        "file_path": "\/var\/www\/mcp-servers\/shared\/tests\/test_protokoll_logger.py"
    }
}

Response

{
    "tool_response": {
        "type": "text",
        "file": {
            "filePath": "\/var\/www\/mcp-servers\/shared\/tests\/test_protokoll_logger.py",
            "content": "\"\"\"Tests for protokoll_logger module.\"\"\"\n\nfrom datetime import datetime\nfrom unittest.mock import MagicMock, patch\n\nimport pytest\n\nfrom shared.domain.log_entry import LogEntry\nfrom shared.infrastructure.protokoll_logger import (\n    ProtokollLogger,\n    clear_logger_registry,\n    get_logger,\n)\n\n\nclass MockConfig:\n    \"\"\"Mock configuration for testing.\"\"\"\n\n    LOG_DB_HOST = \"localhost\"\n    LOG_DB_NAME = \"test_db\"\n    LOG_DB_USER = \"test_user\"\n    LOG_DB_PASSWORD = \"test_pass\"\n\n\nclass TestProtokollLogger:\n    \"\"\"Tests for ProtokollLogger class.\"\"\"\n\n    def setup_method(self) -> None:\n        \"\"\"Reset registry before each test.\"\"\"\n        clear_logger_registry()\n\n    def test_create_logger(self) -> None:\n        \"\"\"Can create a ProtokollLogger.\"\"\"\n        logger = ProtokollLogger(\"test_client\", MockConfig)\n        assert logger.client_name == \"test_client\"\n\n    def test_format_request_with_tool(self) -> None:\n        \"\"\"Format request includes tool name.\"\"\"\n        logger = ProtokollLogger(\"test\", MockConfig)\n        entry = LogEntry(\n            timestamp=datetime.now(),\n            client_name=\"test\",\n            request=\"SELECT * FROM users\",\n            status=\"success\",\n            duration_ms=50,\n            tool_name=\"db_select\",\n        )\n        result = logger._format_request(entry)\n        assert \"[db_select]\" in result\n        assert \"SELECT * FROM users\" in result\n\n    def test_format_request_with_context_id(self) -> None:\n        \"\"\"Format request includes context ID.\"\"\"\n        logger = ProtokollLogger(\"test\", MockConfig)\n        entry = LogEntry(\n            timestamp=datetime.now(),\n            client_name=\"test\",\n            request=\"Update task\",\n            status=\"success\",\n            duration_ms=50,\n            context_id=42,\n        )\n        result = logger._format_request(entry)\n        assert \"id=42\" in result\n\n\nclass TestLoggerRegistry:\n    \"\"\"Tests for logger registry functions.\"\"\"\n\n    def setup_method(self) -> None:\n        \"\"\"Reset registry before each test.\"\"\"\n        clear_logger_registry()\n\n    def test_get_logger_creates_singleton(self) -> None:\n        \"\"\"get_logger returns same instance for same client.\"\"\"\n        logger1 = get_logger(\"client_a\", MockConfig)\n        logger2 = get_logger(\"client_a\", MockConfig)\n        assert logger1 is logger2\n\n    def test_get_logger_different_clients(self) -> None:\n        \"\"\"get_logger returns different instances for different clients.\"\"\"\n        logger1 = get_logger(\"client_a\", MockConfig)\n        logger2 = get_logger(\"client_b\", MockConfig)\n        assert logger1 is not logger2\n\n    def test_clear_registry(self) -> None:\n        \"\"\"clear_logger_registry removes all instances.\"\"\"\n        logger1 = get_logger(\"client_a\", MockConfig)\n        clear_logger_registry()\n        logger2 = get_logger(\"client_a\", MockConfig)\n        assert logger1 is not logger2\n\n    def test_isolated_tests(self) -> None:\n        \"\"\"Tests are isolated via clear_logger_registry.\"\"\"\n        # This test demonstrates test isolation\n        logger = get_logger(\"isolated_test\", MockConfig)\n        assert logger.client_name == \"isolated_test\"\n        # Next test will start fresh due to setup_method\n",
            "numLines": 99,
            "startLine": 1,
            "totalLines": 99
        }
    }
}
← Vorheriger Zur Liste Nächster →