aee0f09db8
- Datafabrik: Dockerfile fix, agentorkestrering fungerar - Vision: Identify-modell, FAISS, OCR alla testade - API: Alla 7 integrationstester passerade - Upplösare: Entitetsupplösning verifierad
90 lines
2.7 KiB
Python
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!")
|