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"