mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2025-06-25 19:55:31 +02:00
45 lines
1.7 KiB
Python
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() |