feat(common): complete Phase 1 - project config, structured logging, and ClickHouse DDL

This commit is contained in:
2026-09-19 13:12:04 +03:30
parent 5f75a1a2be
commit 43df200eeb
9 changed files with 364 additions and 3 deletions

50
tests/test_logging.py Normal file
View File

@@ -0,0 +1,50 @@
import io
import json
import logging
import unittest
from app.common.logging import StructuredJsonFormatter, setup_logger
class TestStructuredJsonFormatter(unittest.TestCase):
def test_log_format_structure(self):
stream = io.StringIO()
handler = logging.StreamHandler(stream)
handler.setFormatter(StructuredJsonFormatter(service_name="test-service"))
logger = logging.getLogger("test_logger")
logger.setLevel(logging.INFO)
logger.addHandler(handler)
logger.info("Batch processed successfully", extra={"raw_id": "raw-12345"})
output = stream.getvalue().strip()
data = json.loads(output)
self.assertIn("timestamp", data)
self.assertEqual(data["level"], "INFO")
self.assertEqual(data["service"], "test-service")
self.assertEqual(data["raw_id"], "raw-12345")
self.assertEqual(data["event"], "Batch processed successfully")
def test_log_format_null_raw_id(self):
stream = io.StringIO()
handler = logging.StreamHandler(stream)
handler.setFormatter(StructuredJsonFormatter(service_name="test-service"))
logger = logging.getLogger("test_logger_null")
logger.setLevel(logging.INFO)
logger.addHandler(handler)
logger.info("Server started on port 8000")
output = stream.getvalue().strip()
data = json.loads(output)
self.assertIn("timestamp", data)
self.assertEqual(data["level"], "INFO")
self.assertIsNone(data["raw_id"])
self.assertEqual(data["event"], "Server started on port 8000")
if __name__ == "__main__":
unittest.main()