Files
StarPilot/selfdrive/ui/tests/test_drive_stats_widget.py
T
firestar5683 cc40a28562 home cleanup
2026-07-20 23:53:20 -05:00

196 lines
6.0 KiB
Python

from datetime import datetime
from openpilot.selfdrive.ui.widgets.drive_stats import demo_drive_stats_data, load_drive_stats_data
class FakeParams:
def __init__(self, values):
self.values = values
def get(self, key):
return self.values.get(key)
def get_bool(self, key):
return bool(self.values.get(key, False))
def test_drive_stats_uses_cloud_totals_and_local_galaxy_week():
params = FakeParams({
"ApiCache_DriveStats": {
"all": {"distance": 100.0, "routes": 12, "minutes": 360},
"week": {"distance": 25.0, "routes": 3, "minutes": 90},
},
"GalaxyDashboardStats": {
"ignoredRoutes": ["ignored"],
"routes": {
"previous-week": {
"date": "2026-07-19T09:00:00",
"distanceMeters": 8046.72,
"duration": 1800,
"engagedSeconds": 1200,
},
"this-week": {
"date": "2026-07-20T09:00:00",
"distanceMeters": 16093.44,
"duration": 3600,
"engagedSeconds": 3000,
},
"ignored": {
"date": "2026-07-20T10:00:00",
"distanceMeters": 160934.4,
"duration": 7200,
},
},
"personalRecords": {
"longestDrive": {"distanceMeters": 32186.88, "date": "2026-07-18T09:00:00"},
"mostEngagedDay": {"percent": 0, "date": ""},
},
},
})
data = load_drive_stats_data(params, now=datetime(2026, 7, 20, 12, 0, 0))
assert data.all_time.drives == 12
assert data.all_time.distance == 100.0
assert data.all_time.hours == 6.0
assert data.past_week.drives == 3
assert data.past_week.distance == 25.0
assert data.this_week.drives == 1
assert data.this_week.distance == 10.0
assert data.this_week.hours == 1.0
assert [day.label for day in data.daily_distance] == ["M", "T", "W", "T", "F", "S", "S"]
assert data.daily_distance[0].distance == 10.0
assert data.daily_distance[0].is_today
assert data.daily_distance[1].is_future
assert data.records[0].value == "20.0 mi"
assert data.records[0].detail == "Jul 18"
assert data.records[1].value == "83%"
assert data.records[1].detail == "Jul 20"
def test_drive_stats_falls_back_to_local_totals_and_computed_records():
params = FakeParams({
"IsMetric": True,
"StarPilotStats": {
"StarPilotMeters": 25000.0,
"StarPilotSeconds": 7200,
"StarPilotDrives": 4,
},
"GalaxyDashboardStats": {
"routes": {
"previous-week": {
"date": "2026-07-19T09:00:00",
"distanceMeters": 5000.0,
"duration": 1800,
"engagedSeconds": 900,
"clean": True,
"undistracted": True,
},
"this-week": {
"date": "2026-07-20T09:00:00",
"distanceMeters": 10000.0,
"duration": 3600,
"engagedSeconds": 3000,
"clean": True,
"undistracted": True,
},
},
},
})
data = load_drive_stats_data(params, now=datetime(2026, 7, 20, 12, 0, 0))
assert data.all_time.drives == 4
assert data.all_time.distance == 25.0
assert data.all_time.hours == 2.0
assert data.past_week.drives == 2
assert data.past_week.distance == 15.0
assert data.this_week.drives == 1
assert data.this_week.distance == 10.0
assert data.records[0].value == "10.0 km"
assert data.records[2].value == "10.0 km"
assert data.records[3].value == "2 days"
assert data.records[5].value == "2 drives"
def test_drive_stats_repairs_touched_filesystem_routes_without_moving_them_to_today():
params = FakeParams({
"ApiCache_DriveStats": {
"week": {"distance": 302.9, "routes": 31, "minutes": 467},
},
"GalaxyDashboardStats": {
"routes": {
"000011e4--2ed59ee965": {
"date": "2026-07-18T08:59:31",
"distanceMeters": 1609.344,
"duration": 600,
"timeSource": "log",
},
"000011e5--92dc4759b2": {
"date": "2026-07-20T11:33:49",
"distanceMeters": 16093.44,
"duration": 1800,
"timeSource": "filesystem",
},
"000011e6--8b54c54356": {
"date": "2026-07-19T07:03:36",
"distanceMeters": 3218.688,
"duration": 900,
"timeSource": "log",
},
"000011e8--09c2203d2e": {
"date": "2026-07-19T18:17:44",
"distanceMeters": 1609.344,
"duration": 600,
"timeSource": "log",
},
"000011e9--a3a4dcd6ef": {
"date": "2026-07-20T11:38:53",
"distanceMeters": 32186.88,
"duration": 1800,
"timeSource": "filesystem",
},
"000011ea--00b28940d5": {
"date": "2026-07-20T02:18:17",
"distanceMeters": 8046.72,
"duration": 900,
"timeSource": "log",
},
},
},
})
data = load_drive_stats_data(params, now=datetime(2026, 7, 20, 12, 0, 0))
assert data.past_week.distance == 302.9
assert round(data.this_week.distance, 1) == 25.0
assert round(data.daily_distance[0].distance, 1) == 25.0
def test_drive_stats_uses_clean_empty_record_labels():
data = load_drive_stats_data(FakeParams({}), now=datetime(2026, 7, 20, 12, 0, 0))
assert data.records[2].detail == "No drives"
assert data.records[3].value == "0 days"
assert data.records[3].detail == "No drives"
assert data.records[4].detail == "No clean drives"
assert data.records[5].value == "0 drives"
assert data.records[5].detail == "No clean drives"
def test_demo_drive_stats_populates_every_dashboard_section():
data = demo_drive_stats_data(False, now=datetime(2026, 7, 20, 12, 0, 0))
assert data.all_time.drives == 584
assert data.past_week.drives == 18
assert data.this_week.drives == 7
assert len(data.daily_distance) == 7
assert all(day.distance > 0 for day in data.daily_distance)
assert data.daily_distance[0].is_today
assert len(data.records) == 6
metric_data = demo_drive_stats_data(True, now=datetime(2026, 7, 20, 12, 0, 0))
assert metric_data.all_time.unit == "kilometers"
assert metric_data.all_time.distance > data.all_time.distance
assert metric_data.records[0].value.endswith(" km")