FitMop/backend/tests/test_garmin_manager.py

89 lines
2.9 KiB
Python

from unittest.mock import MagicMock
import pytest
from garmin.workout_manager import WorkoutManager
@pytest.fixture
def mock_ai():
return MagicMock()
def test_workout_manager_validation():
manager = WorkoutManager()
workout = {
"workoutName": "Test",
"sportType": {"sportTypeId": 1, "sportTypeKey": "running"},
"workoutSegments": [{
"segmentOrder": 1,
"workoutSteps": [
{
"type": "ExecutableStepDTO",
"stepOrder": 1,
"stepType": {"stepTypeId": 1, "stepTypeKey": "warmup"},
"endCondition": {"conditionTypeId": 2, "conditionTypeKey": "time"},
"endConditionValue": 600
}
]
}]
}
errors = manager.validate_workout_json(workout)
assert len(errors) == 0
def test_workout_manager_validation_repeat():
manager = WorkoutManager()
workout = {
"workoutName": "Repeat Test",
"sportType": {"sportTypeId": 1, "sportTypeKey": "running"},
"workoutSegments": [{
"segmentOrder": 1,
"workoutSteps": [
{
"type": "RepeatGroupDTO",
"numberOfIterations": 3,
"workoutSteps": [
{
"type": "ExecutableStepDTO",
"stepType": {"stepTypeId": 3, "stepTypeKey": "interval"},
"endCondition": {"conditionTypeId": 1, "conditionTypeKey": "distance"},
"endConditionValue": 1000
}
]
}
]
}]
}
errors = manager.validate_workout_json(workout)
assert len(errors) == 0
def test_workout_manager_constants():
manager = WorkoutManager()
constants = manager.get_constants()
assert "SportType" in constants
assert "StepType" in constants
def test_workout_manager_generate_json(mock_ai):
manager = WorkoutManager(ai_engine=mock_ai)
mock_ai.generate_json.return_value = {"name": "Mocha Workout"}
res = manager.generate_workout_json("make it harder")
assert res["name"] == "Mocha Workout"
mock_ai.generate_json.assert_called_once()
def test_mock_ai_builder():
manager = WorkoutManager()
# Test Run
run_workout = manager._mock_ai_builder("I want to run 5k")
assert run_workout["workoutName"] == "AI Run Session"
assert run_workout["sportType"]["sportTypeKey"] == "running"
# Test Bike
bike_workout = manager._mock_ai_builder("cycling session")
assert bike_workout["workoutName"] == "AI Ride"
# Test Default (Strength)
strength_workout = manager._mock_ai_builder("lift weights")
assert strength_workout["workoutName"] == "AI Strength"
assert strength_workout["sportType"]["sportTypeKey"] == "strength_training"