mirror of
https://github.com/sstent/FitTrack_ReportGenerator.git
synced 2026-01-26 09:02:26 +00:00
62 lines
2.2 KiB
Python
62 lines
2.2 KiB
Python
import io
|
|
import pytest
|
|
from unittest.mock import MagicMock, patch
|
|
from src.core.file_parser import (
|
|
FitParser,
|
|
WorkoutData,
|
|
WorkoutMetadata,
|
|
PowerData,
|
|
HeartRateData,
|
|
SpeedData,
|
|
ElevationData,
|
|
)
|
|
from datetime import datetime, timedelta
|
|
import pandas as pd
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_fit_file():
|
|
with patch("fitparse.FitFile") as mock_fit_file_class:
|
|
mock_fit_file_instance = MagicMock()
|
|
mock_fit_file_class.return_value = mock_fit_file_instance
|
|
|
|
# Mocking get_messages to return some dummy records
|
|
mock_record1 = MagicMock()
|
|
mock_record1.as_dict.return_value = {
|
|
"timestamp": datetime(2023, 1, 1, 10, 0, 0),
|
|
"power": 150,
|
|
"heart_rate": 130,
|
|
"speed": 5.0,
|
|
"altitude": 100.0,
|
|
}
|
|
mock_record2 = MagicMock()
|
|
mock_record2.as_dict.return_value = {
|
|
"timestamp": datetime(2023, 1, 1, 10, 1, 0),
|
|
"power": 160,
|
|
"heart_rate": 135,
|
|
"speed": 5.5,
|
|
"altitude": 105.0,
|
|
}
|
|
mock_fit_file_instance.get_messages.return_value = [mock_record1, mock_record2]
|
|
yield mock_fit_file_class
|
|
|
|
|
|
def test_fit_parser_parse_method_returns_workout_data(mock_fit_file):
|
|
# Mock the FitFile constructor directly within the test
|
|
with patch('fitparse.FitFile') as MockFitFile:
|
|
MockFitFile.return_value = mock_fit_file.return_value # Use the mocked instance from the fixture
|
|
parser = FitParser()
|
|
workout_data = parser.parse(io.BytesIO(b"dummy content"))
|
|
|
|
assert isinstance(workout_data, WorkoutData)
|
|
assert isinstance(workout_data.metadata, WorkoutMetadata)
|
|
assert workout_data.metadata.file_type == "FIT"
|
|
assert isinstance(workout_data.time_series_data, pd.DataFrame)
|
|
assert not workout_data.time_series_data.empty
|
|
assert "power" in workout_data.time_series_data.columns
|
|
assert "heart_rate" in workout_data.time_series_data.columns
|
|
assert "speed" in workout_data.time_series_data.columns
|
|
assert "altitude" in workout_data.time_series_data.columns
|
|
assert workout_data.metadata.start_time == datetime(2023, 1, 1, 10, 0, 0)
|
|
assert workout_data.metadata.duration == timedelta(minutes=1)
|