diff --git a/src/wuttjamaican/diffs.py b/src/wuttjamaican/diffs.py index 38e4214..47db028 100644 --- a/src/wuttjamaican/diffs.py +++ b/src/wuttjamaican/diffs.py @@ -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): """ diff --git a/tests/test_diffs.py b/tests/test_diffs.py index 32dedeb..dfb4452 100644 --- a/tests/test_diffs.py +++ b/tests/test_diffs.py @@ -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"}