#!/usr/bin/env python3 """ Tester för Weather Intelligence Pipeline """ import sys sys.path.insert(0, '/home/bernt/.openclaw/workspace/life-weather') from providers.weather_provider import WeatherProvider from storage.observation_store import ObservationStore from engine.risk_engine import RiskEngine def test_weather_provider(): """Testa att väderdata kan hämtas""" provider = WeatherProvider() weather = provider.get_current_weather() assert weather["temperature"] is not None, "Temperatur ska finnas" assert weather["precipitation"] is not None, "Nederbörd ska finnas" assert weather["wind"] is not None, "Vind ska finnas" print("✓ test_weather_provider passed") def test_observation_store(): """Testa att observationer kan sparas""" store = ObservationStore() # Testa idempotent sparande obs_id1 = store.save_observation( road_id=999, observation_type="test", value=22.0, unit="celsius", timestamp="2026-07-04T12:00:00", raw_data={"test": True} ) obs_id2 = store.save_observation( road_id=999, observation_type="test", value=22.0, unit="celsius", timestamp="2026-07-04T12:00:00", raw_data={"test": True} ) # Andra sparandet ska returnera None (idempotent) assert obs_id2 is None, "Dubblett ska inte sparas" print("✓ test_observation_store passed") def test_risk_engine(): """Testa riskberäkning""" engine = RiskEngine() # Testa isrisk risks = engine.calculate_risk(1, "primary", temperature=-5) assert len(risks) > 0, "Isrisk ska detekteras" assert any(r.risk_type == "ice" for r in risks), "Isrisk ska finnas" # Testa översvämningsrisk risks = engine.calculate_risk(1, "primary", precipitation=15) assert len(risks) > 0, "Översvämningsrisk ska detekteras" # Testa ingen risk risks = engine.calculate_risk(1, "primary", temperature=22, precipitation=3) assert len(risks) == 0, "Ingen risk vid bra väder" print("✓ test_risk_engine passed") def test_full_pipeline(): """Testa hela pipelinen""" from pipeline import WeatherPipeline pipeline = WeatherPipeline() result = pipeline.run(road_id=1, road_type="primary") assert result is not None, "Pipeline ska returnera resultat" assert "weather" in result, "Väderdata ska finnas" assert "observations" in result, "Observationer ska finnas" assert "risks" in result, "Risker ska finnas" print("✓ test_full_pipeline passed") if __name__ == "__main__": test_weather_provider() test_observation_store() test_risk_engine() test_full_pipeline() print("\nAlla tester klara!")