feat: обновления парсеров, тестов и миграций
Some checks failed
CI/CD Pipeline / Run Tests (push) Failing after 37s
CI/CD Pipeline / Code Quality Checks (push) Failing after 43s
CI/CD Pipeline / Build & Push Images (push) Has been skipped
CI/CD Pipeline / Deploy (dev) (push) Has been skipped
CI/CD Pipeline / Deploy (prod) (push) Has been skipped
CI/CD Pipeline / Code Quality Checks (pull_request) Failing after 0s
CI/CD Pipeline / Run Tests (pull_request) Failing after 0s
CI/CD Pipeline / Build & Push Images (pull_request) Has been skipped
CI/CD Pipeline / Deploy (dev) (pull_request) Has been skipped
CI/CD Pipeline / Deploy (prod) (pull_request) Has been skipped
Some checks failed
CI/CD Pipeline / Run Tests (push) Failing after 37s
CI/CD Pipeline / Code Quality Checks (push) Failing after 43s
CI/CD Pipeline / Build & Push Images (push) Has been skipped
CI/CD Pipeline / Deploy (dev) (push) Has been skipped
CI/CD Pipeline / Deploy (prod) (push) Has been skipped
CI/CD Pipeline / Code Quality Checks (pull_request) Failing after 0s
CI/CD Pipeline / Run Tests (pull_request) Failing after 0s
CI/CD Pipeline / Build & Push Images (pull_request) Has been skipped
CI/CD Pipeline / Deploy (dev) (pull_request) Has been skipped
CI/CD Pipeline / Deploy (prod) (pull_request) Has been skipped
- Обновлены клиенты парсеров (checko, fns, minpromtorg, proverki, zakupki) - Добавлены новые миграции для моделей - Расширено покрытие тестами - Обновлены конфигурации и настройки проекта - Добавлены утилиты для тестирования Co-Authored-By: Warp <agent@warp.dev>
This commit is contained in:
@@ -8,7 +8,11 @@ from apps.core.logging import (
|
||||
ContextLogger,
|
||||
JSONFormatter,
|
||||
get_json_logging_config,
|
||||
log_request,
|
||||
)
|
||||
from apps.core.middleware import RequestIDMiddleware, get_request_id
|
||||
from django.http import HttpResponse
|
||||
from django.test import RequestFactory
|
||||
from django.test import TestCase
|
||||
|
||||
|
||||
@@ -89,6 +93,20 @@ class JSONFormatterTest(TestCase):
|
||||
self.assertEqual(parsed["exception"]["type"], "ValueError")
|
||||
self.assertIn("Test error", parsed["exception"]["message"])
|
||||
|
||||
def test_request_id_included(self):
|
||||
request = RequestFactory().get("/health/")
|
||||
middleware = RequestIDMiddleware(lambda req: None)
|
||||
middleware.process_request(request)
|
||||
|
||||
self.logger.info("Message with request id")
|
||||
output = self.stream.getvalue()
|
||||
parsed = json.loads(output)
|
||||
self.assertIn("request_id", parsed)
|
||||
|
||||
response = HttpResponse()
|
||||
middleware.process_response(request, response)
|
||||
self.assertIsNone(get_request_id())
|
||||
|
||||
|
||||
class ContextLoggerTest(TestCase):
|
||||
"""Tests for ContextLogger"""
|
||||
@@ -118,6 +136,27 @@ class ContextLoggerTest(TestCase):
|
||||
self.assertEqual(self.context_logger._context["user_id"], 42)
|
||||
self.assertEqual(self.context_logger._context["action"], "test")
|
||||
|
||||
def test_context_logger_emits_messages(self):
|
||||
stream = StringIO()
|
||||
handler = logging.StreamHandler(stream)
|
||||
logger = logging.getLogger("test_context_output")
|
||||
logger.handlers = []
|
||||
logger.addHandler(handler)
|
||||
logger.setLevel(logging.INFO)
|
||||
self.context_logger._logger = logger
|
||||
|
||||
self.context_logger.set_context(request_id="req-1")
|
||||
self.context_logger.info("hello")
|
||||
self.context_logger.warning("warn")
|
||||
self.context_logger.error("err")
|
||||
try:
|
||||
raise ValueError("boom")
|
||||
except ValueError:
|
||||
self.context_logger.exception("exc")
|
||||
|
||||
output = stream.getvalue()
|
||||
self.assertIn("hello", output)
|
||||
|
||||
|
||||
class GetJsonLoggingConfigTest(TestCase):
|
||||
"""Tests for get_json_logging_config function"""
|
||||
@@ -161,3 +200,35 @@ class GetJsonLoggingConfigTest(TestCase):
|
||||
config["handlers"]["file"]["filename"],
|
||||
"/var/log/test.log",
|
||||
)
|
||||
|
||||
|
||||
class LogRequestTest(TestCase):
|
||||
def setUp(self):
|
||||
self.logger = logging.getLogger("test_request_logger")
|
||||
self.logger.setLevel(logging.INFO)
|
||||
self.stream = StringIO()
|
||||
handler = logging.StreamHandler(self.stream)
|
||||
self.logger.handlers = []
|
||||
self.logger.addHandler(handler)
|
||||
|
||||
def test_log_request_success(self):
|
||||
request = RequestFactory().get("/health/")
|
||||
response = HttpResponse(status=200)
|
||||
log_request(self.logger, request, response, duration_ms=12.34)
|
||||
output = self.stream.getvalue()
|
||||
self.assertIn("200", output)
|
||||
self.assertIn("/health/", output)
|
||||
|
||||
def test_log_request_client_error(self):
|
||||
request = RequestFactory().get("/health/")
|
||||
response = HttpResponse(status=404)
|
||||
log_request(self.logger, request, response, duration_ms=5)
|
||||
output = self.stream.getvalue()
|
||||
self.assertIn("404", output)
|
||||
|
||||
def test_log_request_server_error(self):
|
||||
request = RequestFactory().get("/health/")
|
||||
response = HttpResponse(status=500)
|
||||
log_request(self.logger, request, response, duration_ms=5)
|
||||
output = self.stream.getvalue()
|
||||
self.assertIn("500", output)
|
||||
|
||||
Reference in New Issue
Block a user