ab4138cf26
Return false for single ids or skip for multiple ids. This is the original behavior, but at some point it started throwing an UnloadedDataException. IDs are always loaded at initialization, though, so we know whether the objects actually exist.
130 lines
3.7 KiB
JavaScript
130 lines
3.7 KiB
JavaScript
"use strict";
|
|
|
|
describe("Zotero.DataObjects", function () {
|
|
var types = ['collection', 'item', 'search'];
|
|
|
|
describe("#get()", function () {
|
|
it("should return false for nonexistent objects", function* () {
|
|
assert.isFalse(Zotero.Items.get(3464363));
|
|
});
|
|
});
|
|
|
|
describe("#getLibraryAndKeyFromID()", function () {
|
|
it("should return a libraryID and key within a transaction", function* () {
|
|
for (let type of types) {
|
|
let objectsClass = Zotero.DataObjectUtilities.getObjectsClassForObjectType(type);
|
|
yield Zotero.DB.executeTransaction(function* () {
|
|
let obj = createUnsavedDataObject(type);
|
|
yield obj.save();
|
|
|
|
var {libraryID, key} = objectsClass.getLibraryAndKeyFromID(obj.id);
|
|
assert.equal(libraryID, Zotero.Libraries.userLibraryID);
|
|
assert.ok(key);
|
|
assert.typeOf(key, 'string');
|
|
assert.equal(key, obj.key);
|
|
|
|
yield obj.erase();
|
|
});
|
|
}
|
|
});
|
|
|
|
it("should return false after a save failure", function* () {
|
|
for (let type of types) {
|
|
let objectsClass = Zotero.DataObjectUtilities.getObjectsClassForObjectType(type);
|
|
var obj;
|
|
try {
|
|
yield Zotero.DB.executeTransaction(function* () {
|
|
obj = createUnsavedDataObject(type);
|
|
yield obj.save();
|
|
throw 'Aborting transaction -- ignore';
|
|
});
|
|
}
|
|
catch (e) {
|
|
if (typeof e != 'string' || !e.startsWith('Aborting transaction')) throw e;
|
|
}
|
|
|
|
// The registered identifiers should be reset in a rollback handler
|
|
var libraryKey = objectsClass.getLibraryAndKeyFromID(obj.id);
|
|
assert.isFalse(libraryKey);
|
|
}
|
|
});
|
|
})
|
|
|
|
describe("#exists()", function () {
|
|
it("should return false after object is deleted", function* () {
|
|
for (let type of types) {
|
|
let objectsClass = Zotero.DataObjectUtilities.getObjectsClassForObjectType(type);
|
|
let obj = yield createDataObject(type);
|
|
let id = obj.id;
|
|
yield obj.eraseTx();
|
|
assert.isFalse(objectsClass.exists(id), type + " does not exist");
|
|
}
|
|
})
|
|
})
|
|
|
|
describe("#_setIdentifier", function () {
|
|
it("should not allow an id change", function* () {
|
|
var item = yield createDataObject('item');
|
|
try {
|
|
item.id = item.id + 1;
|
|
}
|
|
catch (e) {
|
|
assert.equal(e.message, "ID cannot be changed");
|
|
return;
|
|
}
|
|
assert.fail("ID change allowed");
|
|
})
|
|
|
|
it("should not allow a key change", function* () {
|
|
var item = yield createDataObject('item');
|
|
try {
|
|
item.key = Zotero.DataObjectUtilities.generateKey();
|
|
}
|
|
catch (e) {
|
|
assert.equal(e.message, "Key cannot be changed");
|
|
return;
|
|
}
|
|
assert.fail("Key change allowed");
|
|
})
|
|
|
|
it("should not allow key to be set if id is set", function* () {
|
|
var item = createUnsavedDataObject('item');
|
|
item.id = Zotero.Utilities.rand(100000, 1000000);
|
|
try {
|
|
item.libraryID = Zotero.Libraries.userLibraryID;
|
|
item.key = Zotero.DataObjectUtilities.generateKey();
|
|
}
|
|
catch (e) {
|
|
assert.equal(e.message, "Cannot set key if id is already set");
|
|
return;
|
|
}
|
|
assert.fail("ID change allowed");
|
|
})
|
|
|
|
it("should not allow id to be set if key is set", function* () {
|
|
var item = createUnsavedDataObject('item');
|
|
item.libraryID = Zotero.Libraries.userLibraryID;
|
|
item.key = Zotero.DataObjectUtilities.generateKey();
|
|
try {
|
|
item.id = Zotero.Utilities.rand(100000, 1000000);
|
|
}
|
|
catch (e) {
|
|
assert.equal(e.message, "Cannot set id if key is already set");
|
|
return;
|
|
}
|
|
assert.fail("Key change allowed");
|
|
})
|
|
|
|
it("should not allow key to be set if library isn't set", function* () {
|
|
var item = createUnsavedDataObject('item');
|
|
try {
|
|
item.key = Zotero.DataObjectUtilities.generateKey();
|
|
}
|
|
catch (e) {
|
|
assert.equal(e.message, "libraryID must be set before key");
|
|
return;
|
|
}
|
|
assert.fail("libraryID change allowed");
|
|
})
|
|
})
|
|
})
|