from datetime import datetime, timedelta import pandas as pd from src.core.workout_data import WorkoutData, WorkoutMetadata, PowerData, HeartRateData, SpeedData, ElevationData def test_workout_metadata_creation(): metadata = WorkoutMetadata( start_time=datetime(2023, 1, 1, 10, 0, 0), duration=timedelta(hours=1), device="Garmin", file_type="FIT" ) assert metadata.start_time == datetime(2023, 1, 1, 10, 0, 0) assert metadata.duration == timedelta(hours=1) assert metadata.device == "Garmin" assert metadata.file_type == "FIT" def test_power_data_creation(): power_data = PowerData( raw_power_stream=[100.0, 150.0, 200.0], average_power=150.0, normalized_power=160.0, intensity_factor=0.8, training_stress_score=75.0, zone_distribution={"Zone 2": "30min"} ) assert power_data.average_power == 150.0 assert power_data.raw_power_stream == [100.0, 150.0, 200.0] def test_heart_rate_data_creation(): hr_data = HeartRateData( raw_hr_stream=[120, 130, 140], average_hr=130.0, max_hr=180, zone_distribution={"Zone 3": "20min"} ) assert hr_data.average_hr == 130.0 assert hr_data.raw_hr_stream == [120, 130, 140] def test_speed_data_creation(): speed_data = SpeedData( raw_speed_stream=[5.0, 6.0, 7.0], average_speed=6.0, max_speed=8.0 ) assert speed_data.average_speed == 6.0 def test_elevation_data_creation(): elevation_data = ElevationData( raw_elevation_stream=[100.0, 110.0, 105.0], total_ascent=20.0, total_descent=15.0, max_elevation=110.0, min_elevation=95.0 ) assert elevation_data.total_ascent == 20.0 def test_workout_data_creation(): metadata = WorkoutMetadata( start_time=datetime(2023, 1, 1, 10, 0, 0), duration=timedelta(hours=1), device="Garmin", file_type="FIT" ) power_data = PowerData(average_power=150.0) hr_data = HeartRateData(average_hr=130.0) speed_data = SpeedData(average_speed=25.0) elevation_data = ElevationData(total_ascent=100.0) time_series = pd.DataFrame({"timestamp": [datetime(2023, 1, 1, 10, 0, 0)], "power": [150]}) workout_data = WorkoutData( metadata=metadata, time_series_data=time_series, power_data=power_data, heart_rate_data=hr_data, speed_data=speed_data, elevation_data=elevation_data ) assert workout_data.metadata.file_type == "FIT" assert workout_data.power_data.average_power == 150.0 assert workout_data.heart_rate_data.average_hr == 130.0 assert workout_data.speed_data.average_speed == 25.0 assert workout_data.elevation_data.total_ascent == 100.0 assert not workout_data.time_series_data.empty