test_posthog.py 2.7 KB

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