pgmon/test_pgmon.py

113 lines
3.2 KiB
Python
Raw Normal View History

2025-01-03 07:16:40 +00:00
import unittest
import pgmon
class TestPgmonMethods(unittest.TestCase):
##
# update_deep
##
def test_update_deep__empty_cases(self):
# Test empty dict cases
d1 = {}
d2 = {}
pgmon.update_deep(d1, d2)
self.assertEqual(d1, {})
self.assertEqual(d2, {})
d1 = {'a': 1}
d2 = {}
pgmon.update_deep(d1, d2)
self.assertEqual(d1, { 'a': 1 })
self.assertEqual(d2, {})
d1 = {}
d2 = {'a': 1}
pgmon.update_deep(d1, d2)
self.assertEqual(d1, { 'a': 1 })
self.assertEqual(d2, d1)
def test_update_deep__scalars(self):
# Test adding/updating scalar values
d1 = {'foo': 1, 'bar': "text", 'hello': "world"}
d2 = {'foo': 2, 'baz': "blah"}
pgmon.update_deep(d1, d2)
self.assertEqual(d1, {'foo': 2, 'bar': "text", 'baz': "blah", 'hello': "world"})
self.assertEqual(d2, {'foo': 2, 'baz': "blah"})
def test_update_deep__lists(self):
# Test adding to lists
d1 = {'lst1': []}
d2 = {'lst1': [1, 2]}
pgmon.update_deep(d1, d2)
self.assertEqual(d1, {'lst1': [1, 2]})
self.assertEqual(d2, d1)
d1 = {'lst1': [1, 2]}
d2 = {'lst1': []}
pgmon.update_deep(d1, d2)
self.assertEqual(d1, {'lst1': [1, 2]})
self.assertEqual(d2, {'lst1': []})
d1 = {'lst1': [1, 2, 3]}
d2 = {'lst1': [3, 4]}
pgmon.update_deep(d1, d2)
self.assertEqual(d1, {'lst1': [1, 2, 3, 3, 4]})
self.assertEqual(d2, {'lst1': [3, 4]})
# Lists of objects
d1 = {'lst1': [{'id': 1}, {'id': 2}, {'id': 3}]}
d2 = {'lst1': [{'id': 3}, {'id': 4}]}
pgmon.update_deep(d1, d2)
self.assertEqual(d1, {'lst1': [{'id': 1}, {'id': 2}, {'id': 3}, {'id': 3}, {'id': 4}]})
self.assertEqual(d2, {'lst1': [{'id': 3}, {'id': 4}]})
# Nested lists
d1 = {'obj1': {'l1': [1, 2]}}
d2 = {'obj1': {'l1': [3, 4]}}
pgmon.update_deep(d1, d2)
self.assertEqual(d1, {'obj1': {'l1': [1, 2, 3, 4]}})
self.assertEqual(d2, {'obj1': {'l1': [3, 4]}})
def test_update_deep__dicts(self):
# Test adding to lists
d1 = {'obj1': {}}
d2 = {'obj1': {'a': 1, 'b': 2}}
pgmon.update_deep(d1, d2)
self.assertEqual(d1, {'obj1': {'a': 1, 'b': 2}})
self.assertEqual(d2, d1)
d1 = {'obj1': {'a': 1, 'b': 2}}
d2 = {'obj1': {}}
pgmon.update_deep(d1, d2)
self.assertEqual(d1, {'obj1': {'a': 1, 'b': 2}})
self.assertEqual(d2, {'obj1': {}})
d1 = {'obj1': {'a': 1, 'b': 2}}
d2 = {'obj1': {'a': 5, 'c': 12}}
pgmon.update_deep(d1, d2)
self.assertEqual(d1, {'obj1': {'a': 5, 'b': 2, 'c': 12}})
self.assertEqual(d2, {'obj1': {'a': 5, 'c': 12}})
# Nested dicts
d1 = {'obj1': {'d1': {'a': 1, 'b': 2}}}
d2 = {'obj1': {'d1': {'a': 5, 'c': 12}}}
pgmon.update_deep(d1, d2)
self.assertEqual(d1, {'obj1': {'d1': {'a': 5, 'b': 2, 'c': 12}}})
self.assertEqual(d2, {'obj1': {'d1': {'a': 5, 'c': 12}}})
def test_update_deep__types(self):
# Test mismatched types
d1 = {'foo': 5}
d2 = None
self.assertRaises(TypeError, pgmon.update_deep, d1, d2)
d1 = None
d2 = {'foo': 5}
self.assertRaises(TypeError, pgmon.update_deep, d1, d2)
# Nested mismatched types
d1 = {'foo': [1, 2]}
d2 = {'foo': {'a': 7}}
self.assertRaises(TypeError, pgmon.update_deep, d1, d2)