56 lines
1.9 KiB
Python
56 lines
1.9 KiB
Python
"""Client diagnostics telemetry tests."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import unittest
|
|
from types import SimpleNamespace
|
|
|
|
from .routes import client_diagnostics
|
|
|
|
|
|
class ClientDiagnosticsTest(unittest.IsolatedAsyncioTestCase):
|
|
async def test_client_diagnostic_logs_safe_structural_payload(self) -> None:
|
|
payload = client_diagnostics.ClientDiagnosticRequest(
|
|
reason="watchdog",
|
|
path="/admin/users",
|
|
href="https://vignette.chanpaca.net/admin/users",
|
|
asset="index-R5KK7hZI.js",
|
|
elapsed_ms=3510,
|
|
body_text_length=0,
|
|
root_text_length=0,
|
|
root_child_count=1,
|
|
visible_nodes=0,
|
|
document_ready_state="complete",
|
|
viewport="1920x1080",
|
|
user_agent="Playwright",
|
|
errors=[
|
|
client_diagnostics.ClientDiagnosticError(
|
|
kind="unhandledrejection",
|
|
detail="Cannot read properties of null",
|
|
at="2026-07-03T00:00:00.000Z",
|
|
)
|
|
],
|
|
)
|
|
request = SimpleNamespace(
|
|
client=SimpleNamespace(host="127.0.0.1"),
|
|
headers={
|
|
"origin": "https://vignette.chanpaca.net",
|
|
"referer": "https://vignette.chanpaca.net/admin/users",
|
|
"cf-ray": "test-ray",
|
|
},
|
|
)
|
|
|
|
with self.assertLogs("vignette.client_diagnostics", level="WARNING") as logs:
|
|
result = await client_diagnostics.record_client_diagnostic(payload, request)
|
|
|
|
joined = "\n".join(logs.output)
|
|
self.assertEqual(result, {"ok": True})
|
|
self.assertIn("client_diagnostic", joined)
|
|
self.assertIn("/admin/users", joined)
|
|
self.assertIn("body_text_length", joined)
|
|
self.assertIn("Cannot read properties of null", joined)
|
|
self.assertNotIn("body_text=", joined)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|