feat(scada): serve project devices through pooled API
This commit is contained in:
@@ -8,6 +8,7 @@ from psycopg import connect
|
||||
|
||||
from app.core.config import get_pgconn_string
|
||||
from app.infra.db.dynamic_manager import ProjectConnectionManager
|
||||
from app.infra.db.postgresql.scada import ScadaInfoRepository
|
||||
from app.infra.db.timescaledb.sync_pool import timescale_connection
|
||||
from app.native.wndb.commands.api import delete_pattern_cascade
|
||||
from app.native.wndb.core.connection import project_connection, project_transaction
|
||||
@@ -105,6 +106,29 @@ def test_dynamic_pool_replaces_terminated_idle_connection() -> None:
|
||||
asyncio.run(exercise_pool())
|
||||
|
||||
|
||||
def test_scada_api_repository_reads_device_ids_through_dynamic_pool() -> None:
|
||||
async def read_scada_devices() -> list[dict]:
|
||||
manager = ProjectConnectionManager()
|
||||
try:
|
||||
async with manager.pg_connection(
|
||||
uuid4(), "biz_data", get_pgconn_string(db_name=PROJECT), 1, 4
|
||||
) as conn:
|
||||
return await ScadaInfoRepository.get_scadas(conn)
|
||||
finally:
|
||||
await manager.close_all()
|
||||
|
||||
devices = asyncio.run(read_scada_devices())
|
||||
|
||||
assert devices
|
||||
device_ids = [device["device_id"] for device in devices]
|
||||
assert len(device_ids) == len(set(device_ids))
|
||||
assert all(device_ids)
|
||||
assert all(
|
||||
device["longitude"] is not None and device["latitude"] is not None
|
||||
for device in devices
|
||||
)
|
||||
|
||||
|
||||
def test_nested_wndb_writes_roll_back_as_one_transaction() -> None:
|
||||
with pytest.raises(RuntimeError, match="force rollback"):
|
||||
with project_transaction(PROJECT) as conn:
|
||||
|
||||
Reference in New Issue
Block a user