many updates
This commit is contained in:
Binary file not shown.
49
FitnessSync/backend/tests/test_analysis.py
Normal file
49
FitnessSync/backend/tests/test_analysis.py
Normal file
@@ -0,0 +1,49 @@
|
||||
|
||||
import pytest
|
||||
from unittest.mock import MagicMock, patch
|
||||
from datetime import datetime
|
||||
from src.api.analysis import compare_efforts, ComparisonResponse
|
||||
from src.models.segment_effort import SegmentEffort
|
||||
from src.models.activity import Activity
|
||||
from src.models.bike_setup import BikeSetup
|
||||
from src.models.health_metric import HealthMetric
|
||||
|
||||
def test_compare_efforts_logic():
|
||||
# Mock DB Session
|
||||
mock_db = MagicMock()
|
||||
|
||||
# Setup Entities
|
||||
bike = BikeSetup(id=1, name="S-Works", weight_kg=7.5)
|
||||
|
||||
act1 = Activity(id=1, activity_name="Ride 1", start_time=datetime(2023, 6, 1, 10, 0), avg_cadence=90, avg_speed=10.0, avg_temperature=20.0, bike_setup=bike)
|
||||
act2 = Activity(id=2, activity_name="Ride 2", start_time=datetime(2023, 6, 2, 10, 0), avg_cadence=95, avg_speed=11.0, avg_temperature=25.0, bike_setup=bike)
|
||||
|
||||
eff1 = SegmentEffort(id=101, activity_id=1, elapsed_time=100, avg_power=200, avg_hr=150, activity=act1)
|
||||
eff2 = SegmentEffort(id=102, activity_id=2, elapsed_time=90, avg_power=220, avg_hr=160, activity=act2)
|
||||
|
||||
# Mock Query Results
|
||||
# Filter efforts
|
||||
mock_db.query.return_value.filter.return_value.all.return_value = [eff1, eff2]
|
||||
|
||||
# Mock HealthMetric (Body Weight)
|
||||
weight_metric = HealthMetric(metric_value=70.0, date=datetime(2023, 6, 1))
|
||||
mock_db.query.return_value.filter.return_value.order_by.return_value.first.return_value = weight_metric
|
||||
|
||||
# Run Function
|
||||
response = compare_efforts([101, 102], mock_db)
|
||||
|
||||
# Assertions
|
||||
assert len(response.efforts) == 2
|
||||
|
||||
e1_data = next(e for e in response.efforts if e.effort_id == 101)
|
||||
e2_data = next(e for e in response.efforts if e.effort_id == 102)
|
||||
|
||||
assert e1_data.avg_power == 200
|
||||
assert e2_data.avg_power == 220
|
||||
assert e1_data.total_weight == 77.5 # 70 + 7.5
|
||||
assert e1_data.watts_per_kg == round(200/70.0, 2)
|
||||
|
||||
# Winners
|
||||
assert response.winners['avg_power'] == 102
|
||||
assert response.winners['elapsed_time'] == 102 # Lower is better? Logic said min for time.
|
||||
assert response.winners['avg_hr'] == 101 # Lower is better
|
||||
Reference in New Issue
Block a user