Spaces:
Sleeping
Sleeping
File size: 2,406 Bytes
8348f0b 1d7d962 8348f0b | 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 | import unittest
from app.services.running_coaching import build_run_analysis, build_running_profile
class RunningCoachingTests(unittest.TestCase):
def test_prioritizes_high_load_and_low_cadence(self):
analysis = build_run_analysis(
{
"sample_count": 80,
"avg_heart_rate_bpm": 154,
"heart_rate_rise_bpm": 16,
"avg_cadence_spm": 142,
"avg_ground_contact_time_ms": 330,
"avg_vertical_oscillation_cm": 11.4,
"avg_left_right_asymmetry_pct": 9.2,
}
)
self.assertEqual([item["key"] for item in analysis["focus"]], ["heart_rate", "cadence"])
self.assertIn("보폭", analysis["focus"][1]["action"])
def test_does_not_warn_when_form_values_are_stable(self):
analysis = build_run_analysis(
{
"sample_count": 80,
"avg_heart_rate_bpm": 148,
"avg_cadence_spm": 170,
"avg_ground_contact_time_ms": 280,
"avg_vertical_oscillation_cm": 8.0,
"avg_left_right_asymmetry_pct": 3.1,
}
)
self.assertEqual(analysis["focus"], [])
self.assertGreaterEqual(len(analysis["strengths"]), 2)
def test_profile_uses_repeated_sensor_records(self):
profile = build_running_profile(
[
{"sensor_summary": {"avg_cadence_spm": 142, "avg_ground_contact_time_ms": 325}},
{"sensor_summary": {"avg_cadence_spm": 145, "avg_ground_contact_time_ms": 320}},
{"sensor_summary": {"avg_cadence_spm": 148, "avg_ground_contact_time_ms": 315}},
]
)
self.assertEqual(profile["status"], "ready")
self.assertEqual(profile["next_focus"]["title"], "러닝 리듬")
self.assertEqual(profile["sample_size"], 3)
def test_heart_rate_only_records_do_not_ready_form_profile(self):
profile = build_running_profile(
[
{"sensor_summary": {"avg_heart_rate_bpm": 145}},
{"sensor_summary": {"avg_heart_rate_bpm": 148}},
{"sensor_summary": {"avg_heart_rate_bpm": 150}},
]
)
self.assertEqual(profile["status"], "collecting")
self.assertEqual(profile["sample_size"], 0)
if __name__ == "__main__":
unittest.main()
|