11"""DIff helpers unit tests."""
2- from jdiff .utils .diff_helpers import dict_merger , group_value , fix_deepdiff_key_names , get_diff_iterables_items
2+
3+ import pytest
4+ from jdiff .utils .diff_helpers import (
5+ _parse_index_element_string ,
6+ dict_merger ,
7+ fix_deepdiff_key_names ,
8+ get_diff_iterables_items ,
9+ group_value ,
10+ parse_diff ,
11+ )
312
413
514def test_dict_merger ():
@@ -21,12 +30,16 @@ def test_group_value():
2130 """Tests that nested dict is recursively created."""
2231 tree_list = ["10.1.0.0" , "is_enabled" ]
2332 value = {"new_value" : False , "old_value" : True }
24- assert group_value (tree_list , value ) == {"10.1.0.0" : {"is_enabled" : {"new_value" : False , "old_value" : True }}}
33+ assert group_value (tree_list , value ) == {
34+ "10.1.0.0" : {"is_enabled" : {"new_value" : False , "old_value" : True }}
35+ }
2536
2637
2738def test_fix_deepdiff_key_names ():
2839 """Tests that deepdiff return is parsed properly."""
29- deepdiff_object = {"root[0]['10.1.0.0']['is_enabled']" : {"new_value" : False , "old_value" : True }}
40+ deepdiff_object = {
41+ "root[0]['10.1.0.0']['is_enabled']" : {"new_value" : False , "old_value" : True }
42+ }
3043 assert fix_deepdiff_key_names (deepdiff_object ) == {
3144 "10.1.0.0" : {"is_enabled" : {"new_value" : False , "old_value" : True }}
3245 }
@@ -35,12 +48,85 @@ def test_fix_deepdiff_key_names():
3548def test_get_diff_iterables_items ():
3649 """Tests that deepdiff return is parsed properly."""
3750 diff_result = {
38- "values_changed" : {"root['Ethernet1'][0]['port']" : {"new_value" : "518" , "old_value" : "519" }},
51+ "values_changed" : {
52+ "root['Ethernet1'][0]['port']" : {"new_value" : "518" , "old_value" : "519" }
53+ },
3954 "iterable_item_added" : {
40- "root['Ethernet3'][1]" : {"hostname" : "ios-xrv-unittest" , "port" : "Gi0/0/0/0" },
55+ "root['Ethernet3'][1]" : {
56+ "hostname" : "ios-xrv-unittest" ,
57+ "port" : "Gi0/0/0/0" ,
58+ },
4159 },
4260 }
4361 result = get_diff_iterables_items (diff_result )
4462
4563 assert list (dict (result ).keys ())[0 ] == "['Ethernet3']"
46- assert list (list (dict (result ).values ())[0 ].values ())[0 ] == [{"hostname" : "ios-xrv-unittest" , "port" : "Gi0/0/0/0" }]
64+ assert list (list (dict (result ).values ())[0 ].values ())[0 ] == [
65+ {"hostname" : "ios-xrv-unittest" , "port" : "Gi0/0/0/0" }
66+ ]
67+
68+
69+ # result = {'hostname': {'new_value': 'veos', 'old_value': 'veos-0'}, 'domain-name': 'missing'}
70+ # result = {'domain-name': 'missing'}
71+ # result = {'hostname': {'new_value': 'veos', 'old_value': 'veos-0'}, 'domain-name': 'missing', "index_element['openconfig-system:config']['ip name']": 'new'}
72+ # result = {'domain-name': 'missing','hostname': 'missing', "index_element['openconfig-system:config']['ip name']": 'new'}
73+ # result = {'servers': {'server': defaultdict(<class 'list'>, {'missing': [{'address': '1.us.pool.ntp.org', 'config': {'address': '1.us.pool.ntp.org'}, 'state': {'address': '1.us.pool.ntp.org'}}]})}}
74+
75+
76+ index_element_case_1 = (
77+ "index_element['foo']['ip name']" ,
78+ {"ip name" : "" },
79+ )
80+
81+ index_element_case_2 = (
82+ "index_element['foo']['ip name']['ip domain']" ,
83+ {"ip name" : "" , "ip domain" : "" },
84+ )
85+
86+
87+ index_element_tests = [index_element_case_1 , index_element_case_2 ]
88+
89+
90+ @pytest .mark .parametrize ("index_element, result" , index_element_tests )
91+ def test__parse_index_element_string (index_element , result ):
92+ """Test that index_element can be unpacked."""
93+ parsed_result = _parse_index_element_string (index_element )
94+ assert parsed_result == result
95+
96+
97+ parse_diff_case_1 = (
98+ {
99+ "hostname" : {"new_value" : "veos" , "old_value" : "veos-0" },
100+ "domain-name" : "missing" ,
101+ },
102+ {"openconfig-system:config" : {"domain-name" : "ntc.com" , "hostname" : "veos-0" }},
103+ {"openconfig-system:config" : {"hostname" : "veos" }},
104+ "openconfig-system:config" ,
105+ {"hostname" : "veos-0" },
106+ {"hostname" : "veos" , "domain-name" : "ntc.com" },
107+ )
108+
109+
110+ parse_diff_tests = [parse_diff_case_1 ]
111+
112+
113+ @pytest .mark .parametrize (
114+ "jdiff_evaluate_response, actual, intended, match_config, extra, missing" ,
115+ parse_diff_tests ,
116+ )
117+ def test_parse_diff (
118+ jdiff_evaluate_response , actual , intended , match_config , extra , missing
119+ ):
120+ """Test that index_element can be unpacked."""
121+ parsed_extra , parsed_missing = parse_diff (
122+ jdiff_evaluate_response ,
123+ actual ,
124+ intended ,
125+ match_config ,
126+ )
127+ assert (
128+ parsed_extra == extra
129+ ) # AssertionError: assert {'hostname': 'veos-0', 'domain-name': 'ntc.com'} == {'hostname': 'veos-0'}
130+ assert (
131+ parsed_missing == missing
132+ ) # AssertionError: assert {'hostname': 'veos'} == {'hostname': 'veos', 'domain-name': 'ntc.com'}
0 commit comments