Files
boc/life-weather/tests/test_pipeline.py
T
Bernt aee0f09db8 landvex: Fixar och tester klara för alla komponenter
- Datafabrik: Dockerfile fix, agentorkestrering fungerar
- Vision: Identify-modell, FAISS, OCR alla testade
- API: Alla 7 integrationstester passerade
- Upplösare: Entitetsupplösning verifierad
2026-07-05 06:41:32 +00:00

90 lines
2.7 KiB
Python

#!/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!")