Disable Delete/Restore menu items appropriately (#2340)

This commit is contained in:
Abe Jellinek 2022-02-20 08:45:53 -08:00 committed by GitHub
parent 13f48ec5c7
commit 48a3235a2e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 280 additions and 30 deletions

View file

@ -832,5 +832,180 @@ describe("ZoteroPane", function() {
Zotero.getString('pane.items.menu.exportNote.multiple')
);
});
it("should enable “Delete Item…” when selected item or an ancestor is in trash", async function () {
var item1 = await createDataObject('item', { deleted: true });
var attachment1 = await importFileAttachment('test.png', { parentItemID: item1.id });
var userLibraryID = Zotero.Libraries.userLibraryID;
await zp.collectionsView.selectByID('T' + userLibraryID);
await zp.selectItems([attachment1.id]);
await zp.buildItemContextMenu();
var menu = win.document.getElementById('zotero-itemmenu');
var deleteMenuItem = menu.querySelector('.zotero-menuitem-delete-from-lib');
assert.isFalse(deleteMenuItem.disabled);
await zp.selectItems([item1.id, attachment1.id]);
await zp.buildItemContextMenu();
assert.isFalse(deleteMenuItem.disabled);
item1.deleted = false;
attachment1.deleted = true;
await item1.saveTx();
await attachment1.saveTx();
await zp.buildItemContextMenu();
assert.isTrue(deleteMenuItem.disabled);
});
it("should enable “Restore to Library” when at least one selected item is in trash", async function () {
var item1 = await createDataObject('item', { deleted: true });
var attachment1 = await importFileAttachment('test.png', { parentItemID: item1.id });
var userLibraryID = Zotero.Libraries.userLibraryID;
await zp.collectionsView.selectByID('T' + userLibraryID);
await zp.selectItems([item1.id]);
await zp.buildItemContextMenu();
var menu = win.document.getElementById('zotero-itemmenu');
var restoreMenuItem = menu.querySelector('.zotero-menuitem-restore-to-library');
assert.isFalse(restoreMenuItem.disabled);
await zp.selectItems([item1.id, attachment1.id]);
await zp.buildItemContextMenu();
assert.isFalse(restoreMenuItem.disabled);
});
it("should disable “Restore to Library” when no selected items are in trash", async function () {
var item1 = await createDataObject('item');
var attachment1 = await importFileAttachment('test.png', { parentItemID: item1.id });
attachment1.deleted = true;
await attachment1.saveTx();
var userLibraryID = Zotero.Libraries.userLibraryID;
await zp.collectionsView.selectByID('T' + userLibraryID);
await zp.selectItems([item1.id]);
await zp.buildItemContextMenu();
var menu = win.document.getElementById('zotero-itemmenu');
var restoreMenuItem = menu.querySelector('.zotero-menuitem-restore-to-library');
assert.isTrue(restoreMenuItem.disabled);
});
});
describe("#restoreSelectedItems()", function () {
it("should restore trashed parent and single trashed child when both are selected", async function () {
let item1 = await createDataObject('item', { deleted: true });
let attachment1 = await importFileAttachment('test.png', { parentItemID: item1.id });
attachment1.deleted = true;
await attachment1.saveTx();
var userLibraryID = Zotero.Libraries.userLibraryID;
await zp.collectionsView.selectByID('T' + userLibraryID);
await zp.selectItems([item1.id, attachment1.id]);
await zp.restoreSelectedItems();
assert.isFalse(item1.deleted);
assert.isFalse(attachment1.deleted);
});
it("should restore child when parent and trashed child are selected", async function () {
let item1 = await createDataObject('item', { deleted: false });
let attachment1 = await importFileAttachment('test.png', { parentItemID: item1.id });
attachment1.deleted = true;
await attachment1.saveTx();
var userLibraryID = Zotero.Libraries.userLibraryID;
await zp.collectionsView.selectByID('T' + userLibraryID);
await zp.selectItems([item1.id, attachment1.id]);
await zp.restoreSelectedItems();
assert.isFalse(item1.deleted);
assert.isFalse(attachment1.deleted);
});
it("should restore parent and selected children when parent and some trashed children are selected", async function () {
let item1 = await createDataObject('item', { deleted: false });
let attachment1 = await importFileAttachment('test.png', { parentItemID: item1.id });
let attachment2 = await importFileAttachment('test.png', { parentItemID: item1.id });
attachment1.deleted = true;
await attachment1.saveTx();
attachment2.deleted = true;
await attachment2.saveTx();
var userLibraryID = Zotero.Libraries.userLibraryID;
await zp.collectionsView.selectByID('T' + userLibraryID);
await zp.selectItems([item1.id, attachment1.id]);
await zp.restoreSelectedItems();
assert.isFalse(item1.deleted);
assert.isFalse(attachment1.deleted);
assert.isTrue(attachment2.deleted);
});
it("should restore parent and all children when trashed parent and no children are selected", async function () {
let item1 = await createDataObject('item', { deleted: true });
let attachment1 = await importFileAttachment('test.png', { parentItemID: item1.id });
let attachment2 = await importFileAttachment('test.png', { parentItemID: item1.id });
let attachment3 = await importFileAttachment('test.png', { parentItemID: item1.id });
attachment1.deleted = true;
await attachment1.saveTx();
attachment2.deleted = true;
await attachment2.saveTx();
attachment3.deleted = true;
await attachment3.saveTx();
var userLibraryID = Zotero.Libraries.userLibraryID;
await zp.collectionsView.selectByID('T' + userLibraryID);
await zp.selectItems([item1.id]);
await zp.restoreSelectedItems();
assert.isFalse(item1.deleted);
assert.isFalse(attachment1.deleted);
assert.isFalse(attachment2.deleted);
assert.isFalse(attachment3.deleted);
});
it("should restore parent and selected children when trashed parent and some trashed children are selected", async function () {
let item1 = await createDataObject('item', { deleted: true });
let attachment1 = await importFileAttachment('test.png', { parentItemID: item1.id });
let attachment2 = await importFileAttachment('test.png', { parentItemID: item1.id });
let attachment3 = await importFileAttachment('test.png', { parentItemID: item1.id });
attachment1.deleted = true;
await attachment1.saveTx();
attachment2.deleted = true;
await attachment2.saveTx();
var userLibraryID = Zotero.Libraries.userLibraryID;
await zp.collectionsView.selectByID('T' + userLibraryID);
await zp.selectItems([item1.id, attachment2.id, attachment3.id]);
await zp.restoreSelectedItems();
assert.isFalse(item1.deleted);
assert.isTrue(attachment1.deleted);
assert.isFalse(attachment2.deleted);
assert.isFalse(attachment3.deleted);
});
it("should restore selected children when trashed children and untrashed children are selected", async function () {
let item1 = await createDataObject('item', { deleted: false });
let attachment1 = await importFileAttachment('test.png', { parentItemID: item1.id });
let attachment2 = await importFileAttachment('test.png', { parentItemID: item1.id });
let attachment3 = await importFileAttachment('test.png', { parentItemID: item1.id });
attachment1.deleted = true;
await attachment1.saveTx();
attachment2.deleted = true;
await attachment2.saveTx();
var userLibraryID = Zotero.Libraries.userLibraryID;
await zp.collectionsView.selectByID('T' + userLibraryID);
await zp.selectItems([attachment1.id, attachment2.id, attachment3.id]);
await zp.restoreSelectedItems();
assert.isFalse(item1.deleted);
assert.isFalse(attachment1.deleted);
assert.isFalse(attachment2.deleted);
assert.isFalse(attachment3.deleted);
});
});
})