import os import tempfile import pytest import yaml from pyinfra.config import Config, parse_disjunction_string @pytest.fixture def config_file_content(): return {"A": [{"B": [1, 2]}, {"C": 3}, 4], "D": {"E": {"F": True}}} @pytest.fixture def config(config_file_content): with tempfile.NamedTemporaryFile(suffix=".yaml", mode="w") as f: yaml.dump(config_file_content, f, default_flow_style=False) yield Config(f.name) def test_dot_access_key_exists(config): assert config.A == [{"B": [1, 2]}, {"C": 3}, 4] assert config.D.E["F"] def test_access_key_exists(config): assert config["A"] == [{"B": [1, 2]}, {"C": 3}, 4] assert config["A"][0] == {"B": [1, 2]} assert config["A"][0]["B"] == [1, 2] assert config["A"][0]["B"][0] == 1 def test_dot_access_key_does_not_exists(config): assert config.B is None def test_access_key_does_not_exists(config): assert config["B"] is None def test_parse_disjunction_string(): assert parse_disjunction_string("A|Bb|c") == "c" os.environ["Bb"] = "d" assert parse_disjunction_string("A|Bb|c") == "d"