diff --git a/chrome/content/zotero/bindings/relatedbox.xml b/chrome/content/zotero/bindings/relatedbox.xml index 46ab5b75a9..a58399d35f 100644 --- a/chrome/content/zotero/bindings/relatedbox.xml +++ b/chrome/content/zotero/bindings/relatedbox.xml @@ -116,14 +116,25 @@ Zotero.Items.getIDFromLibraryAndKey(libraryID, key))); + for (let id of ids) { + if (relatedItemIDs.has(id)) { + this.refresh(); + return; + } + } } ]]> diff --git a/test/tests/relatedboxTest.js b/test/tests/relatedboxTest.js index 8f89d03d0c..81ee450aa0 100644 --- a/test/tests/relatedboxTest.js +++ b/test/tests/relatedboxTest.js @@ -12,6 +12,72 @@ describe("Related Box", function () { win.close(); }) + it("should update if a related item is renamed", async function () { + var title1 = 'aaaaaa'; + var title2 = 'bbbbbb'; + var item1 = await createDataObject('item', { title: title1 }); + var item2 = await createDataObject('item', { title: title2 }); + item1.addRelatedItem(item2); + await item1.saveTx(); + item2.addRelatedItem(item1); + await item2.saveTx(); + + // Select the Related pane + var tabbox = doc.getElementById('zotero-view-tabbox'); + tabbox.selectedIndex = 3; + var relatedbox = doc.getElementById('zotero-editpane-related'); + + // Wait for relations list to populate + do { + await Zotero.Promise.delay(50); + } + while (!relatedbox.id('relatedRows').childNodes.length); + + assert.include(doc.getAnonymousNodes(relatedbox)[0].innerHTML, title1); + + title1 = 'cccccc'; + item1.setField('title', title1); + await item1.saveTx(); + + // New title should appear in list + do { + await Zotero.Promise.delay(50); + } + while (!doc.getAnonymousNodes(relatedbox)[0].innerHTML.includes(title1)); + }); + + it("should update if a related item is deleted", async function () { + var title1 = 'aaaaaa'; + var title2 = 'bbbbbb'; + var item1 = await createDataObject('item', { title: title1 }); + var item2 = await createDataObject('item', { title: title2 }); + item1.addRelatedItem(item2); + await item1.saveTx(); + item2.addRelatedItem(item1); + await item2.saveTx(); + + // Select the Related pane + var tabbox = doc.getElementById('zotero-view-tabbox'); + tabbox.selectedIndex = 3; + var relatedbox = doc.getElementById('zotero-editpane-related'); + + // Wait for relations list to populate + do { + await Zotero.Promise.delay(50); + } + while (!relatedbox.id('relatedRows').childNodes.length); + + assert.include(doc.getAnonymousNodes(relatedbox)[0].innerHTML, title1); + + await item1.eraseTx(); + + // Deleted item should be removed from list + do { + await Zotero.Promise.delay(50); + } + while (doc.getAnonymousNodes(relatedbox)[0].innerHTML.includes(title1)); + }); + describe("Add button", function () { it("should add a related item", function* () { var item1 = yield createDataObject('item');