fix(scada): verify first sample after field completion
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import asyncio
|
||||
from datetime import datetime, timezone
|
||||
from datetime import datetime, timedelta, timezone
|
||||
import importlib.util
|
||||
from pathlib import Path
|
||||
|
||||
@@ -172,3 +172,27 @@ def test_get_latest_scada_readings_skips_database_for_empty_page():
|
||||
|
||||
assert asyncio.run(ScadaRepository.get_latest_scada_readings(conn, [])) == {}
|
||||
assert conn.cursor_instance.calls == []
|
||||
|
||||
|
||||
def test_recovery_read_selects_first_raw_frame_strictly_after_feedback_and_bounded_reference():
|
||||
ScadaRepository = _load_scada_repository()
|
||||
incident = datetime(2026, 7, 16, 0, 0, tzinfo=timezone.utc)
|
||||
feedback = incident + timedelta(hours=5, minutes=7)
|
||||
through = feedback + timedelta(hours=2)
|
||||
rows = [{"time": incident - timedelta(days=1), "device_id": "P1", "monitored_value": 100., "cleaned_value": None},
|
||||
{"time": incident + timedelta(hours=5, minutes=15), "device_id": "P1", "monitored_value": 100., "cleaned_value": None}]
|
||||
conn = _ReadingConnection(rows)
|
||||
result = asyncio.run(ScadaRepository.get_recovery_scada_readings(conn, ["P1"], incident, feedback, through))
|
||||
assert result == rows
|
||||
query, parameters = conn.cursor_instance.calls[0]
|
||||
assert "min(time)" in query and "time>%s AND time<=%s" in query
|
||||
assert "time>=%s AND time<%s" in query and "JOIN next_frame" in query
|
||||
assert parameters == (["P1"], feedback, through, ["P1"], incident - timedelta(days=15), incident, 100_001, ["P1"])
|
||||
|
||||
|
||||
def test_recovery_read_does_not_query_when_feedback_is_not_in_the_past():
|
||||
ScadaRepository = _load_scada_repository()
|
||||
at = datetime(2026, 7, 16, tzinfo=timezone.utc)
|
||||
conn = _ReadingConnection([])
|
||||
assert asyncio.run(ScadaRepository.get_recovery_scada_readings(conn, ["P1"], at, at, at)) == []
|
||||
assert conn.cursor_instance.calls == []
|
||||
|
||||
Reference in New Issue
Block a user