Files

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")