From b0a8d87d4f7672da853c854eda867f829def69fb Mon Sep 17 00:00:00 2001 From: Lance Edgar Date: Wed, 25 Feb 2026 08:54:58 -0600 Subject: [PATCH] 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 --- src/wuttjamaican/diffs.py | 6 +++++- tests/test_diffs.py | 13 ++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) 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"}