forked from Aider-AI/aider
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_analytics.py
136 lines (99 loc) · 4.34 KB
/
test_analytics.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
import json
import os
import tempfile
from pathlib import Path
from unittest.mock import 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(temp_data_dir):
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(temp_data_dir):
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 not True
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, temp_data_dir):
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(temp_data_dir):
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(temp_data_dir):
analytics = Analytics()
assert analytics.need_to_ask(True) is True
assert analytics.need_to_ask(False) is False
analytics.user_id = "000"
assert analytics.need_to_ask(None) is True
analytics.asked_opt_in = True
assert analytics.need_to_ask(True) is False
analytics.permanently_disable = True
assert analytics.need_to_ask(True) is False
def test_is_uuid_in_percentage():
from aider.analytics import is_uuid_in_percentage
# Test basic percentage thresholds
assert is_uuid_in_percentage("00000000000000000000000000000000", 1) is True
assert is_uuid_in_percentage("01999000000000000000000000000000", 1) is True
assert is_uuid_in_percentage("02000000000000000000000000000000", 1) is True
assert is_uuid_in_percentage("02910000000000000000000000000001", 1) is False
assert is_uuid_in_percentage("03000000000000000000000000000000", 1) is False
assert is_uuid_in_percentage("ff000000000000000000000000000000", 1) is False
assert is_uuid_in_percentage("00000000000000000000000000000000", 10) is True
assert is_uuid_in_percentage("19000000000000000000000000000000", 10) is True
assert is_uuid_in_percentage("1a000000000000000000000000000000", 10) is False
assert is_uuid_in_percentage("ff000000000000000000000000000000", 10) is False
# Test edge cases
assert is_uuid_in_percentage("00000000000000000000000000000000", 0) is False
assert is_uuid_in_percentage("00000000000000000000000000000000", 100) is True
assert is_uuid_in_percentage("ffffffffffffffffffffffffffffffff", 100) is True
# Test invalid inputs
with pytest.raises(ValueError):
is_uuid_in_percentage("00000000000000000000000000000000", -1)
with pytest.raises(ValueError):
is_uuid_in_percentage("00000000000000000000000000000000", 101)
# Test empty/None UUID
assert is_uuid_in_percentage("", 50) is False
assert is_uuid_in_percentage(None, 50) is False