"""公共日志与请求上下文测试。""" from django.test import SimpleTestCase from django.urls import reverse from .logging import request_id_context, sanitize_summary class LoggingTests(SimpleTestCase): """验证敏感摘要递归脱敏,且统计字段不会被误删。""" def test_nested_sensitive_values_are_masked(self): result = sanitize_summary( { "access_token": "secret", "nested": {"password": "secret", "token_count": 12}, "items": [{"api-key": "secret"}], } ) self.assertEqual(result["access_token"], "***") self.assertEqual(result["nested"]["password"], "***") self.assertEqual(result["nested"]["token_count"], 12) self.assertEqual(result["items"][0]["api-key"], "***") class RequestContextMiddlewareTests(SimpleTestCase): """验证入站关联标识的复用、非法值替换和请求结束后的上下文清理。""" def test_valid_request_id_is_returned(self): response = self.client.get( reverse("accounts:login"), headers={"X-Request-ID": "request-123"}, ) self.assertEqual(response.headers["X-Request-ID"], "request-123") self.assertEqual(request_id_context.get(), "-") def test_invalid_request_id_is_replaced(self): response = self.client.get( reverse("accounts:login"), headers={"X-Request-ID": "invalid value"}, ) generated = response.headers["X-Request-ID"] self.assertNotEqual(generated, "invalid value") self.assertEqual(len(generated), 32)