From d70c5e48ecfde164f5e508488125c6aa9cd8e621 Mon Sep 17 00:00:00 2001 From: Matthias Bisping Date: Tue, 19 Apr 2022 16:39:53 +0200 Subject: [PATCH] config coverage --- pyinfra/config.py | 4 +-- pyinfra/test/unit_tests/config_test.py | 38 ++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 pyinfra/test/unit_tests/config_test.py diff --git a/pyinfra/config.py b/pyinfra/config.py index 1e94f08..06c9cae 100644 --- a/pyinfra/config.py +++ b/pyinfra/config.py @@ -1,5 +1,6 @@ """Implements a config object with dot-indexing syntax.""" + from envyaml import EnvYAML from pyinfra.locations import CONFIG_FILE @@ -17,9 +18,6 @@ class DotIndexable: def __getattr__(self, item): return _get_item_and_maybe_make_dotindexable(self.x, item) - def __setitem__(self, key, value): - self.x[key] = value - def __repr__(self): return self.x.__repr__() diff --git a/pyinfra/test/unit_tests/config_test.py b/pyinfra/test/unit_tests/config_test.py new file mode 100644 index 0000000..ed0620b --- /dev/null +++ b/pyinfra/test/unit_tests/config_test.py @@ -0,0 +1,38 @@ +import tempfile + +import pytest +import yaml + +from pyinfra.config import Config + + +@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