import pandas as pd import pytest from data_processing import classify_treatments, glucose_status, summarize_time_in_range @pytest.fixture def sample_glucose(): return pd.DataFrame( { "timestamp": pd.to_datetime( ["2026-07-25 08:00", "2026-07-25 09:00", "2026-07-25 10:00", "2026-07-25 11:00"] ), "mmol": [3.5, 6.0, 11.0, 7.0], # laag, in bereik, hoog, in bereik } ) @pytest.fixture def sample_treatments(): return pd.DataFrame( { "timestamp": pd.to_datetime( [ "2026-07-25 08:00", "2026-07-25 12:00", "2026-07-24 09:00", "2026-07-20 09:00", ] ), "eventType": ["Meal Bolus", "Correction Bolus", "Site Change", "Sensor Change"], "insulin": [4.0, 1.5, None, None], "carbs": [45.0, None, None, None], } ) def test_glucose_status_classifies_correctly(): assert glucose_status(3.5) == "low" assert glucose_status(6.0) == "in_range" assert glucose_status(11.0) == "high" def test_summarize_time_in_range(sample_glucose): result = summarize_time_in_range(sample_glucose) assert result == {"low": 25.0, "in_range": 50.0, "high": 25.0} def test_summarize_time_in_range_handles_empty_input(): empty = pd.DataFrame(columns=["timestamp", "mmol"]) result = summarize_time_in_range(empty) assert result == {"low": 0.0, "in_range": 0.0, "high": 0.0} def test_classify_treatments_splits_into_expected_subsets(sample_treatments): events = classify_treatments(sample_treatments) assert len(events["insulin"]) == 2 assert set(events["insulin"]["insulin"]) == {4.0, 1.5} assert len(events["carbs"]) == 1 assert events["carbs"].iloc[0]["carbs"] == 45.0 assert len(events["site_changes"]) == 1 assert events["site_changes"].iloc[0]["eventType"] == "Site Change" assert len(events["sensor_changes"]) == 1 assert events["sensor_changes"].iloc[0]["eventType"] == "Sensor Change" def test_classify_treatments_handles_empty_input(): empty = pd.DataFrame(columns=["timestamp", "eventType", "insulin", "carbs"]) events = classify_treatments(empty) assert all(df.empty for df in events.values())