2a55e56f3f
If a field is open and the user right-clicks on another field (e.g., swap names, creator type, transform text), any changed value in the open field was lost. Also: - Don't show swap-names menu in single-field mode I can't quite get programmatic access to context menus to work correctly, so tests are disabled for now. (They work individually, but not together.)
171 lines
5.3 KiB
JavaScript
171 lines
5.3 KiB
JavaScript
describe("Item pane", function () {
|
|
var win, doc, itemsView;
|
|
|
|
before(function* () {
|
|
win = yield loadZoteroPane();
|
|
doc = win.document;
|
|
itemsView = win.ZoteroPane.itemsView;
|
|
});
|
|
after(function () {
|
|
win.close();
|
|
});
|
|
|
|
describe("Info pane", function () {
|
|
it("should refresh on item update", function* () {
|
|
var item = new Zotero.Item('book');
|
|
var id = yield item.saveTx();
|
|
|
|
var itemBox = doc.getElementById('zotero-editpane-item-box');
|
|
var label = doc.getAnonymousNodes(itemBox)[0].getElementsByAttribute('fieldname', 'title')[1];
|
|
assert.equal(label.textContent, '');
|
|
|
|
item.setField('title', 'Test');
|
|
yield item.saveTx();
|
|
|
|
var label = doc.getAnonymousNodes(itemBox)[0].getElementsByAttribute('fieldname', 'title')[1];
|
|
assert.equal(label.textContent, 'Test');
|
|
|
|
yield Zotero.Items.erase(id);
|
|
})
|
|
|
|
|
|
it.skip("should swap creator names", function* () {
|
|
var item = new Zotero.Item('book');
|
|
item.setCreators([
|
|
{
|
|
firstName: "First",
|
|
lastName: "Last",
|
|
creatorType: "author"
|
|
}
|
|
]);
|
|
yield item.saveTx();
|
|
|
|
var itemBox = doc.getElementById('zotero-editpane-item-box');
|
|
var label = doc.getAnonymousNodes(itemBox)[0].getElementsByAttribute('fieldname', 'creator-0-lastName')[0];
|
|
var parent = label.parentNode;
|
|
assert.isTrue(parent.hasAttribute('contextmenu'));
|
|
|
|
var menupopup = doc.getAnonymousNodes(itemBox)[0]
|
|
.getElementsByAttribute('id', 'zotero-creator-transform-menu')[0];
|
|
// Fake a right-click
|
|
doc.popupNode = parent;
|
|
menupopup.openPopup(
|
|
parent, "after_start", 0, 0, true, false, new MouseEvent('click', { button: 2 })
|
|
);
|
|
var menuitem = menupopup.getElementsByTagName('menuitem')[0];
|
|
menuitem.click();
|
|
yield waitForItemEvent('modify');
|
|
|
|
var creator = item.getCreators()[0];
|
|
assert.propertyVal(creator, 'firstName', 'Last');
|
|
assert.propertyVal(creator, 'lastName', 'First');
|
|
});
|
|
|
|
|
|
it("shouldn't show Swap Names menu for single-field mode", function* () {
|
|
var item = new Zotero.Item('book');
|
|
item.setCreators([
|
|
{
|
|
name: "Name",
|
|
creatorType: "author"
|
|
}
|
|
]);
|
|
yield item.saveTx();
|
|
|
|
var itemBox = doc.getElementById('zotero-editpane-item-box');
|
|
var label = doc.getAnonymousNodes(itemBox)[0].getElementsByAttribute('fieldname', 'creator-0-lastName')[0];
|
|
assert.isFalse(label.parentNode.hasAttribute('contextmenu'));
|
|
});
|
|
|
|
|
|
// Note: This issue applies to all context menus in the item box (text transform, name swap),
|
|
// though the others aren't tested. This might go away with the XUL->HTML transition.
|
|
it.skip("should save open field after changing creator type", function* () {
|
|
var item = new Zotero.Item('book');
|
|
item.setCreators([
|
|
{
|
|
firstName: "First",
|
|
lastName: "Last",
|
|
creatorType: "author"
|
|
}
|
|
]);
|
|
var id = yield item.saveTx();
|
|
|
|
var itemBox = doc.getElementById('zotero-editpane-item-box');
|
|
var label = doc.getAnonymousNodes(itemBox)[0].getElementsByAttribute('fieldname', 'place')[1];
|
|
label.click();
|
|
var textbox = doc.getAnonymousNodes(itemBox)[0].getElementsByAttribute('fieldname', 'place')[1];
|
|
textbox.value = "Place";
|
|
|
|
var menuLabel = doc.getAnonymousNodes(itemBox)[0].getElementsByAttribute('fieldname', 'creator-0-typeID')[0];
|
|
menuLabel.click();
|
|
var menupopup = itemBox._creatorTypeMenu;
|
|
var menuItems = menupopup.getElementsByTagName('menuitem');
|
|
menuItems[1].click();
|
|
yield waitForItemEvent('modify');
|
|
|
|
assert.equal(item.getField('place'), 'Place');
|
|
assert.equal(Zotero.CreatorTypes.getName(item.getCreators()[0].creatorTypeID), 'contributor');
|
|
|
|
// Wait for no-op saveTx()
|
|
yield Zotero.Promise.delay(1);
|
|
});
|
|
})
|
|
|
|
describe("Attachment pane", function () {
|
|
it("should refresh on file rename", function* () {
|
|
var file = getTestDataDirectory();
|
|
file.append('test.png');
|
|
var item = yield Zotero.Attachments.importFromFile({
|
|
file: file
|
|
});
|
|
var newName = 'test2.png';
|
|
yield item.renameAttachmentFile(newName);
|
|
|
|
var itemBox = doc.getElementById('zotero-attachment-box');
|
|
var label = itemBox._id('fileName');
|
|
assert.equal(label.value, newName);
|
|
})
|
|
})
|
|
|
|
describe("Note pane", function () {
|
|
it("should refresh on note update", function* () {
|
|
var item = new Zotero.Item('note');
|
|
var id = yield item.saveTx();
|
|
|
|
// Wait for the editor
|
|
var noteBox = doc.getElementById('zotero-note-editor');
|
|
var val = false;
|
|
do {
|
|
try {
|
|
val = noteBox.noteField.value;
|
|
}
|
|
catch (e) {}
|
|
yield Zotero.Promise.delay(1);
|
|
}
|
|
while (val === false)
|
|
assert.equal(noteBox.noteField.value, '');
|
|
|
|
item.setNote('<p>Test</p>');
|
|
yield item.saveTx();
|
|
|
|
assert.equal(noteBox.noteField.value, '<p>Test</p>');
|
|
})
|
|
})
|
|
|
|
describe("Feed buttons", function() {
|
|
describe("Mark as Read/Unread", function() {
|
|
it("Updates label when state of an item changes", function* () {
|
|
let feed = yield createFeed();
|
|
yield selectLibrary(win, feed.libraryID);
|
|
let item = yield createDataObject('feedItem', {libraryID: feed.libraryID});
|
|
yield itemsView.selectItem(item.id);
|
|
let button = doc.getElementById('zotero-feed-item-toggleRead-button');
|
|
|
|
assert.equal(button.getAttribute('label'), Zotero.getString('pane.item.markAsUnread'));
|
|
yield item.toggleRead(false);
|
|
assert.equal(button.getAttribute('label'), Zotero.getString('pane.item.markAsRead'));
|
|
});
|
|
});
|
|
});
|
|
})
|