"""DIff helpers unit tests."""
from jdiff.utils.diff_helpers import dict_merger, group_value, fix_deepdiff_key_names, get_diff_iterables_items


def test_dict_merger():
    """Tests that dict is merged as expected and duplicates identified."""
    original_dict = {"key_1": "my_key_1", "key_5": "my_key_5"}
    dict_to_merge = {"key_1": "my_key_1", "key_2": "my_key_2", "key_3": "my_key_3"}
    dict_merger(original_dict, dict_to_merge)

    assert original_dict == {
        "key_1": "my_key_1",
        "key_1_dup!": "my_key_1",
        "key_2": "my_key_2",
        "key_3": "my_key_3",
        "key_5": "my_key_5",
    }


def test_group_value():
    """Tests that nested dict is recursively created."""
    tree_list = ["10.1.0.0", "is_enabled"]
    value = {"new_value": False, "old_value": True}
    assert group_value(tree_list, value) == {"10.1.0.0": {"is_enabled": {"new_value": False, "old_value": True}}}


def test_fix_deepdiff_key_names():
    """Tests that deepdiff return is parsed properly."""
    deepdiff_object = {"root[0]['10.1.0.0']['is_enabled']": {"new_value": False, "old_value": True}}
    assert fix_deepdiff_key_names(deepdiff_object) == {
        "10.1.0.0": {"is_enabled": {"new_value": False, "old_value": True}}
    }


def test_get_diff_iterables_items():
    """Tests that deepdiff return is parsed properly."""
    diff_result = {
        "values_changed": {"root['Ethernet1'][0]['port']": {"new_value": "518", "old_value": "519"}},
        "iterable_item_added": {
            "root['Ethernet3'][1]": {"hostname": "ios-xrv-unittest", "port": "Gi0/0/0/0"},
        },
    }
    result = get_diff_iterables_items(diff_result)

    assert list(dict(result).keys())[0] == "['Ethernet3']"
    assert list(list(dict(result).values())[0].values())[0] == [{"hostname": "ios-xrv-unittest", "port": "Gi0/0/0/0"}]