Remove items from trash and My Publications when removed via sync
Zotero.Item::fromJSON() wasn't properly accounting for missing 'deleted' or 'inPublications' properties.
This commit is contained in:
parent
4248e59eeb
commit
6f1833f936
2 changed files with 52 additions and 12 deletions
|
@ -4224,15 +4224,6 @@ Zotero.Item.prototype.fromJSON = function (json) {
|
|||
this[field] = val;
|
||||
break;
|
||||
|
||||
case 'parentItem':
|
||||
this.parentKey = val;
|
||||
break;
|
||||
|
||||
case 'deleted':
|
||||
case 'inPublications':
|
||||
this[field] = !!val;
|
||||
break;
|
||||
|
||||
case 'creators':
|
||||
this.setCreators(json.creators);
|
||||
break;
|
||||
|
@ -4320,6 +4311,13 @@ Zotero.Item.prototype.fromJSON = function (json) {
|
|||
let note = json.note;
|
||||
this.setNote(note !== undefined ? note : "");
|
||||
}
|
||||
|
||||
// Update boolean fields that might not be present in JSON
|
||||
['deleted', 'inPublications'].forEach(field => {
|
||||
if (json[field] || this[field]) {
|
||||
this[field] = !!json[field];
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1616,20 +1616,62 @@ describe("Zotero.Item", function () {
|
|||
assert.strictEqual(item.getField('accessDate'), '');
|
||||
});
|
||||
|
||||
it("should remove child item from collection if 'collections' property not provided", function* () {
|
||||
it("should remove item from collection if 'collections' property not provided", function* () {
|
||||
var collection = yield createDataObject('collection');
|
||||
// Create standalone attachment in collection
|
||||
var attachment = yield importFileAttachment('test.png', { collections: [collection.id] });
|
||||
var item = yield createDataObject('item', { collections: [collection.id] });
|
||||
|
||||
assert.isTrue(collection.hasItem(attachment.id));
|
||||
var json = attachment.toJSON();
|
||||
json.path = 'storage:test2.png';
|
||||
// Add to parent, which implicitly removes from collection
|
||||
json.parentItem = item.key;
|
||||
delete json.collections;
|
||||
Zotero.debug(json);
|
||||
attachment.fromJSON(json);
|
||||
yield attachment.save();
|
||||
yield attachment.saveTx();
|
||||
assert.isFalse(collection.hasItem(attachment.id));
|
||||
});
|
||||
|
||||
it("should remove child item from parent if 'parentKey' property not provided", async function () {
|
||||
var item = await createDataObject('item');
|
||||
var note = await createDataObject('item', { itemType: 'note', parentKey: [item.key] });
|
||||
|
||||
var json = note.toJSON();
|
||||
delete json.parentItem;
|
||||
|
||||
note.fromJSON(json);
|
||||
await note.saveTx();
|
||||
|
||||
assert.lengthOf(item.getNotes(), 0);
|
||||
});
|
||||
|
||||
it("should remove item from trash if 'deleted' property not provided", async function () {
|
||||
var item = await createDataObject('item', { deleted: true });
|
||||
|
||||
assert.isTrue(item.deleted);
|
||||
|
||||
var json = item.toJSON();
|
||||
delete json.deleted;
|
||||
|
||||
item.fromJSON(json);
|
||||
await item.saveTx();
|
||||
|
||||
assert.isFalse(item.deleted);
|
||||
});
|
||||
|
||||
it("should remove item from My Publications if 'inPublications' property not provided", async function () {
|
||||
var item = await createDataObject('item', { inPublications: true });
|
||||
|
||||
assert.isTrue(item.inPublications);
|
||||
|
||||
var json = item.toJSON();
|
||||
delete json.inPublications;
|
||||
|
||||
item.fromJSON(json);
|
||||
await item.saveTx();
|
||||
|
||||
assert.isFalse(item.inPublications);
|
||||
});
|
||||
|
||||
it("should ignore unknown fields", function* () {
|
||||
|
|
Loading…
Reference in a new issue