From ccbf1482c16c898e1c6f6e0cfca07076686ccc48 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Thu, 31 Oct 2024 13:22:47 -0700 Subject: [PATCH] test: add comprehensive test suite for Analytics class --- tests/basic/test_analytics.py | 101 +++++++++++++++++++++++++++++++++- 1 file changed, 100 insertions(+), 1 deletion(-) diff --git a/tests/basic/test_analytics.py b/tests/basic/test_analytics.py index 84841f1e8..bba7c6ea2 100644 --- a/tests/basic/test_analytics.py +++ b/tests/basic/test_analytics.py @@ -1 +1,100 @@ -#ai write some tests for Analytics! +import json +import os +import tempfile +from pathlib import Path +from unittest.mock import MagicMock, patch + +import pytest + +from aider.analytics import Analytics + + +@pytest.fixture +def temp_analytics_file(): + with tempfile.NamedTemporaryFile(delete=False) as f: + yield f.name + os.unlink(f.name) + + +@pytest.fixture +def temp_data_dir(monkeypatch): + with tempfile.TemporaryDirectory() as tmpdir: + temp_dir = Path(tmpdir) + monkeypatch.setattr(Path, "home", lambda: temp_dir) + yield temp_dir + + +def test_analytics_initialization(): + analytics = Analytics(permanently_disable=True) + assert analytics.mp is None + assert analytics.ph is None + assert analytics.permanently_disable is True + assert analytics.user_id is not None + + +def test_analytics_enable_disable(): + analytics = Analytics() + analytics.asked_opt_in = True + + analytics.enable() + assert analytics.mp is not None + assert analytics.ph is not None + + analytics.disable(permanently=False) + assert analytics.mp is None + assert analytics.ph is None + assert analytics.permanently_disable is False + + analytics.disable(permanently=True) + assert analytics.permanently_disable is True + + +def test_analytics_data_persistence(temp_data_dir): + analytics1 = Analytics() + user_id = analytics1.user_id + + analytics2 = Analytics() + assert analytics2.user_id == user_id + + +def test_analytics_event_logging(temp_analytics_file): + analytics = Analytics(logfile=temp_analytics_file) + analytics.asked_opt_in = True + analytics.enable() + + test_event = "test_event" + test_properties = {"test_key": "test_value"} + + with patch.object(analytics.mp, 'track') as mock_mp_track: + with patch.object(analytics.ph, 'capture') as mock_ph_capture: + analytics.event(test_event, **test_properties) + + mock_mp_track.assert_called_once() + mock_ph_capture.assert_called_once() + + # Verify logfile + with open(temp_analytics_file) as f: + log_entry = json.loads(f.read().strip()) + assert log_entry["event"] == test_event + assert "test_key" in log_entry["properties"] + + +def test_system_info(): + analytics = Analytics() + sys_info = analytics.get_system_info() + + assert "python_version" in sys_info + assert "os_platform" in sys_info + assert "os_release" in sys_info + assert "machine" in sys_info + + +def test_need_to_ask(): + analytics = Analytics() + assert analytics.need_to_ask() is True + + analytics.asked_opt_in = True + assert analytics.need_to_ask() is False + + analytics.permanently_disable = True + assert analytics.need_to_ask() is False