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)