fix: diff should use "intersection" of fields by default
if either "old" or "new" data has more fields than the other set, only the fields they have in common should be used unless caller overrides
This commit is contained in:
parent
69a83ea47f
commit
b0a8d87d4f
2 changed files with 15 additions and 4 deletions
|
|
@ -83,7 +83,11 @@ class Diff: # pylint: disable=too-many-instance-attributes
|
|||
self.cell_padding = cell_padding
|
||||
|
||||
def make_fields(self): # pylint: disable=missing-function-docstring
|
||||
return sorted(set(self.old_data) | set(self.new_data), key=lambda x: x.lower())
|
||||
if self.old_data and self.new_data:
|
||||
fields = set(self.old_data) & set(self.new_data)
|
||||
else:
|
||||
fields = set(self.old_data or self.new_data)
|
||||
return sorted(fields, key=lambda f: f.lower())
|
||||
|
||||
def render_html(self, template=None, **kwargs):
|
||||
"""
|
||||
|
|
|
|||
|
|
@ -19,13 +19,20 @@ class TestDiff(ConfigTestCase):
|
|||
self.assertEqual(diff.cell_padding, "0.5rem")
|
||||
|
||||
def test_make_fields(self):
|
||||
old_data = {"foo": "bar"}
|
||||
new_data = {"foo": "bar", "baz": "zer"}
|
||||
|
||||
# should return "sorted intersection" of fields
|
||||
old_data = {"foo": "bar", "baz": "abc"}
|
||||
new_data = {"foo": "bar", "baz": "xyz", "flurg": "foo"}
|
||||
# nb. this calls make_fields()
|
||||
diff = self.make_diff(old_data, new_data)
|
||||
# TODO: should the fields be cumulative? or just use new_data?
|
||||
self.assertEqual(diff.fields, ["baz", "foo"])
|
||||
|
||||
# all fields are used if only one data set
|
||||
diff = self.make_diff(old_data, {})
|
||||
self.assertEqual(diff.fields, ["baz", "foo"])
|
||||
diff = self.make_diff({}, new_data)
|
||||
self.assertEqual(diff.fields, ["baz", "flurg", "foo"])
|
||||
|
||||
def test_values(self):
|
||||
old_data = {"foo": "bar"}
|
||||
new_data = {"foo": "baz"}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue