diff --git a/chrome/content/zotero/xpcom/data/dataObject.js b/chrome/content/zotero/xpcom/data/dataObject.js index 2a51a5e415..e34a3e5136 100644 --- a/chrome/content/zotero/xpcom/data/dataObject.js +++ b/chrome/content/zotero/xpcom/data/dataObject.js @@ -1190,6 +1190,8 @@ Zotero.DataObject.prototype._postSave = function (env) { let rel = env.relationsToUnregister[i]; Zotero.Relations.unregister(this._objectType, this.id, rel[0], rel[1]); } + this._changed = {}; + this._previousData = {}; }; diff --git a/test/tests/itemTest.js b/test/tests/itemTest.js index 100b545d4c..c6b7af2a26 100644 --- a/test/tests/itemTest.js +++ b/test/tests/itemTest.js @@ -2000,15 +2000,26 @@ describe("Zotero.Item", function () { }); it("should include changed field data in notifier extraData", async function () { - var item = await createDataObject('item', { title: 'old value' }); + var item = await createDataObject('item', { title: 'first' }); var promise = waitForNotifierEvent('modify', 'item'); - item.setField('title', 'new value'); + item.setField('title', 'second'); + item.setField('extra', 'extra'); await item.saveTx(); var { ids, extraData } = await promise; - assert.deepPropertyVal(extraData[ids[0]], 'changed', { title: 'old value' }); + // "first" -> "second", old value is "first" and "extra" was empty + assert.deepPropertyVal(extraData[ids[0]], 'changed', { title: 'first', extra: false }); + + var promise = waitForNotifierEvent('modify', 'item'); + item.setField('title', 'third'); + await item.saveTx(); + + var { ids, extraData } = await promise; + + // "second" -> "third", old value is "second", and we don't notify about "extra" because it's not changed this time + assert.deepPropertyVal(extraData[ids[0]], 'changed', { title: 'second' }); }); // 'deleted' and 'tags' use a different, newer mechanism for marking changes