def test_UnionSimpleDict_ReturnUnionData(self):
        # Arrange
        dict1 = {'foo': 1}
        dict2 = {'bar': 2}

        # Act
        result = dict_utils.dict_union(dict1, dict2)

        # Assert
        assert result == {'foo': 1, 'bar': 2}
    def test_UnionDictListFromEmpty_ReturnUnionData(self):
        # Arrange
        dict1 = {}
        dict2 = {'deep': [{'bar': 3}, {'bar': 4}]}

        # Act
        result = dict_utils.dict_union(dict1, dict2)

        # Assert
        assert result == {'deep': [{'bar': 3}, {'bar': 4}]}
    def test_UnionDictWithList_ReturnUnionData(self):
        # Arrange
        dict1 = {'deep': [{'foo': 1}, {'foo': 2}]}
        dict2 = {'deep': [{'bar': 3}, {'bar': 4}]}

        # Act
        result = dict_utils.dict_union(dict1, dict2)

        # Assert
        assert result == {'deep': [{'foo': 1, 'bar': 3}, {'foo': 2, 'bar': 4}]}
    def test_UnionDeepDictWithExtraDataInDict2_KeepExtraData(self):
        # Arrange
        dict1 = {'deep': {'foo': 1}}
        dict2 = {'deep': {'bar': 2}, 'extra': True}

        # Act
        result = dict_utils.dict_union(dict1, dict2)

        # Assert
        assert result == {'deep': {'foo': 1, 'bar': 2}, 'extra': True}
    def test_UnionDictImmutateDict_DictsAsOrigin(self):
        # Arrange
        dict1 = {'deep': {'foo': 1}}
        dict2 = {'deep': {'bar': 2}}

        # Act
        result = dict_utils.dict_union(dict1, dict2)

        # Assert
        assert dict1 == {'deep': {'foo': 1}}
        assert dict2 == {'deep': {'bar': 2}}