feat: add health stats tools (sleep, HR, stress, body battery, HRV, SpO2)

This commit is contained in:
Christophe Vila
2026-05-17 19:49:06 +02:00
parent 3630aa2c42
commit 9c46a531f3
2 changed files with 169 additions and 0 deletions

View File

@@ -145,3 +145,70 @@ def test_get_activity_details_error():
server._client = MagicMock()
server._client.get_activity_details.side_effect = Exception("not found")
assert "Error fetching activity details" in server.get_activity_details("999")
def test_get_sleep_success():
server._auth_state = "authenticated"
server._client = MagicMock()
server._client.get_sleep_data.return_value = {
"dailySleepDTO": {"sleepScores": {"overall": {"value": 85}}}
}
data = json.loads(server.get_sleep("2026-05-17"))
assert data["dailySleepDTO"]["sleepScores"]["overall"]["value"] == 85
server._client.get_sleep_data.assert_called_once_with("2026-05-17")
def test_get_sleep_no_data():
server._auth_state = "authenticated"
server._client = MagicMock()
server._client.get_sleep_data.return_value = None
assert server.get_sleep("2026-05-17") == "No sleep data found for 2026-05-17"
def test_get_heart_rate_success():
server._auth_state = "authenticated"
server._client = MagicMock()
server._client.get_heart_rates.return_value = {"restingHeartRate": 52}
data = json.loads(server.get_heart_rate("2026-05-17"))
assert data["restingHeartRate"] == 52
server._client.get_heart_rates.assert_called_once_with("2026-05-17")
def test_get_stress_success():
server._auth_state = "authenticated"
server._client = MagicMock()
server._client.get_stress_data.return_value = {"stressValuesArray": [[1000, 35]]}
data = json.loads(server.get_stress("2026-05-17"))
assert "stressValuesArray" in data
def test_get_body_battery_success():
server._auth_state = "authenticated"
server._client = MagicMock()
server._client.get_body_battery.return_value = [{"bodyBatteryStatList": []}]
data = json.loads(server.get_body_battery("2026-05-17"))
assert isinstance(data, list)
server._client.get_body_battery.assert_called_once_with("2026-05-17", "2026-05-17")
def test_get_hrv_success():
server._auth_state = "authenticated"
server._client = MagicMock()
server._client.get_hrv_data.return_value = {"hrvSummary": {"weeklyAvg": 45}}
data = json.loads(server.get_hrv("2026-05-17"))
assert data["hrvSummary"]["weeklyAvg"] == 45
def test_get_spo2_success():
server._auth_state = "authenticated"
server._client = MagicMock()
server._client.get_spo2_data.return_value = {"spO2HourlyAverages": []}
data = json.loads(server.get_spo2("2026-05-17"))
assert "spO2HourlyAverages" in data
def test_health_tools_unauthenticated():
server._auth_state = "unauthenticated"
for fn in (server.get_sleep, server.get_heart_rate, server.get_stress,
server.get_body_battery, server.get_hrv, server.get_spo2):
assert "Not authenticated" in fn("2026-05-17")