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
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
#!/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!")
|
||||
Reference in New Issue
Block a user