zotero/test/tests/duplicatesTest.js
Dan Stillman c4ca22ca62 Fix duplicate merging
Fixes #919
2016-03-11 09:27:03 -05:00

78 lines
2 KiB
JavaScript

"use strict";
describe("Duplicate Items", function () {
var win, zp, cv;
beforeEach(function* () {
Zotero.Prefs.clear('duplicateLibraries');
win = yield loadZoteroPane();
zp = win.ZoteroPane;
cv = zp.collectionsView;
return selectLibrary(win);
})
after(function () {
if (win) {
win.close();
}
});
describe("Merging", function () {
it("should merge two items in duplicates view", function* () {
var item1 = yield createDataObject('item', { setTitle: true });
var item2 = item1.clone();
yield item2.saveTx();
var uri2 = Zotero.URI.getItemURI(item2);
var userLibraryID = Zotero.Libraries.userLibraryID;
var selected = yield cv.selectByID('D' + userLibraryID);
assert.ok(selected);
yield waitForItemsLoad(win);
// Select the first item, which should select both
var iv = zp.itemsView;
var index = iv.getRowIndexByID(item1.id);
assert.isNumber(index);
var x = {};
var y = {};
var width = {};
var height = {};
iv._treebox.getCoordsForCellItem(
index,
iv._treebox.columns.getNamedColumn('zotero-items-column-title'),
'text',
x, y, width, height
);
// Select row to trigger multi-select
var tree = iv._treebox.treeBody;
var rect = tree.getBoundingClientRect();
var x = rect.left + x.value;
var y = rect.top + y.value;
tree.dispatchEvent(new MouseEvent("mousedown", {
clientX: x,
clientY: y,
detail: 1
}));
assert.equal(iv.selection.count, 2);
// Click merge button
var button = win.document.getElementById('zotero-duplicates-merge-button');
button.click();
yield waitForNotifierEvent('refresh', 'trash');
// Items should be gone
assert.isFalse(iv.getRowIndexByID(item1.id));
assert.isFalse(iv.getRowIndexByID(item2.id));
assert.isTrue(item2.deleted);
var rels = item1.getRelations();
var pred = Zotero.Relations.replacedItemPredicate;
assert.property(rels, pred);
assert.equal(rels[pred], uri2);
});
});
});