75 lines
2.4 KiB
Python
75 lines
2.4 KiB
Python
"""Which flow an argument names: the one matrix every client relies on."""
|
|
|
|
import pytest
|
|
|
|
from fluksio.sdk.resolve import Resolved, Unresolved, resolve
|
|
|
|
#: `heating` is the grandfathered id of the flow now keyed `warmth`; a later
|
|
#: flow took the key `heating` under an issued id.
|
|
FLOWS = [
|
|
("heating", "warmth"),
|
|
("f_k3q7m2xa", "heating"),
|
|
("train", "train"),
|
|
("f_aaaaaaaa", "lights"),
|
|
]
|
|
|
|
|
|
def test_an_id_alone_picks_its_flow():
|
|
assert resolve("f_aaaaaaaa", FLOWS) == Resolved("f_aaaaaaaa", "lights")
|
|
|
|
|
|
def test_a_key_alone_picks_its_flow():
|
|
assert resolve("lights", FLOWS) == Resolved("f_aaaaaaaa", "lights")
|
|
|
|
|
|
def test_an_id_that_is_its_own_key_is_no_ambiguity():
|
|
assert resolve("train", FLOWS, mutation=True) == Resolved("train", "train")
|
|
|
|
|
|
def test_one_flows_id_and_anothers_key_reads_the_id_with_a_warning():
|
|
found = resolve("heating", FLOWS)
|
|
|
|
assert (found.id, found.key) == ("heating", "warmth")
|
|
assert found.warning == (
|
|
"'heating' is the id of 'warmth' and the key of 'f_k3q7m2xa'. "
|
|
"Using the id. Pass key:heating for the other."
|
|
)
|
|
|
|
|
|
def test_a_change_refuses_a_name_two_flows_answer_to():
|
|
with pytest.raises(Unresolved, match="Pass id:heating or key:heating"):
|
|
resolve("heating", FLOWS, mutation=True)
|
|
|
|
|
|
def test_the_explicit_forms_say_which():
|
|
assert resolve("id:heating", FLOWS, mutation=True) == Resolved("heating", "warmth")
|
|
assert resolve("key:heating", FLOWS, mutation=True) == Resolved(
|
|
"f_k3q7m2xa", "heating"
|
|
)
|
|
|
|
|
|
def test_neither_names_the_closest_keys():
|
|
with pytest.raises(Unresolved) as caught:
|
|
resolve("lihgts", FLOWS)
|
|
|
|
assert str(caught.value) == (
|
|
"No flow with the id or key 'lihgts'. Closest keys: lights."
|
|
)
|
|
with pytest.raises(Unresolved, match="No flow with the key 'f_aaaaaaaa'"):
|
|
resolve("key:f_aaaaaaaa", FLOWS)
|
|
|
|
|
|
def test_an_explicit_id_outlives_its_flow():
|
|
"""History stays filed under a deleted flow's id, which nobody lists."""
|
|
assert resolve("id:f_gone0000", FLOWS) == Resolved("f_gone0000", "")
|
|
|
|
|
|
def test_a_key_history_holds_twice_is_refused_not_guessed():
|
|
"""A deleted flow and the later one that took its key."""
|
|
history = [("f_old00000", "train"), ("f_new00000", "train")]
|
|
|
|
for value in ("train", "key:train"):
|
|
with pytest.raises(Unresolved, match="f_old00000, f_new00000"):
|
|
resolve(value, history)
|
|
assert resolve("id:f_old00000", history) == Resolved("f_old00000", "train")
|