import logging import os from embedchain.telemetry.posthog import AnonymousTelemetry class TestAnonymousTelemetry: def test_init(self, mocker): # Enable telemetry specifically for this test os.environ["EC_TELEMETRY"] = "true" mock_posthog = mocker.patch("embedchain.telemetry.posthog.Posthog") telemetry = AnonymousTelemetry() assert telemetry.project_api_key == "phc_PHQDA5KwztijnSojsxJ2c1DuJd52QCzJzT2xnSGvjN2" assert telemetry.host == "https://app.posthog.com" assert telemetry.enabled is True assert telemetry.user_id mock_posthog.assert_called_once_with(project_api_key=telemetry.project_api_key, host=telemetry.host) def test_init_with_disabled_telemetry(self, mocker): mocker.patch("embedchain.telemetry.posthog.Posthog") telemetry = AnonymousTelemetry() assert telemetry.enabled is False assert telemetry.posthog.disabled is True def test_get_user_id(self, mocker, tmpdir): mock_uuid = mocker.patch("embedchain.telemetry.posthog.uuid.uuid4") mock_uuid.return_value = "unique_user_id" config_file = tmpdir.join("config.json") mocker.patch("embedchain.telemetry.posthog.CONFIG_FILE", str(config_file)) telemetry = AnonymousTelemetry() user_id = telemetry._get_user_id() assert user_id == "unique_user_id" assert config_file.read() == '{"user_id": "unique_user_id"}' def test_capture(self, mocker): # Enable telemetry specifically for this test os.environ["EC_TELEMETRY"] = "true" mock_posthog = mocker.patch("embedchain.telemetry.posthog.Posthog") telemetry = AnonymousTelemetry() event_name = "test_event" properties = {"key": "value"} telemetry.capture(event_name, properties) mock_posthog.assert_called_once_with( project_api_key=telemetry.project_api_key, host=telemetry.host, ) mock_posthog.return_value.capture.assert_called_once_with( telemetry.user_id, event_name, properties, ) def test_capture_with_exception(self, mocker, caplog): os.environ["EC_TELEMETRY"] = "true" mock_posthog = mocker.patch("embedchain.telemetry.posthog.Posthog") mock_posthog.return_value.capture.side_effect = Exception("Test Exception") telemetry = AnonymousTelemetry() event_name = "test_event" properties = {"key": "value"} with caplog.at_level(logging.ERROR): telemetry.capture(event_name, properties) assert "Failed to send telemetry event" in caplog.text caplog.clear()