Skyvern/tests/unit/test_cli_telemetry.py
Marc Kelechava ad29771451
Some checks are pending
Run tests and pre-commit / Run tests and pre-commit hooks (push) Waiting to run
Run tests and pre-commit / Frontend Lint and Build (push) Waiting to run
Publish Fern Docs / run (push) Waiting to run
feat: add CLI telemetry to close PostHog blind spot (#5491)
2026-04-13 23:01:08 -07:00

64 lines
2.3 KiB
Python

from __future__ import annotations
from unittest.mock import Mock, patch
from skyvern import analytics
from skyvern.cli.core import telemetry
def test_capture_cli_tool_call_uses_mcp_posthog_project() -> None:
fake_capture = Mock()
with patch.object(analytics, "capture", fake_capture):
telemetry.capture_cli_tool_call("skyvern_navigate", ok=True)
fake_capture.assert_called_once()
event_name = fake_capture.call_args.args[0]
kwargs = fake_capture.call_args.kwargs
assert event_name == "mcp_tool_call"
assert kwargs["data"]["tool"] == "skyvern_navigate"
assert kwargs["data"]["ok"] is True
assert kwargs["data"]["operation"] == "cli/call"
assert kwargs["data"]["runtime_mode"] == "cli"
assert kwargs["data"]["distinct_id_source"] == "analytics_id"
assert kwargs["distinct_id"] == analytics.settings.ANALYTICS_ID
assert kwargs["api_key"] == analytics.settings.MCP_POSTHOG_PROJECT_API_KEY
assert kwargs["host"] == analytics.settings.MCP_POSTHOG_PROJECT_HOST
def test_capture_cli_tool_call_error_omits_error_message() -> None:
fake_capture = Mock()
with patch.object(analytics, "capture", fake_capture):
telemetry.capture_cli_tool_call("skyvern_click", ok=False, error=ValueError("do not leak this"))
payload = fake_capture.call_args.kwargs["data"]
assert payload["error_type"] == "ValueError"
assert "error_message" not in payload
def test_flush_cli_telemetry_uses_mcp_posthog_project() -> None:
fake_flush = Mock()
with patch.object(analytics, "flush", fake_flush):
telemetry.flush_cli_telemetry()
fake_flush.assert_called_once_with(
api_key=analytics.settings.MCP_POSTHOG_PROJECT_API_KEY,
host=analytics.settings.MCP_POSTHOG_PROJECT_HOST,
)
def test_register_cli_telemetry_flush_is_idempotent() -> None:
fake_register = Mock()
original = telemetry._flush_registered
try:
with patch("skyvern.cli.core.telemetry.atexit.register", fake_register):
telemetry._flush_registered = False
telemetry.register_cli_telemetry_flush()
telemetry.register_cli_telemetry_flush()
fake_register.assert_called_once_with(telemetry.flush_cli_telemetry)
finally:
telemetry._flush_registered = original