mirror of
https://github.com/sstent/FitTrack_ReportGenerator.git
synced 2026-01-28 10:01:42 +00:00
sync
This commit is contained in:
@@ -1,53 +1,60 @@
|
||||
import pytest
|
||||
import pandas as pd
|
||||
from datetime import datetime, timedelta
|
||||
from src.core.workout_data import WorkoutData, WorkoutMetadata, PowerData, HeartRateData, SpeedData, ElevationData
|
||||
from src.core.workout_data import (
|
||||
WorkoutData,
|
||||
WorkoutMetadata,
|
||||
PowerData,
|
||||
HeartRateData,
|
||||
SpeedData,
|
||||
ElevationData,
|
||||
)
|
||||
from src.core.chart_generator import ChartGenerator
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def sample_workout_data():
|
||||
# Create dummy time-series data
|
||||
timestamps = pd.to_datetime([datetime(2025, 1, 1, 10, 0, 0) + timedelta(seconds=i) for i in range(600)])
|
||||
timestamps = pd.to_datetime(
|
||||
[datetime(2025, 1, 1, 10, 0, 0) + timedelta(seconds=i) for i in range(600)]
|
||||
)
|
||||
power = pd.Series([150 + 50 * (i % 10) for i in range(600)], index=timestamps)
|
||||
heart_rate = pd.Series([120 + 10 * (i % 5) for i in range(600)], index=timestamps)
|
||||
speed = pd.Series([5 + 2 * (i % 7) for i in range(600)], index=timestamps)
|
||||
altitude = pd.Series([100 + 10 * (i % 12) for i in range(600)], index=timestamps)
|
||||
|
||||
time_series_data = pd.DataFrame({
|
||||
"power": power,
|
||||
"heart_rate": heart_rate,
|
||||
"speed": speed,
|
||||
"altitude": altitude
|
||||
})
|
||||
time_series_data = pd.DataFrame(
|
||||
{"power": power, "heart_rate": heart_rate, "speed": speed, "altitude": altitude}
|
||||
)
|
||||
|
||||
metadata = WorkoutMetadata(
|
||||
start_time=datetime(2025, 1, 1, 10, 0, 0),
|
||||
duration=timedelta(minutes=10),
|
||||
device="Garmin",
|
||||
file_type="FIT"
|
||||
file_type="FIT",
|
||||
)
|
||||
|
||||
power_data = PowerData(
|
||||
raw_power_stream=power.tolist(),
|
||||
average_power=power.mean(),
|
||||
normalized_power=power.mean() * 1.05, # Dummy value
|
||||
normalized_power=power.mean() * 1.05, # Dummy value
|
||||
intensity_factor=0.8,
|
||||
training_stress_score=50,
|
||||
zone_distribution={'Z1': 100, 'Z2': 200, 'Z3': 300}
|
||||
zone_distribution={"Z1": 100, "Z2": 200, "Z3": 300},
|
||||
)
|
||||
|
||||
heart_rate_data = HeartRateData(
|
||||
raw_hr_stream=heart_rate.tolist(),
|
||||
average_hr=heart_rate.mean(),
|
||||
max_hr=heart_rate.max(),
|
||||
zone_distribution={'Z1': 150, 'Z2': 250, 'Z3': 200}
|
||||
zone_distribution={"Z1": 150, "Z2": 250, "Z3": 200},
|
||||
)
|
||||
|
||||
speed_data = SpeedData(
|
||||
raw_speed_stream=speed.tolist(),
|
||||
average_speed=speed.mean(),
|
||||
max_speed=speed.max(),
|
||||
zone_distribution={'S1': 100, 'S2': 200, 'S3': 300}
|
||||
zone_distribution={"S1": 100, "S2": 200, "S3": 300},
|
||||
)
|
||||
|
||||
elevation_data = ElevationData(
|
||||
@@ -55,7 +62,7 @@ def sample_workout_data():
|
||||
total_ascent=100,
|
||||
total_descent=50,
|
||||
max_elevation=200,
|
||||
min_elevation=50
|
||||
min_elevation=50,
|
||||
)
|
||||
|
||||
return WorkoutData(
|
||||
@@ -64,40 +71,40 @@ def sample_workout_data():
|
||||
power_data=power_data,
|
||||
heart_rate_data=heart_rate_data,
|
||||
speed_data=speed_data,
|
||||
elevation_data=elevation_data
|
||||
elevation_data=elevation_data,
|
||||
)
|
||||
|
||||
def test_generate_power_curve_chart(sample_workout_data, tmp_path):
|
||||
chart_generator = ChartGenerator(sample_workout_data)
|
||||
output_file = tmp_path / "power_curve.png"
|
||||
chart_generator.generate_power_curve_chart(output_file)
|
||||
assert output_file.exists()
|
||||
assert output_file.stat().st_size > 0
|
||||
|
||||
def test_generate_elevation_profile_chart(sample_workout_data, tmp_path):
|
||||
def test_generate_power_curve_chart(sample_workout_data):
|
||||
chart_generator = ChartGenerator(sample_workout_data)
|
||||
output_file = tmp_path / "elevation_profile.png"
|
||||
chart_generator.generate_elevation_profile_chart(output_file)
|
||||
assert output_file.exists()
|
||||
assert output_file.stat().st_size > 0
|
||||
chart_bytes = chart_generator.generate_power_curve_chart()
|
||||
assert isinstance(chart_bytes, bytes)
|
||||
assert len(chart_bytes) > 0
|
||||
|
||||
def test_generate_power_zone_distribution_chart(sample_workout_data, tmp_path):
|
||||
chart_generator = ChartGenerator(sample_workout_data)
|
||||
output_file = tmp_path / "power_zone_distribution.png"
|
||||
chart_generator.generate_zone_distribution_chart("power", output_file)
|
||||
assert output_file.exists()
|
||||
assert output_file.stat().st_size > 0
|
||||
|
||||
def test_generate_hr_zone_distribution_chart(sample_workout_data, tmp_path):
|
||||
def test_generate_elevation_profile_chart(sample_workout_data):
|
||||
chart_generator = ChartGenerator(sample_workout_data)
|
||||
output_file = tmp_path / "hr_zone_distribution.png"
|
||||
chart_generator.generate_zone_distribution_chart("heart_rate", output_file)
|
||||
assert output_file.exists()
|
||||
assert output_file.stat().st_size > 0
|
||||
chart_bytes = chart_generator.generate_elevation_profile_chart()
|
||||
assert isinstance(chart_bytes, bytes)
|
||||
assert len(chart_bytes) > 0
|
||||
|
||||
def test_generate_speed_zone_distribution_chart(sample_workout_data, tmp_path):
|
||||
|
||||
def test_generate_power_zone_distribution_chart(sample_workout_data):
|
||||
chart_generator = ChartGenerator(sample_workout_data)
|
||||
output_file = tmp_path / "speed_zone_distribution.png"
|
||||
chart_generator.generate_zone_distribution_chart("speed", output_file)
|
||||
assert output_file.exists()
|
||||
assert output_file.stat().st_size > 0
|
||||
chart_bytes = chart_generator.generate_zone_distribution_chart("power")
|
||||
assert isinstance(chart_bytes, bytes)
|
||||
assert len(chart_bytes) > 0
|
||||
|
||||
|
||||
def test_generate_hr_zone_distribution_chart(sample_workout_data):
|
||||
chart_generator = ChartGenerator(sample_workout_data)
|
||||
chart_bytes = chart_generator.generate_zone_distribution_chart("heart_rate")
|
||||
assert isinstance(chart_bytes, bytes)
|
||||
assert len(chart_bytes) > 0
|
||||
|
||||
|
||||
def test_generate_speed_zone_distribution_chart(sample_workout_data):
|
||||
chart_generator = ChartGenerator(sample_workout_data)
|
||||
chart_bytes = chart_generator.generate_zone_distribution_chart("speed")
|
||||
assert isinstance(chart_bytes, bytes)
|
||||
assert len(chart_bytes) > 0
|
||||
|
||||
Reference in New Issue
Block a user