72 lines
2.1 KiB
Python
72 lines
2.1 KiB
Python
from collections import defaultdict
|
|
|
|
from app.algorithms.isolation import valve
|
|
|
|
|
|
def test_non_isolatable_omits_affected_node_ids_but_keeps_count(monkeypatch):
|
|
pipe_adj = defaultdict(
|
|
set,
|
|
{
|
|
"A": {"B"},
|
|
"B": {"A", "C"},
|
|
"C": {"B"},
|
|
},
|
|
)
|
|
topology = (
|
|
pipe_adj,
|
|
{"V-optional": ("A", "C")},
|
|
{"P-1": ("A", "B", "pipe")},
|
|
{"A", "B", "C"},
|
|
)
|
|
monkeypatch.setattr(valve, "_get_network_topology", lambda _network: topology)
|
|
|
|
result = valve.valve_isolation_analysis("demo", "P-1")
|
|
|
|
assert result["isolatable"] is False
|
|
assert result["affected_node_count"] == 3
|
|
assert result["affected_nodes"] == []
|
|
assert result["optional_valves"] == ["V-optional"]
|
|
|
|
|
|
def test_isolatable_keeps_affected_node_ids_and_count(monkeypatch):
|
|
pipe_adj = defaultdict(set, {"A": {"B"}, "B": {"A"}})
|
|
topology = (
|
|
pipe_adj,
|
|
{"V-close": ("B", "C")},
|
|
{"P-1": ("A", "B", "pipe")},
|
|
{"A", "B", "C"},
|
|
)
|
|
monkeypatch.setattr(valve, "_get_network_topology", lambda _network: topology)
|
|
|
|
result = valve.valve_isolation_analysis("demo", "P-1")
|
|
|
|
assert result["isolatable"] is True
|
|
assert result["affected_node_count"] == 2
|
|
assert result["affected_nodes"] == ["A", "B"]
|
|
assert result["must_close_valves"] == ["V-close"]
|
|
|
|
|
|
def test_disabled_valve_expands_affected_area_before_counting(monkeypatch):
|
|
pipe_adj = defaultdict(set, {"A": {"B"}, "B": {"A"}})
|
|
topology = (
|
|
pipe_adj,
|
|
{
|
|
"V-disabled": ("B", "C"),
|
|
"V-close": ("C", "D"),
|
|
},
|
|
{"P-1": ("A", "B", "pipe")},
|
|
{"A", "B", "C", "D"},
|
|
)
|
|
monkeypatch.setattr(valve, "_get_network_topology", lambda _network: topology)
|
|
|
|
result = valve.valve_isolation_analysis(
|
|
"demo",
|
|
"P-1",
|
|
disabled_valves=["V-disabled"],
|
|
)
|
|
|
|
assert result["isolatable"] is True
|
|
assert result["affected_node_count"] == 3
|
|
assert result["affected_nodes"] == ["A", "B", "C"]
|
|
assert result["must_close_valves"] == ["V-close"]
|