test_posthog.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import logging
  2. import os
  3. from embedchain.telemetry.posthog import AnonymousTelemetry
  4. class TestAnonymousTelemetry:
  5. def test_init(self, mocker):
  6. # Enable telemetry specifically for this test
  7. os.environ["EC_TELEMETRY"] = "true"
  8. mock_posthog = mocker.patch("embedchain.telemetry.posthog.Posthog")
  9. telemetry = AnonymousTelemetry()
  10. assert telemetry.project_api_key == "phc_PHQDA5KwztijnSojsxJ2c1DuJd52QCzJzT2xnSGvjN2"
  11. assert telemetry.host == "https://app.posthog.com"
  12. assert telemetry.enabled is True
  13. assert telemetry.user_id
  14. mock_posthog.assert_called_once_with(project_api_key=telemetry.project_api_key, host=telemetry.host)
  15. def test_init_with_disabled_telemetry(self, mocker):
  16. mocker.patch("embedchain.telemetry.posthog.Posthog")
  17. telemetry = AnonymousTelemetry()
  18. assert telemetry.enabled is False
  19. assert telemetry.posthog.disabled is True
  20. def test_get_user_id(self, mocker, tmpdir):
  21. mock_uuid = mocker.patch("embedchain.telemetry.posthog.uuid.uuid4")
  22. mock_uuid.return_value = "unique_user_id"
  23. config_file = tmpdir.join("config.json")
  24. mocker.patch("embedchain.telemetry.posthog.CONFIG_FILE", str(config_file))
  25. telemetry = AnonymousTelemetry()
  26. user_id = telemetry._get_user_id()
  27. assert user_id == "unique_user_id"
  28. assert config_file.read() == '{"user_id": "unique_user_id"}'
  29. def test_capture(self, mocker):
  30. # Enable telemetry specifically for this test
  31. os.environ["EC_TELEMETRY"] = "true"
  32. mock_posthog = mocker.patch("embedchain.telemetry.posthog.Posthog")
  33. telemetry = AnonymousTelemetry()
  34. event_name = "test_event"
  35. properties = {"key": "value"}
  36. telemetry.capture(event_name, properties)
  37. mock_posthog.assert_called_once_with(
  38. project_api_key=telemetry.project_api_key,
  39. host=telemetry.host,
  40. )
  41. mock_posthog.return_value.capture.assert_called_once_with(
  42. telemetry.user_id,
  43. event_name,
  44. properties,
  45. )
  46. def test_capture_with_exception(self, mocker, caplog):
  47. os.environ["EC_TELEMETRY"] = "true"
  48. mock_posthog = mocker.patch("embedchain.telemetry.posthog.Posthog")
  49. mock_posthog.return_value.capture.side_effect = Exception("Test Exception")
  50. telemetry = AnonymousTelemetry()
  51. event_name = "test_event"
  52. properties = {"key": "value"}
  53. with caplog.at_level(logging.ERROR):
  54. telemetry.capture(event_name, properties)
  55. assert "Failed to send telemetry event" in caplog.text
  56. caplog.clear()