Added util function to compute the difference between two dicts.

This commit is contained in:
2016-10-12 16:01:30 +02:00
parent 26aa155b9e
commit 7c310e12ef
2 changed files with 90 additions and 0 deletions

View File

@@ -1,4 +1,6 @@
# -*- encoding: utf-8 -*-
from __future__ import absolute_import
import unittest
from bson import ObjectId
from pillar.tests import AbstractPillarTest
@@ -28,3 +30,57 @@ class Str2idTest(AbstractPillarTest):
unhappy('')
unhappy(u'')
unhappy(None)
class DocDiffTest(unittest.TestCase):
def test_no_diff_simple(self):
from pillar.api.utils import doc_diff
diff = doc_diff({'a': 'b', 3: 42},
{'a': 'b', 3: 42})
self.assertEqual([], list(diff))
def test_no_diff_privates(self):
from pillar.api.utils import doc_diff
diff = doc_diff({'a': 'b', 3: 42, '_updated': 5133},
{'a': 'b', 3: 42, '_updated': 42})
self.assertEqual([], list(diff))
def test_diff_values_simple(self):
from pillar.api.utils import doc_diff
diff = doc_diff({'a': 'b', 3: 42},
{'a': 'b', 3: 513})
self.assertEqual([(3, 42, 513)], list(diff))
def test_diff_keys_simple(self):
from pillar.api.utils import doc_diff, DoesNotExist
diff = doc_diff({'a': 'b', 3: 42},
{'a': 'b', 2: 42})
self.assertEqual({(3, 42, DoesNotExist), (2, DoesNotExist, 42)}, set(diff))
def test_no_diff_nested(self):
from pillar.api.utils import doc_diff
diff = doc_diff({'a': 'b', 'props': {'status': u'todo', 'notes': u'jemoeder'}},
{'a': 'b', 'props': {'status': u'todo', 'notes': u'jemoeder'}})
self.assertEqual([], list(diff))
def test_diff_values_nested(self):
from pillar.api.utils import doc_diff
diff = doc_diff({'a': 'b', 'props': {'status': u'todo', 'notes': u'jemoeder'}},
{'a': 'c', 'props': {'status': u'done', 'notes': u'jemoeder'}})
self.assertEqual({('a', 'b', 'c'), ('props.status', u'todo', u'done')},
set(diff))
def test_diff_keys_nested(self):
from pillar.api.utils import doc_diff, DoesNotExist
diff = doc_diff({'a': 'b', 'props': {'status1': u'todo', 'notes': u'jemoeder'}},
{'a': 'b', 'props': {'status2': u'todo', 'notes': u'jemoeder'}})
self.assertEqual({('props.status1', u'todo', DoesNotExist),
('props.status2', DoesNotExist, u'todo')},
set(diff))