diff --git a/test.py b/test.py index ae10918..d231b65 100644 --- a/test.py +++ b/test.py @@ -1,5 +1,8 @@ import copy import unittest + +import yaml + from yamldifftool import filter_defaults class TestYamlDiffTool(unittest.TestCase): @@ -57,5 +60,29 @@ def test_filter_defaults_with_strict_mode(self): filter_defaults(self.base_yaml, user_yaml, root_diff, strict=True) self.assertEqual(root_diff, {}) + def test_none_handling_in_base(self): + base_yaml = yaml.safe_load(""" + global: + identity: + auth: + operate: + existingSecret: + image: + tag: 8.2.2 + """) + user_yaml = yaml.safe_load(""" + global: + identity: + auth: + operate: + existingSecret: + name: nameofsecret + image: + tag: 8.3.2 + """) + root_diff = {} + filter_defaults(base_yaml, user_yaml, root_diff) + self.assertEqual(root_diff, {"global": {"image": {"tag": "8.3.2"}}}) + if __name__ == '__main__': unittest.main() diff --git a/yamldifftool.py b/yamldifftool.py index fd248e1..92ff463 100644 --- a/yamldifftool.py +++ b/yamldifftool.py @@ -16,6 +16,10 @@ def traverse_and_set(user_provided, root_diff, path): def filter_defaults(base, user_provided, root_diff, path=[], strict=False): if type(user_provided) is dict: for key in user_provided.keys(): + if base is None: + continue + if type(base) is str: + continue if not strict and key not in base.keys(): traverse_and_set(user_provided.get(key), root_diff, path + [key]) elif key in base.keys():