a3f4fe181f
- Moved ::_get() and _set() from Collection/Search into DataObject, and disabled in Item - Don't disable new items after save. We now put new objects into the DataObjects cache from save() so that changes made post-save are picked up by other code using .get(). - Added 'skipCache' save() option to avoid reloading data on new objects and adding them to the cache. (This will be used in syncing, where objects might be in another library where they're not needed right away.) Objects created with this option are instead disabled to prevent reuse. - Modified some tests to try to make sure we're reloading everything properly after a save. - Documented save() options
129 lines
3.7 KiB
JavaScript
129 lines
3.7 KiB
JavaScript
"use strict";
|
|
|
|
describe("Zotero.DataObject", function() {
|
|
var types = ['collection', 'item', 'search'];
|
|
|
|
describe("#loadAllData()", function () {
|
|
it("should load data on a regular item", function* () {
|
|
var item = new Zotero.Item('book');
|
|
var id = yield item.saveTx();
|
|
yield item.loadAllData();
|
|
assert.throws(item.getNote.bind(item), 'getNote() can only be called on notes and attachments');
|
|
})
|
|
|
|
it("should load data on an attachment item", function* () {
|
|
var item = new Zotero.Item('attachment');
|
|
var id = yield item.saveTx();
|
|
yield item.loadAllData();
|
|
assert.equal(item.getNote(), '');
|
|
})
|
|
|
|
it("should load data on a note item", function* () {
|
|
var item = new Zotero.Item('note');
|
|
var id = yield item.saveTx();
|
|
yield item.loadAllData();
|
|
assert.equal(item.getNote(), '');
|
|
})
|
|
})
|
|
|
|
describe("#version", function () {
|
|
it("should be set to 0 after creating object", function* () {
|
|
for (let type of types) {
|
|
let obj = yield createDataObject(type);
|
|
assert.equal(obj.version, 0);
|
|
yield obj.eraseTx();
|
|
}
|
|
})
|
|
|
|
it("should be set after creating object", function* () {
|
|
for (let type of types) {
|
|
Zotero.logError(type);
|
|
let obj = yield createDataObject(type, { version: 1234 });
|
|
assert.equal(obj.version, 1234, type + " version mismatch");
|
|
yield obj.eraseTx();
|
|
}
|
|
})
|
|
})
|
|
|
|
describe("#synced", function () {
|
|
it("should be set to false after creating item", function* () {
|
|
var item = new Zotero.Item("book");
|
|
var id = yield item.saveTx();
|
|
assert.isFalse(item.synced);
|
|
item.eraseTx();
|
|
});
|
|
|
|
it("should be set to true when changed", function* () {
|
|
var item = new Zotero.Item("book");
|
|
var id = yield item.saveTx();
|
|
|
|
item.synced = 1;
|
|
yield item.saveTx();
|
|
assert.ok(item.synced);
|
|
|
|
item.eraseTx();
|
|
});
|
|
|
|
it("should be set to false after modifying item", function* () {
|
|
var item = new Zotero.Item("book");
|
|
var id = yield item.saveTx();
|
|
|
|
item.synced = 1;
|
|
yield item.saveTx();
|
|
|
|
yield item.loadItemData();
|
|
item.setField('title', 'test');
|
|
yield item.saveTx();
|
|
assert.isFalse(item.synced);
|
|
|
|
item.eraseTx();
|
|
});
|
|
|
|
it("should be unchanged if skipSyncedUpdate passed", function* () {
|
|
var item = new Zotero.Item("book");
|
|
var id = yield item.saveTx();
|
|
|
|
item.synced = 1;
|
|
yield item.saveTx();
|
|
|
|
yield item.loadItemData();
|
|
item.setField('title', 'test');
|
|
yield item.saveTx({
|
|
skipSyncedUpdate: true
|
|
});
|
|
assert.ok(item.synced);
|
|
|
|
item.eraseTx();
|
|
});
|
|
})
|
|
|
|
describe("#save()", function () {
|
|
it("should add new identifiers to cache", function* () {
|
|
// Collection
|
|
var objectsClass = Zotero.DataObjectUtilities.getObjectsClassForObjectType('collection');
|
|
var obj = new Zotero.Collection;
|
|
obj.name = "Test";
|
|
var id = yield obj.saveTx();
|
|
var { libraryID, key } = objectsClass.getLibraryAndKeyFromID(id);
|
|
assert.typeOf(key, 'string');
|
|
assert.equal(objectsClass.getIDFromLibraryAndKey(libraryID, key), id);
|
|
|
|
// Search
|
|
var objectsClass = Zotero.DataObjectUtilities.getObjectsClassForObjectType('search');
|
|
var obj = new Zotero.Search;
|
|
obj.name = "Test";
|
|
var id = yield obj.saveTx();
|
|
var { libraryID, key } = objectsClass.getLibraryAndKeyFromID(id);
|
|
assert.typeOf(key, 'string');
|
|
assert.equal(objectsClass.getIDFromLibraryAndKey(libraryID, key), id);
|
|
|
|
// Item
|
|
var objectsClass = Zotero.DataObjectUtilities.getObjectsClassForObjectType('item');
|
|
var obj = new Zotero.Item('book');
|
|
var id = yield obj.saveTx();
|
|
var { libraryID, key } = objectsClass.getLibraryAndKeyFromID(id);
|
|
assert.typeOf(key, 'string');
|
|
assert.equal(objectsClass.getIDFromLibraryAndKey(libraryID, key), id);
|
|
})
|
|
})
|
|
})
|