mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-07-22 17:52:07 +08:00
196 lines
6.0 KiB
Python
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")
|