diff --git a/data_analysis/tests/test_core.py b/data_analysis/tests/test_core.py new file mode 100644 index 0000000..6ade6fc --- /dev/null +++ b/data_analysis/tests/test_core.py @@ -0,0 +1,54 @@ +import io +import pandas as pd +import pytest +from unittest import mock + +import src.data_analysis.core as core + + +@pytest.fixture +def sample_csv(): + data = """timestamp,temperature,humidity,lux +2024-07-01T22:00:00,23.5,45.1,150.0 +2024-07-01T23:00:00,22.9,46.0,120.0 +2024-07-02T00:00:00,22.0,47.5,90.0 +""" + return io.StringIO(data) + + +def test_load_data_valid(monkeypatch, sample_csv): + monkeypatch.setattr(pd, 'read_csv', lambda f, parse_dates=None: pd.read_csv(sample_csv, parse_dates=parse_dates)) + + df = core.load_data('fake_path.csv') + + assert not df.empty, "Datenrahmen sollte nicht leer sein" + expected_columns = {'timestamp', 'temperature', 'humidity', 'lux'} + assert expected_columns.issubset(df.columns), f"Erwartete Spalten fehlen: {expected_columns - set(df.columns)}" + assert pd.api.types.is_datetime64_any_dtype(df['timestamp']), "timestamp-Spalte sollte datetime enthalten" + assert df['temperature'].dtype == float, "Temperatur sollte Float sein" + + +def test_load_data_invalid_path(): + with pytest.raises(FileNotFoundError): + core.load_data('nonexistent.csv') + + +def test_plot_data_creates_plot(monkeypatch): + df = pd.DataFrame({ + 'timestamp': pd.date_range('2024-07-01', periods=3, freq='H'), + 'temperature': [23.5, 22.9, 22.0], + 'humidity': [45.1, 46.0, 47.5], + 'lux': [150.0, 120.0, 90.0], + }) + + mock_savefig = mock.Mock() + with mock.patch('matplotlib.pyplot.savefig', mock_savefig): + core.plot_data(df) + + mock_savefig.assert_called(), "Plot sollte gespeichert werden" + + +def test_plot_data_with_empty_dataframe(): + df = pd.DataFrame(columns=['timestamp', 'temperature', 'humidity', 'lux']) + with pytest.raises(ValueError): + core.plot_data(df)