duplicatesTest.js (2756B)
1 "use strict"; 2 3 describe("Duplicate Items", function () { 4 var win, zp, cv; 5 6 before(function* () { 7 yield resetDB({ 8 thisArg: this, 9 skipBundledFiles: true 10 }); 11 12 Zotero.Prefs.clear('duplicateLibraries'); 13 win = yield loadZoteroPane(); 14 zp = win.ZoteroPane; 15 cv = zp.collectionsView; 16 }); 17 beforeEach(function* () { 18 return selectLibrary(win); 19 }) 20 after(function () { 21 win.close(); 22 }); 23 24 describe("Merging", function () { 25 it("should merge two items in duplicates view", function* () { 26 var item1 = yield createDataObject('item', { setTitle: true }); 27 var item2 = item1.clone(); 28 yield item2.saveTx(); 29 var uri2 = Zotero.URI.getItemURI(item2); 30 31 var userLibraryID = Zotero.Libraries.userLibraryID; 32 33 var selected = yield cv.selectByID('D' + userLibraryID); 34 assert.ok(selected); 35 yield waitForItemsLoad(win); 36 37 // Select the first item, which should select both 38 var iv = zp.itemsView; 39 var row = iv.getRowIndexByID(item1.id); 40 assert.isNumber(row); 41 clickOnItemsRow(iv, row); 42 assert.equal(iv.selection.count, 2); 43 44 // Click merge button 45 var button = win.document.getElementById('zotero-duplicates-merge-button'); 46 button.click(); 47 48 yield waitForNotifierEvent('refresh', 'trash'); 49 50 // Items should be gone 51 assert.isFalse(iv.getRowIndexByID(item1.id)); 52 assert.isFalse(iv.getRowIndexByID(item2.id)); 53 assert.isTrue(item2.deleted); 54 var rels = item1.getRelations(); 55 var pred = Zotero.Relations.replacedItemPredicate; 56 assert.property(rels, pred); 57 assert.equal(rels[pred], uri2); 58 }); 59 60 it("should combine collections from all items", function* () { 61 var collection1 = yield createDataObject('collection'); 62 var collection2 = yield createDataObject('collection'); 63 64 var item1 = yield createDataObject('item', { setTitle: true, collections: [collection1.id] }); 65 var item2 = item1.clone(); 66 item2.setCollections([collection2.id]); 67 yield item2.saveTx(); 68 69 var userLibraryID = Zotero.Libraries.userLibraryID; 70 71 var selected = yield cv.selectByID('D' + userLibraryID); 72 assert.ok(selected); 73 yield waitForItemsLoad(win); 74 75 // Select the first item, which should select both 76 var iv = zp.itemsView; 77 var row = iv.getRowIndexByID(item1.id); 78 clickOnItemsRow(iv, row); 79 80 // Click merge button 81 var button = win.document.getElementById('zotero-duplicates-merge-button'); 82 button.click(); 83 84 yield waitForNotifierEvent('refresh', 'trash'); 85 86 // Items should be gone 87 assert.isFalse(iv.getRowIndexByID(item1.id)); 88 assert.isFalse(iv.getRowIndexByID(item2.id)); 89 assert.isTrue(item2.deleted); 90 assert.isTrue(collection1.hasItem(item1.id)); 91 assert.isTrue(collection2.hasItem(item1.id)); 92 }); 93 }); 94 });