refactor(db)!: finalize pooled WNDB v2 migration
This commit is contained in:
@@ -0,0 +1,163 @@
|
||||
from app.native.wndb.gis import network_views, region_geometry
|
||||
from app.native.wndb.model import elements
|
||||
|
||||
|
||||
def test_network_node_coords_use_one_unified_view_query(monkeypatch) -> None:
|
||||
calls = []
|
||||
|
||||
def fake_read_all(name, statement, params=None):
|
||||
calls.append((name, statement, params))
|
||||
return [
|
||||
{"id": "J-1", "x": 10.5, "y": 20.5, "node_type": "junction"},
|
||||
{"id": "R-1", "x": 30.0, "y": 40.0, "node_type": "reservoir"},
|
||||
]
|
||||
|
||||
monkeypatch.setattr(network_views, "read_all", fake_read_all)
|
||||
|
||||
assert network_views.get_network_node_coords("project_a") == {
|
||||
"J-1": {"x": 10.5, "y": 20.5, "type": "junction"},
|
||||
"R-1": {"x": 30.0, "y": 40.0, "type": "reservoir"},
|
||||
}
|
||||
assert len(calls) == 1
|
||||
assert "FROM gis.network_nodes" in calls[0][1]
|
||||
|
||||
|
||||
def test_network_link_nodes_use_one_unified_view_query(monkeypatch) -> None:
|
||||
calls = []
|
||||
|
||||
def fake_read_all(name, statement, params=None):
|
||||
calls.append((name, statement, params))
|
||||
return [
|
||||
{
|
||||
"id": "P-1",
|
||||
"link_type": "pipe",
|
||||
"start_node_id": "J-1",
|
||||
"end_node_id": "J-2",
|
||||
},
|
||||
{
|
||||
"id": "PU-1",
|
||||
"link_type": "pump",
|
||||
"start_node_id": "R-1",
|
||||
"end_node_id": "J-1",
|
||||
},
|
||||
]
|
||||
|
||||
monkeypatch.setattr(network_views, "read_all", fake_read_all)
|
||||
|
||||
assert network_views.get_network_link_nodes("project_a") == [
|
||||
"P-1:pipe:J-1:J-2",
|
||||
"PU-1:pump:R-1:J-1",
|
||||
]
|
||||
assert len(calls) == 1
|
||||
assert "FROM gis.network_links" in calls[0][1]
|
||||
|
||||
|
||||
def test_topology_rows_are_loaded_in_two_batch_queries(monkeypatch) -> None:
|
||||
calls = []
|
||||
responses = [
|
||||
[{"id": "J-1", "x": 1.0, "y": 2.0, "node_type": "junction"}],
|
||||
[
|
||||
{
|
||||
"id": "P-1",
|
||||
"start_node_id": "J-1",
|
||||
"end_node_id": "J-2",
|
||||
"length": 12.5,
|
||||
}
|
||||
],
|
||||
]
|
||||
|
||||
def fake_read_all(name, statement, params=None):
|
||||
calls.append((name, statement, params))
|
||||
return responses[len(calls) - 1]
|
||||
|
||||
monkeypatch.setattr(network_views, "read_all", fake_read_all)
|
||||
|
||||
nodes, links = network_views.get_topology_rows("project_a", ["J-1", "J-2"])
|
||||
|
||||
assert nodes == responses[0]
|
||||
assert links == responses[1]
|
||||
assert len(calls) == 2
|
||||
assert "FROM network.nodes" in calls[0][1]
|
||||
assert "FROM network.links" in calls[1][1]
|
||||
assert "LEFT JOIN network.pipes" in calls[1][1]
|
||||
|
||||
|
||||
def test_topology_builds_adjacency_from_batch_rows(monkeypatch) -> None:
|
||||
monkeypatch.setattr(
|
||||
region_geometry,
|
||||
"get_topology_rows",
|
||||
lambda _name, _node_ids: (
|
||||
[
|
||||
{"id": "J-1", "x": 1.0, "y": 2.0, "node_type": "junction"},
|
||||
{"id": "R-1", "x": 3.0, "y": 4.0, "node_type": "reservoir"},
|
||||
],
|
||||
[
|
||||
{
|
||||
"id": "P-1",
|
||||
"start_node_id": "J-1",
|
||||
"end_node_id": "R-1",
|
||||
"length": 20.0,
|
||||
}
|
||||
],
|
||||
),
|
||||
)
|
||||
|
||||
topology = region_geometry.Topology("project_a", ["J-1", "R-1"])
|
||||
|
||||
assert topology.max_x_node() == "R-1"
|
||||
assert topology.nodes()["J-1"] == {
|
||||
"x": 1.0,
|
||||
"y": 2.0,
|
||||
"type": "junction",
|
||||
"links": ["P-1"],
|
||||
}
|
||||
assert topology.links()["P-1"] == {
|
||||
"node1": "J-1",
|
||||
"node2": "R-1",
|
||||
"length": 20.0,
|
||||
}
|
||||
|
||||
|
||||
def test_junction_demands_are_mapped_from_authoritative_table(monkeypatch) -> None:
|
||||
monkeypatch.setattr(
|
||||
network_views,
|
||||
"read_all",
|
||||
lambda _name, _statement, _params: [
|
||||
{
|
||||
"junction_id": "J-1",
|
||||
"sequence_no": 0,
|
||||
"base_demand": 3.5,
|
||||
"pattern_id": "PAT-1",
|
||||
"category": None,
|
||||
}
|
||||
],
|
||||
)
|
||||
|
||||
assert network_views.get_junction_demands("project_a", ["J-1"]) == {
|
||||
"J-1": [
|
||||
{"demand": 3.5, "pattern": "PAT-1", "category": None}
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
def test_all_node_links_scan_the_unified_view_once(monkeypatch) -> None:
|
||||
calls = []
|
||||
|
||||
def fake_read_all_typed(name, statement, params):
|
||||
calls.append((name, statement, params))
|
||||
return [
|
||||
{
|
||||
"id": "P-1",
|
||||
"start_node_id": "J-1",
|
||||
"end_node_id": "J-2",
|
||||
}
|
||||
]
|
||||
|
||||
monkeypatch.setattr(elements, "read_all_typed", fake_read_all_typed)
|
||||
|
||||
assert elements.get_all_node_links("project_a") == {
|
||||
"J-1": ["P-1"],
|
||||
"J-2": ["P-1"],
|
||||
}
|
||||
assert len(calls) == 1
|
||||
assert "FROM gis.network_links" in calls[0][1]
|
||||
Reference in New Issue
Block a user