From 8678e3fa5d60ed79ad3ab436896cd665f6e6b548 Mon Sep 17 00:00:00 2001 From: Mika Date: Sun, 1 Mar 2026 03:11:39 +0000 Subject: [PATCH] Add data_analysis/tests/test_main.py --- data_analysis/tests/test_main.py | 49 ++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 data_analysis/tests/test_main.py diff --git a/data_analysis/tests/test_main.py b/data_analysis/tests/test_main.py new file mode 100644 index 0000000..766a798 --- /dev/null +++ b/data_analysis/tests/test_main.py @@ -0,0 +1,49 @@ +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)