Files
TJWaterServerBinary/tests/unit/test_postgres_scada_repository.py
T
jiang 682c26fddd
Generic Container CI/CD / test-build-publish (push) Successful in 2m10s
Server CI/CD v2 / build-test-publish-and-deploy (push) Successful in 2m10s
feat(timeseries): unify element history queries
2026-09-14 12:30:41 +08:00

113 lines
3.0 KiB
Python

import asyncio
from types import MappingProxyType
import pytest
from app.infra.db.postgresql import scada
from app.infra.db.postgresql.scada import ScadaInfoRepository
class _FakeCursor:
def __init__(self):
self.query = None
async def __aenter__(self):
return self
async def __aexit__(self, exc_type, exc, tb):
return False
async def execute(self, query, params=None):
self.query = query
self.params = params
async def fetchall(self):
return [
{
"device_id": " 25470001 ",
"device_type": " PRESSURE ",
"node_id": " J1 ",
"link_id": None,
"api_query_id": "query-1",
"measurement_unit": "m",
"transmission_mode": "realtime",
"transmission_frequency": None,
"reliability": "95",
"x": "117.1",
"y": "32.9",
"longitude": "121.5",
"latitude": "30.9",
}
]
async def fetchone(self):
return (await self.fetchall())[0]
class _FakeConnection:
def __init__(self):
self.cursor_instance = _FakeCursor()
def cursor(self):
return self.cursor_instance
def test_get_scadas_normalizes_id_and_type():
conn = _FakeConnection()
result = asyncio.run(ScadaInfoRepository.get_scadas(conn))
assert result == [
{
"device_id": "25470001",
"device_type": "pressure",
"node_id": "J1",
"link_id": None,
"api_query_id": "query-1",
"measurement_unit": "m",
"transmission_mode": "realtime",
"transmission_frequency": None,
"reliability": 95,
"x": 117.1,
"y": 32.9,
"longitude": 121.5,
"latitude": 30.9,
}
]
assert "node_id" in conn.cursor_instance.query
assert "link_id" in conn.cursor_instance.query
assert "FROM gis.scada_devices" in conn.cursor_instance.query
assert "ST_Transform(geom, 4326)" in conn.cursor_instance.query
def test_get_scada_filters_the_project_view_by_device_id():
conn = _FakeConnection()
result = asyncio.run(ScadaInfoRepository.get_scada(conn, "25470001"))
assert result is not None
assert result["device_id"] == "25470001"
assert "WHERE id = %s" in conn.cursor_instance.query
assert conn.cursor_instance.params == ("25470001",)
def test_realtime_element_mappings_are_project_local_and_immutable(monkeypatch):
monkeypatch.setattr(
scada,
"read_all",
lambda *_args: [
{
"device_type": " PRESSURE ",
"element_id": " J1 ",
"api_query_id": " sensor-1 ",
}
],
)
mappings = scada.load_realtime_element_mappings("project-a")
assert mappings.pressure == {"J1": "sensor-1"}
assert isinstance(mappings.pressure, MappingProxyType)
with pytest.raises(TypeError):
mappings.pressure["J2"] = "sensor-2"