89 lines
2.9 KiB
Python
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"
|