fix(bib): upsert never blanks a stored value — empty incoming columns keep the stored ones (refs #615)
This commit is contained in:
@@ -283,6 +283,13 @@ class Store:
|
||||
|
||||
new_row = item.to_row()
|
||||
cur_row = current.to_row()
|
||||
# Merge, don't replace: an empty incoming value carries no
|
||||
# information (a list-walk row has no body), so the stored value
|
||||
# wins. extra_json is always a full serialization and is exempt.
|
||||
for c in self._COMPARE_COLS:
|
||||
if c != "extra_json" and not new_row.get(c) and cur_row.get(c):
|
||||
new_row[c] = cur_row[c]
|
||||
setattr(item, c, cur_row[c])
|
||||
same_cols = all(
|
||||
new_row.get(c, "") == cur_row.get(c, "") for c in self._COMPARE_COLS
|
||||
)
|
||||
|
||||
@@ -74,3 +74,31 @@ def test_upsert_keeps_returning_key():
|
||||
s = _store()
|
||||
key = s.upsert(_item())
|
||||
assert s.upsert(_item()) == key
|
||||
|
||||
|
||||
def test_empty_incoming_abstract_keeps_stored_body():
|
||||
"""A list-walk row (no body) must not blank an enriched comment."""
|
||||
s = _store()
|
||||
key, _ = s.upsert_status(_item(abstract="enriched body"))
|
||||
_, status = s.upsert_status(_item(abstract=""))
|
||||
assert status == "unchanged"
|
||||
assert s.get(key).abstract == "enriched body"
|
||||
|
||||
|
||||
def test_empty_incoming_title_keeps_stored_title():
|
||||
s = _store()
|
||||
it = _item()
|
||||
it.title = "Org: CMS-2026-2377-1"
|
||||
key, _ = s.upsert_status(it)
|
||||
it2 = _item()
|
||||
it2.title = ""
|
||||
_, status = s.upsert_status(it2)
|
||||
assert status == "unchanged"
|
||||
assert s.get(key).title == "Org: CMS-2026-2377-1"
|
||||
|
||||
|
||||
def test_non_empty_incoming_still_updates():
|
||||
s = _store()
|
||||
key, _ = s.upsert_status(_item(abstract="v1"))
|
||||
_, status = s.upsert_status(_item(abstract="v2"))
|
||||
assert status == "updated" and s.get(key).abstract == "v2"
|
||||
|
||||
Reference in New Issue
Block a user