49 lines
2 KiB
Python
49 lines
2 KiB
Python
import pytest
|
|
import pandas as pd
|
|
import json
|
|
from data_analysis import main
|
|
|
|
@pytest.fixture
|
|
def sample_data():
|
|
# Simulierte Testdaten ähnlich zu tests/data/sample_data.csv
|
|
return pd.DataFrame([
|
|
{"time": "2024-06-01 00:00:00", "surface_type": "steel", "average_diameter": 0.5, "minutes_since_start": 0},
|
|
{"time": "2024-06-01 00:15:00", "surface_type": "steel", "average_diameter": 0.7, "minutes_since_start": 15},
|
|
{"time": "2024-06-01 00:30:00", "surface_type": "aluminum", "average_diameter": 0.4, "minutes_since_start": 30},
|
|
{"time": "2024-06-01 00:45:00", "surface_type": "aluminum", "average_diameter": 0.6, "minutes_since_start": 45}
|
|
])
|
|
|
|
|
|
def test_analyze_condensation_returns_analysisresult(sample_data):
|
|
result = main.analyze_condensation(sample_data)
|
|
assert isinstance(result, main.AnalysisResult)
|
|
assert isinstance(result.average_diameter, float)
|
|
assert isinstance(result.condensation_rates, list)
|
|
assert all(isinstance(r, float) for r in result.condensation_rates)
|
|
|
|
|
|
def test_average_diameter_computation(sample_data):
|
|
result = main.analyze_condensation(sample_data)
|
|
expected_avg = sample_data['average_diameter'].mean()
|
|
assert pytest.approx(result.average_diameter, rel=1e-6) == expected_avg
|
|
|
|
|
|
def test_to_json_output_structure(sample_data):
|
|
result = main.analyze_condensation(sample_data)
|
|
json_str = result.to_json()
|
|
parsed = json.loads(json_str)
|
|
assert set(parsed.keys()) == {"average_diameter", "condensation_rates"}
|
|
assert isinstance(parsed["average_diameter"], float)
|
|
assert isinstance(parsed["condensation_rates"], list)
|
|
|
|
|
|
def test_input_validation_with_invalid_data():
|
|
invalid_data = [{"surface_type": "steel", "average_diameter": "not_a_float"}]
|
|
with pytest.raises((TypeError, ValueError)):
|
|
main.analyze_condensation(invalid_data)
|
|
|
|
|
|
def test_empty_dataframe():
|
|
df = pd.DataFrame(columns=['time', 'surface_type', 'average_diameter', 'minutes_since_start'])
|
|
with pytest.raises(ValueError):
|
|
main.analyze_condensation(df)
|