computer-playbook/tests/unit/test_merge_mapping.py

45 lines
1.7 KiB
Python

import unittest
from filter_plugins.merge_mapping import merge_mapping
from ansible.errors import AnsibleFilterError
class TestMergeMappingFilter(unittest.TestCase):
def test_basic_merge_overwrites_and_adds(self):
list1 = [
{'source': 'a', 'target': 1},
{'source': 'b', 'target': 2},
]
list2 = [
{'source': 'b', 'target': 3},
{'source': 'c', 'target': 4},
]
result = merge_mapping(list1, list2, 'source')
result_dict = {item['source']: item['target'] for item in result}
self.assertEqual(result_dict, {'a': 1, 'b': 3, 'c': 4})
def test_merge_preserves_and_overwrites_fields(self):
list1 = [{'source': 'x', 'value': 100, 'flag': True}]
list2 = [{'source': 'x', 'value': 200, 'note': 'updated'}]
result = merge_mapping(list1, list2, 'source')
self.assertEqual(len(result), 1)
merged = result[0]
self.assertEqual(merged['value'], 200)
self.assertTrue(merged['flag'])
self.assertEqual(merged['note'], 'updated')
def test_empty_lists_return_empty(self):
self.assertEqual(merge_mapping([], [], 'source'), [])
def test_missing_key_raises_error(self):
list1 = [{'target': 'no_source'}]
list2 = []
with self.assertRaises(AnsibleFilterError):
merge_mapping(list1, list2, 'source')
def test_non_list_inputs_raise_error(self):
with self.assertRaises(AnsibleFilterError):
merge_mapping("not a list", [], 'source')
with self.assertRaises(AnsibleFilterError):
merge_mapping([], "not a list", 'source')
if __name__ == '__main__':
unittest.main()