Refine tests

This commit is contained in:
jeanluc 2022-12-06 12:46:20 +01:00
parent 3332fea2f3
commit 5302697380
No known key found for this signature in database
GPG key ID: 3EB52D4C754CD898

View file

@ -3,75 +3,98 @@ import pytest
import salt.utils.dictdiffer as dictdiffer
NONE = dictdiffer.RecursiveDictDiffer.NONE_VALUE
IGNORE_MISSING = True
@pytest.fixture
def differ(request):
old, new, ignore_missing = request.param
old, new, *ignore_missing = request.param
try:
ignore_missing = bool(ignore_missing.pop(0))
except IndexError:
ignore_missing = False
return dictdiffer.RecursiveDictDiffer(old, new, ignore_missing)
@pytest.mark.parametrize("separator", [None, ":"])
@pytest.mark.parametrize(
"differ,expected",
"differ,include_nested,expected",
[
(({"a": "a"}, {"a": "a", "b": "b"}, False), ["b"]),
(({"a": "a"}, {"a": "a", "b": None}, False), ["b"]),
(({"a": {}}, {"a": {"b": "b"}}, False), ["a.b"]),
(({"a": {}}, {"a": {"b": {}}}, False), ["a.b"]),
(({"a": {}}, {"a": {"b": None}}, False), ["a.b"]),
(({"a": "a"}, {"a": "a", "b": {}}, False), ["b"]),
(({"a": "a"}, {"a": "a", "b": {"c": "c"}}, False), ["b"]),
(({"a": "a"}, {"a": {"c": "c"}}, False), ["a.c"]),
(({"a": "a"}, {"a": "a", "b": "b"}), False, ["b"]),
(({"a": "a"}, {"a": "a", "b": "b"}), True, ["b"]),
(({"a": "a"}, {"a": "a", "b": None}), False, ["b"]),
(({"a": {}}, {"a": {"b": "b"}}), False, ["a.b"]),
(({"a": {}}, {"a": {"b": {}}}), False, ["a.b"]),
(({"a": {}}, {"a": {"b": None}}), False, ["a.b"]),
(({"a": "a"}, {"a": "a", "b": {}}), False, ["b"]),
(({"a": "a"}, {"a": "a", "b": {"c": "c"}}), False, ["b"]),
(({"a": "a"}, {"a": {"c": "c"}}), False, ["a.c"]),
(({"a": {}}, {"a": {"b": {"c": "c"}}}), False, ["a.b"]),
(({"a": {}}, {"a": {"b": {"c": "c"}}}), True, ["a.b", "a.b.c"]),
(
({"a": {}}, {"a": {"b": {"c": {"d": "d"}}}}),
True,
["a.b", "a.b.c", "a.b.c.d"],
),
],
indirect=["differ"],
)
def test_added(differ, expected):
assert differ.added() == expected
def test_added(differ, include_nested, expected, separator):
if separator:
expected = [x.replace(".", separator) for x in expected]
assert (
differ.added(separator=separator, include_nested=include_nested) == expected
)
else:
assert differ.added(include_nested=include_nested) == expected
@pytest.mark.parametrize("separator", [None, ":"])
@pytest.mark.parametrize(
"differ,expected",
[
(({"a": "a", "unchanged": True}, {"a": "b", "unchanged": True}, False), ["a"]),
(({"a": "a"}, {"a": None}, False), ["a"]),
(({"a": "a", "unchanged": True}, {"a": "b", "unchanged": True}), ["a"]),
(({"a": "a"}, {"a": None}), ["a"]),
(
(
{"a": {"b": "b", "unchanged": True}},
{"a": {"b": "c", "unchanged": True}},
False,
),
["a.b"],
),
(({"a": {"b": "b"}}, {"a": {"b": None}}, False), ["a.b"]),
(({"a": "a"}, {"a": "a", "b": "b"}, False), []),
(({"a": {}}, {"a": {"b": "b"}}, False), []),
(({"a": "a", "b": "b"}, {"a": "a"}, False), []),
(({"a": {"b": "b"}}, {"a": {}}, False), []),
(({"a": {"b": "b"}}, {"a": {"b": None}}), ["a.b"]),
(({"a": "a"}, {"a": "a", "b": "b"}), []),
(({"a": {}}, {"a": {"b": "b"}}), []),
(({"a": "a", "b": "b"}, {"a": "a"}), []),
(({"a": {"b": "b"}}, {"a": {}}), []),
],
indirect=["differ"],
)
def test_changed(differ, expected):
assert differ.changed() == expected
def test_changed(differ, expected, separator):
if separator:
expected = [x.replace(".", separator) for x in expected]
assert differ.changed(separator=separator) == expected
else:
assert differ.changed() == expected
@pytest.mark.parametrize(
"differ,expected",
[
(({"a": "a", "unchanged": True}, {"a": "b", "unchanged": True}, False), ["a"]),
(({"a": "a"}, {"a": None}, False), ["a"]),
(({"a": "a", "unchanged": True}, {"a": "b", "unchanged": True}), ["a"]),
(({"a": "a"}, {"a": None}), ["a"]),
(
(
{"a": {"b": "b", "unchanged": True}},
{"a": {"b": "c", "unchanged": True}},
False,
),
["a.b"],
),
(({"a": {"b": "b"}}, {"a": {"b": None}}, False), ["a.b"]),
(({"a": "a"}, {"a": "a", "b": "b"}, False), ["b"]),
(({"a": {}}, {"a": {"b": "b"}}, False), ["a.b"]),
(({"a": "a", "b": "b"}, {"a": "a"}, False), ["b"]),
(({"a": {"b": "b"}}, {"a": {}}, False), ["a.b"]),
(({"a": {"b": "b"}}, {"a": {"b": None}}), ["a.b"]),
(({"a": "a"}, {"a": "a", "b": "b"}), ["b"]),
(({"a": {}}, {"a": {"b": "b"}}), ["a.b"]),
(({"a": "a", "b": "b"}, {"a": "a"}), ["b"]),
(({"a": {"b": "b"}}, {"a": {}}), ["a.b"]),
],
indirect=["differ"],
)
@ -80,98 +103,122 @@ def test_changed_without_ignore_unset_values(differ, expected):
assert differ.changed() == expected
@pytest.mark.parametrize("separator", [None, ":"])
@pytest.mark.parametrize(
"differ,expected",
"differ,include_nested,expected",
[
(({"a": "a", "b": "b"}, {"a": "a"}, False), ["b"]),
(({"a": "a", "b": None}, {"a": "a"}, False), ["b"]),
(({"a": {"b": "b"}}, {"a": {}}, False), ["a.b"]),
(({"a": {"b": {}}}, {"a": {}}, False), ["a.b"]),
(({"a": {"b": None}}, {"a": {}}, False), ["a.b"]),
(({"a": "a", "b": {}}, {"a": "a"}, False), ["b"]),
(({"a": "a", "b": {"c": "c"}}, {"a": "a"}, False), ["b"]),
(({"a": "z", "b": {"c": "c"}}, {"a": "a"}, False), ["b"]),
(({"a": {}, "b": {"c": "c"}}, {"a": {"z": {"y": "y"}}}, False), ["b"]),
(({"a": {"b": "b"}}, {"a": None}, False), ["a.b"]),
(({"a": "a", "b": "b"}, {"a": "a"}), False, ["b"]),
(({"a": "a", "b": "b"}, {"a": "a"}), True, ["b"]),
(({"a": "a", "b": None}, {"a": "a"}), False, ["b"]),
(({"a": {"b": "b"}}, {"a": {}}), False, ["a.b"]),
(({"a": {"b": {}}}, {"a": {}}), False, ["a.b"]),
(({"a": {"b": None}}, {"a": {}}), False, ["a.b"]),
(({"a": "a", "b": {}}, {"a": "a"}), False, ["b"]),
(({"a": "a", "b": {"c": "c"}}, {"a": "a"}), False, ["b"]),
(({"a": "z", "b": {"c": "c"}}, {"a": "a"}), False, ["b"]),
(({"a": {}, "b": {"c": "c"}}, {"a": {"z": {"y": "y"}}}), False, ["b"]),
(({"a": {"b": "b"}}, {"a": None}), False, ["a.b"]),
(
({"a": {"b": {"c": {"d": "d"}}}}, {"a": {}}),
True,
["a.b", "a.b.c", "a.b.c.d"],
),
],
indirect=["differ"],
)
def test_removed(differ, expected):
assert differ.removed() == expected
def test_removed(differ, include_nested, expected, separator):
if separator:
expected = [x.replace(".", separator) for x in expected]
assert (
differ.removed(separator=separator, include_nested=include_nested)
== expected
)
else:
assert differ.removed(include_nested=include_nested) == expected
@pytest.mark.parametrize("separator", [None, ":"])
@pytest.mark.parametrize(
"differ,expected",
[
(
({"a": "a", "unchanged": True}, {"a": "b", "unchanged": True}, False),
({"a": "a", "unchanged": True}, {"a": "b", "unchanged": True}),
["unchanged"],
),
(({"a": "a"}, {"a": None}, False), []),
(({"a": "a"}, {"a": None}), []),
(
(
{"a": {"b": "b", "unchanged": True}},
{"a": {"b": "c", "unchanged": True}},
False,
),
["a.unchanged"],
),
(({"a": {"b": "b"}}, {"a": {"b": None}}, False), []),
(({"a": {}}, {"a": {"b": "b"}}, False), []),
(({"a": "a", "b": "b"}, {"a": "a"}, False), ["a"]),
(({"a": {"b": "b"}}, {"a": {}}, False), []),
(({"a": {"b": "b"}}, {"a": {"b": None}}), []),
(({"a": {}}, {"a": {"b": "b"}}), []),
(({"a": "a", "b": "b"}, {"a": "a"}), ["a"]),
(({"a": {"b": "b"}}, {"a": {}}), []),
],
indirect=["differ"],
)
def test_unchanged(differ, expected):
assert differ.unchanged() == expected
def test_unchanged(differ, expected, separator):
if separator:
expected = [x.replace(".", separator) for x in expected]
assert differ.unchanged(separator=separator) == expected
else:
assert differ.unchanged() == expected
@pytest.mark.parametrize(
"differ,expected",
[
(({"a": "a"}, {"a": "a", "b": "b"}, False), {"b": {"old": NONE, "new": "b"}}),
(({"a": "a"}, {"a": "a", "b": "b"}, True), {"b": {"old": NONE, "new": "b"}}),
(({"a": "a"}, {"a": "a", "b": "b"}), {"b": {"old": NONE, "new": "b"}}),
(
({"a": "a"}, {"a": "a", "b": {"c": "c"}}, False),
({"a": "a"}, {"a": "a", "b": "b"}, IGNORE_MISSING),
{"b": {"old": NONE, "new": "b"}},
),
(
({"a": "a"}, {"a": "a", "b": {"c": "c"}}),
{"b": {"old": NONE, "new": {"c": "c"}}},
),
(
({"a": "a"}, {"a": "a", "b": {"c": "c"}}, True),
({"a": "a"}, {"a": "a", "b": {"c": "c"}}, IGNORE_MISSING),
{"b": {"old": NONE, "new": {"c": "c"}}},
),
(
({"a": {}}, {"a": {"b": "b"}}, False),
({"a": {}}, {"a": {"b": "b"}}),
{"a": {"b": {"old": NONE, "new": "b"}}},
),
(
({"a": "a", "unchanged": True}, {"a": "b", "unchanged": True}, False),
({"a": "a", "unchanged": True}, {"a": "b", "unchanged": True}),
{"a": {"old": "a", "new": "b"}},
),
(
({"a": "a", "unchanged": True}, {"a": "b", "unchanged": True}, True),
(
{"a": "a", "unchanged": True},
{"a": "b", "unchanged": True},
IGNORE_MISSING,
),
{"a": {"old": "a", "new": "b"}},
),
(
(
{"a": {"b": "b", "unchanged": True}},
{"a": {"b": "c", "unchanged": True}},
False,
),
{"a": {"b": {"old": "b", "new": "c"}}},
),
(({"a": "a", "b": "b"}, {"a": "a"}, False), {"b": {"old": "b", "new": NONE}}),
(({"a": "a", "b": "b"}, {"a": "a"}, True), {}),
(({"a": "a", "b": "b"}, {"a": "a"}), {"b": {"old": "b", "new": NONE}}),
(({"a": "a", "b": "b"}, {"a": "a"}, IGNORE_MISSING), {}),
(
({"a": {"b": "b"}}, {"a": {}}, False),
({"a": {"b": "b"}}, {"a": {}}),
{"a": {"b": {"old": "b", "new": NONE}}},
),
(({"a": {"b": "b"}}, {"a": {}}, True), {}),
(({"a": {"b": "b"}}, {"a": {}}, IGNORE_MISSING), {}),
(
({"a": "a", "b": {"c": "c"}}, {"a": "a"}, False),
({"a": "a", "b": {"c": "c"}}, {"a": "a"}),
{"b": {"old": {"c": "c"}, "new": NONE}},
),
(({"a": "a", "b": {"c": "c"}}, {"a": "a"}, True), {}),
(({"a": "a", "b": {"c": "c"}}, {"a": "a"}, IGNORE_MISSING), {}),
],
indirect=["differ"],
)
@ -182,24 +229,23 @@ def test_diffs(differ, expected):
@pytest.mark.parametrize(
"differ,expected",
[
(({"a": "a"}, {"a": "a", "b": "b"}, False), {"b": "b"}),
(({"a": "a"}, {"a": "a", "b": {"c": "c"}}, False), {"b": {"c": "c"}}),
(({"a": {}}, {"a": {"b": "b"}}, False), {"a": {"b": "b"}}),
(({"a": "a"}, {"a": "a", "b": "b"}), {"b": "b"}),
(({"a": "a"}, {"a": "a", "b": {"c": "c"}}), {"b": {"c": "c"}}),
(({"a": {}}, {"a": {"b": "b"}}), {"a": {"b": "b"}}),
(
({"a": "a", "unchanged": True}, {"a": "b", "unchanged": True}, False),
({"a": "a", "unchanged": True}, {"a": "b", "unchanged": True}),
{"a": "b"},
),
(
(
{"a": {"b": "b", "unchanged": True}},
{"a": {"b": "c", "unchanged": True}},
False,
),
{"a": {"b": "c"}},
),
(({"a": "a", "b": "b"}, {"a": "a"}, False), {"b": NONE}),
(({"a": {"b": "b"}}, {"a": {}}, False), {"a": {"b": NONE}}),
(({"a": "a", "b": {"c": "c"}}, {"a": "a"}, False), {"b": NONE}),
(({"a": "a", "b": "b"}, {"a": "a"}), {"b": NONE}),
(({"a": {"b": "b"}}, {"a": {}}), {"a": {"b": NONE}}),
(({"a": "a", "b": {"c": "c"}}, {"a": "a"}), {"b": NONE}),
],
indirect=["differ"],
)
@ -210,24 +256,23 @@ def test_new_values(differ, expected):
@pytest.mark.parametrize(
"differ,expected",
[
(({"a": "a"}, {"a": "a", "b": "b"}, False), {"b": NONE}),
(({"a": "a"}, {"a": "a", "b": {"c": "c"}}, False), {"b": NONE}),
(({"a": {}}, {"a": {"b": "b"}}, False), {"a": {"b": NONE}}),
(({"a": "a"}, {"a": "a", "b": "b"}), {"b": NONE}),
(({"a": "a"}, {"a": "a", "b": {"c": "c"}}), {"b": NONE}),
(({"a": {}}, {"a": {"b": "b"}}), {"a": {"b": NONE}}),
(
({"a": "a", "unchanged": True}, {"a": "b", "unchanged": True}, False),
({"a": "a", "unchanged": True}, {"a": "b", "unchanged": True}),
{"a": "a"},
),
(
(
{"a": {"b": "b", "unchanged": True}},
{"a": {"b": "c", "unchanged": True}},
False,
),
{"a": {"b": "b"}},
),
(({"a": "a", "b": "b"}, {"a": "a"}, False), {"b": "b"}),
(({"a": {"b": "b"}}, {"a": {}}, False), {"a": {"b": "b"}}),
(({"a": "a", "b": {"c": "c"}}, {"a": "a"}, False), {"b": {"c": "c"}}),
(({"a": "a", "b": "b"}, {"a": "a"}), {"b": "b"}),
(({"a": {"b": "b"}}, {"a": {}}), {"a": {"b": "b"}}),
(({"a": "a", "b": {"c": "c"}}, {"a": "a"}), {"b": {"c": "c"}}),
],
indirect=["differ"],
)
@ -238,34 +283,35 @@ def test_old_values(differ, expected):
@pytest.mark.parametrize(
"differ,expected",
[
(({"a": "a"}, {"a": "a", "b": "b"}, False), "b from nothing to 'b'"),
(({"a": "a"}, {"a": "a", "b": "b"}), "b from nothing to 'b'"),
(
({"a": "a"}, {"a": "a", "b": {"c": "c"}}, False),
({"a": "a"}, {"a": "a", "b": {"c": "c"}}),
"b from nothing to {'c': 'c'}",
),
(({"a": {}}, {"a": {"b": "b"}}, False), "a:\n b from nothing to 'b'"),
(({"a": {}}, {"a": {"b": "b"}}), "a:\n b from nothing to 'b'"),
(
({"a": "a", "unchanged": True}, {"a": "b", "unchanged": True}, False),
({"a": "a", "unchanged": True}, {"a": "b", "unchanged": True}),
"a from 'a' to 'b'",
),
(
(
{"a": {"b": "b", "unchanged": True}},
{"a": {"b": "c", "unchanged": True}},
False,
),
"a:\n b from 'b' to 'c'",
),
(({"a": "a", "b": "b"}, {"a": "a"}, False), "b from 'b' to nothing"),
(({"a": {"b": "b"}}, {"a": {}}, False), "a:\n b from 'b' to nothing"),
(({"a": "a", "b": "b"}, {"a": "a"}), "b from 'b' to nothing"),
(({"a": {"b": "b"}}, {"a": {}}), "a:\n b from 'b' to nothing"),
(
({"a": "a", "b": {"c": "c"}}, {"a": "a"}, False),
({"a": "a", "b": {"c": "c"}}, {"a": "a"}),
"b from {'c': 'c'} to nothing",
),
(
({"a": {"b": "b"}, "c": "c"}, {"a": {}, "c": "d"}, False),
({"a": {"b": "b"}, "c": "c"}, {"a": {}, "c": "d"}),
"a:\n b from 'b' to nothing\nc from 'c' to 'd'",
),
(({"a": []}, {"a": ["b", "c"]}), "a from '' to 'b, c'"),
(({"a": ["b", "c"]}, {"a": []}), "a from 'b, c' to ''"),
],
indirect=["differ"],
)