def test_merge_overlapped_objects_second_object_takes_priority(): # Arrange nested_dict1 = { "level1prop1": 1, "level2": { "level2prop1": 2, "level3": { "level3prop1": 3, } } } nested_dict2 = { "level1prop1": 4, "level2": { "level2prop1": 5, "level3": { "level3prop2": 6, } } } dict_view1 = ObjectDictView(nested_dict1) dict_view2 = ObjectDictView(nested_dict2) # Act dict_view1.merge(dict_view2) # Assert assert dict_view1.level1prop1 == 4 assert dict_view1.level2.level2prop1 == 5 assert dict_view1.level2.level3.level3prop1 == 3 assert dict_view1.level2.level3.level3prop2 == 6
def test_merge_two_disjoint_objects_returns_a_union_object(): # Arrange nested_dict1 = { "level1prop1": 1, "level2": { "level2prop1": 2, "level3": { "level3prop1": 3, } } } nested_dict2 = { "level1prop2": 4, "level2": { "level2prop2": 5, "level3": { "level3prop2": 6, } } } dict_view1 = ObjectDictView(nested_dict1) dict_view2 = ObjectDictView(nested_dict2) # Act dict_view1.merge(dict_view2) # Assert assert dict_view1.level1prop1 == 1 assert dict_view1.level1prop2 == 4 assert dict_view1.level2.level2prop1 == 2 assert dict_view1.level2.level2prop2 == 5 assert dict_view1.level2.level3.level3prop1 == 3 assert dict_view1.level2.level3.level3prop2 == 6
def test_get_safe_when_passed_an_existing_key_returns_its_value(): # Arrange nested_dict = { "level1prop1": 1, "level2": { "level2prop1": 2, "level3": { "level3prop1": 3, } } } dict_view = ObjectDictView(nested_dict) # Act value = dict_view.get_safe("level2/level3/level3prop1") # Assert assert value == 3
def test_get_safe_when_passed_a_nonexistent_key_returns_default_value(): # Arrange nested_dict = { "level1prop1": 1, "level2": { "level2prop1": 2, "level3": { "level3prop1": 3, } } } dict_view = ObjectDictView(nested_dict) # Act value1 = dict_view.get_safe("level2/level3/level4/level4prop1") value2 = dict_view.get_safe("level2/level3/level4/level4prop1", default_value=42) # Assert assert value1 is None assert value2 == 42