Files
FitTrack_ReportGenerator/tests/performance/test_performance.py
2025-10-12 06:38:44 -07:00

65 lines
2.2 KiB
Python

from datetime import datetime
from unittest.mock import patch, MagicMock
import shutil
import pytest
import time
from fastapi.testclient import TestClient
from api.main import app
import os
import io
from uuid import uuid4
client = TestClient(app)
# Performance Goal SC-002: Analysis of a typical 2-hour workout file MUST complete in under 30 seconds.
# Helper to create a dummy FIT file for testing
def create_dummy_fit_file(file_path, source_file_path="/home/sstent/Projects/FitTrack_ReportGenerator/activity_207928738.fit"):
shutil.copy(source_file_path, file_path)
# Helper to create a dummy ZIP file with multiple workout files
@patch("src.db.models.WorkoutAnalysis")
@patch("src.db.session.get_db")
@patch("src.core.file_parser.FitParser")
@patch("src.core.workout_analyzer.WorkoutAnalyzer")
@patch("src.core.report_generator.ReportGenerator")
def test_performance_single_workout_analysis(
mock_report_generator_cls,
mock_workout_analyzer_cls,
mock_fit_parser_cls,
mock_get_db,
mock_workout_analysis_cls,
tmp_path,
):
# Mock database session
mock_db_session = MagicMock()
mock_get_db.return_value = mock_db_session
mock_db_session.add.return_value = None
mock_db_session.commit.return_value = None
mock_db_session.refresh.return_value = None
mock_db_session.query.return_value.filter.return_value.first.return_value = MagicMock(id=uuid4(), ftp_value=250.0)
# SC-002: Analysis of a typical 2-hour workout file MUST complete in under 30 seconds.
dummy_fit_file_path = tmp_path / "2_hour_workout.fit"
create_dummy_fit_file(dummy_fit_file_path)
start_time = time.time()
with open(dummy_fit_file_path, "rb") as f:
response = client.post(
"/api/analyze/workout",
files={"file": ("2_hour_workout.fit", f, "application/octet-stream")},
data={"user_id": str(uuid4()), "ftp_value": 250.0},
)
end_time = time.time()
elapsed_time = end_time - start_time
assert response.status_code == 200
assert elapsed_time < 30, (
f"Single workout analysis took {elapsed_time:.2f} seconds, exceeding 30 seconds."
)
print(f"Single workout analysis completed in {elapsed_time:.2f} seconds.")