Files
JobRadar/common/tests.py
T

45 lines
1.6 KiB
Python

"""公共日志与请求上下文测试。"""
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)