def test_are_dicts_equal_when_dicts_have_different_values():
    s = {"key1": "val1", "key2": {"subkey1": "subval1", "subkey2": "subval2"}}
    t = {
        "key1": "val1",
        "key2": {
            "subkey1": "subval1",
            "subkey2": "differentsubval2"
        }
    }
    assert oci_common_utils.are_dicts_equal(s, t) is False

    s = {"key1": "val1", "key2": {"subkey1": {"subkey2": "subval2"}}}
    s = {"key1": "val1", "key2": {"subkey1": {"subkey2": "differentsubval2"}}}
    assert oci_common_utils.are_dicts_equal(s, t) is False

    s = {
        "key1": "val1",
        "key2": {
            "subkey1": {
                "subkey2": "subval2"
            }
        },
        "key3": {}
    }
    s = {
        "key1": "val1",
        "key2": {
            "subkey1": {
                "subkey2": "differentsubval2"
            }
        },
        "key3": {},
    }
    assert oci_common_utils.are_dicts_equal(s, t) is False
def test_are_dicts_equal_when_source_has_more_keys():
    s = {"key1": "val1"}
    t = {}
    assert oci_common_utils.are_dicts_equal(s, t) is False
    assert (oci_common_utils.is_dict_subset(
        s, t, ignore_attr_if_not_in_target=True) is True)

    s = {"key1": "val1", "key2": "val2"}
    t = {"key1": "val1"}
    assert oci_common_utils.are_dicts_equal(s, t) is False
    assert (oci_common_utils.is_dict_subset(
        s, t, ignore_attr_if_not_in_target=True) is True)

    s = {"key1": "val1", "key2": {"subkey1": "subval1", "subkey2": "subval2"}}
    t = {"key1": "val1", "key2": {"subkey1": "subval1"}}
    assert oci_common_utils.are_dicts_equal(s, t) is False

    s = {
        "key1": "val1",
        "key2": {
            "subkey1": "subval1",
            "subkey3": "subval3"
        },
        "key3": "val3",
    }
    t = {"key1": "val1", "key2": {"subkey1": "subval1", "subkey2": "subval2"}}
    assert oci_common_utils.are_dicts_equal(s, t) is False
def test_are_dicts_equal_when_dicts_have_list_values():
    s = {"key1": "val1", "key2": ["item1", "item2", "item3"]}
    t = {"key1": "val1", "key2": ["item2", "item3"]}
    assert oci_common_utils.are_dicts_equal(s, t) is False

    s = {"key1": "val1", "key2": ["item1", "item2", "item3"]}
    t = {"key1": "val1", "key2": ["item2", "item3", "item1"]}
    assert oci_common_utils.are_dicts_equal(s, t) is True

    s = {"key1": "val1", "key2": ["item1", "item2", "item3"]}
    t = {"key1": "val1", "key2": ["item1", "item2", "item3", "item4"]}
    assert oci_common_utils.are_dicts_equal(s, t) is False
def test_are_dicts_equal_when_source_subdicts_have_more_keys():
    s = {"key1": {"subkey1": "subval1", "subkey2": "subval2"}}
    t = {"key1": {"subkey1": "subval1"}}
    assert oci_common_utils.are_dicts_equal(s, t) is False

    s = {"key1": {"subkey1": {"subkey2": "subval2", "subkey3": "subval3"}}}
    t = {"key1": {"subkey1": {"subkey2": "subval2"}}}
    assert oci_common_utils.are_dicts_equal(s, t) is False

    s = {"key1": {"subkey1": {"subkey2": "subval2", "subkey3": "subval3"}}}
    t = {"key1": {"subkey1": {}}}
    assert oci_common_utils.are_dicts_equal(s, t) is False
def test_are_dicts_equal_when_source_has_less_keys():
    s = {"key1": "val1"}
    t = {"key1": "val1", "key2": "val2"}
    assert oci_common_utils.are_dicts_equal(s, t) is True

    s = {"key1": "val1"}
    t = {"key1": "val1", "key2": "val2", "key3": "val3"}
    assert oci_common_utils.are_dicts_equal(s, t) is True

    s = {}
    t = {"key1": "val1", "key2": "val2"}
    assert oci_common_utils.are_dicts_equal(s, t) is False
 def is_update_necessary(self):
     current_resource_dict = to_dict(self.get_resource().data)
     update_model = self.get_update_model()
     update_model_dict = to_dict(update_model)
     return not oci_common_utils.are_dicts_equal(
         update_model_dict, current_resource_dict, update_model.attribute_map
     )
def test_are_dicts_equal_when_source_or_target_are_not_dicts():
    assert oci_common_utils.are_dicts_equal([], {}) is False
    assert oci_common_utils.are_dicts_equal([], []) is False
    assert oci_common_utils.are_dicts_equal("testsourcestr", {}) is False
    assert oci_common_utils.are_dicts_equal(1, {}) is False
    assert oci_common_utils.are_dicts_equal(True, {}) is False
    assert oci_common_utils.are_dicts_equal({}, "testtargetstr") is False
    assert oci_common_utils.are_dicts_equal({}, 1) is False
    assert oci_common_utils.are_dicts_equal({}, True) is False
def test_are_dicts_equal_when_source_has_more_keys():
    s = {"key1": "val1"}
    t = {}
    assert oci_common_utils.are_dicts_equal(s, t) is True

    s = {"key1": "val1", "key2": "val2"}
    t = {"key1": "val1"}
    assert oci_common_utils.are_dicts_equal(s, t) is True

    s = {"key1": "val1", "key2": {"subkey1": "subval1", "subkey2": "subval2"}}
    t = {"key1": "val1", "key2": {"subkey1": "subval1"}}
    assert oci_common_utils.are_dicts_equal(s, t) is False

    s = {
        "key1": "val1",
        "key2": {
            "subkey1": "subval1",
            "subkey3": "subval3"
        },
        "key3": "val3",
    }
    t = {"key1": "val1", "key2": {"subkey1": "subval1", "subkey2": "subval2"}}
    assert oci_common_utils.are_dicts_equal(s, t) is False
def test_are_dicts_equal_when_source_and_target_are_empty():
    assert oci_common_utils.are_dicts_equal({}, {}) is True
def test_are_dicts_equal_when_source_or_target_are_None():
    assert oci_common_utils.are_dicts_equal(None, None) is False
    assert oci_common_utils.are_dicts_equal({}, None) is False
    assert oci_common_utils.are_dicts_equal(None, {}) is False