2015-05-04 09:59:40 +00:00
|
|
|
"use strict";
|
|
|
|
|
2015-04-26 06:44:29 +00:00
|
|
|
describe("Zotero.Collection", function() {
|
|
|
|
describe("#save()", function () {
|
|
|
|
it("should save a new collection", function* () {
|
|
|
|
var name = "Test";
|
|
|
|
var collection = new Zotero.Collection;
|
|
|
|
collection.name = name;
|
2015-05-10 08:20:47 +00:00
|
|
|
var id = yield collection.saveTx();
|
2015-05-21 07:19:28 +00:00
|
|
|
assert.equal(collection.name, name);
|
2015-04-26 06:44:29 +00:00
|
|
|
collection = yield Zotero.Collections.getAsync(id);
|
|
|
|
assert.equal(collection.name, name);
|
|
|
|
});
|
|
|
|
})
|
2015-05-04 09:59:40 +00:00
|
|
|
|
|
|
|
describe("#version", function () {
|
|
|
|
it("should set object version", function* () {
|
|
|
|
var version = 100;
|
|
|
|
var collection = new Zotero.Collection
|
|
|
|
collection.version = version;
|
|
|
|
collection.name = "Test";
|
2015-05-10 08:20:47 +00:00
|
|
|
var id = yield collection.saveTx();
|
2015-05-21 07:19:28 +00:00
|
|
|
assert.equal(collection.version, version);
|
2015-05-04 09:59:40 +00:00
|
|
|
collection = yield Zotero.Collections.getAsync(id);
|
|
|
|
assert.equal(collection.version, version);
|
|
|
|
});
|
|
|
|
})
|
|
|
|
|
2015-05-05 18:08:28 +00:00
|
|
|
describe("#parentKey", function () {
|
2015-05-04 09:59:40 +00:00
|
|
|
it("should set parent collection for new collections", function* () {
|
|
|
|
var parentCol = new Zotero.Collection
|
|
|
|
parentCol.name = "Parent";
|
2015-05-10 08:20:47 +00:00
|
|
|
var parentID = yield parentCol.saveTx();
|
2015-05-04 09:59:40 +00:00
|
|
|
var {libraryID, key: parentKey} = Zotero.Collections.getLibraryAndKeyFromID(parentID);
|
|
|
|
|
|
|
|
var col = new Zotero.Collection
|
|
|
|
col.name = "Child";
|
|
|
|
col.parentKey = parentKey;
|
2015-05-10 08:20:47 +00:00
|
|
|
var id = yield col.saveTx();
|
2015-05-21 07:19:28 +00:00
|
|
|
assert.equal(col.parentKey, parentKey);
|
2015-05-04 09:59:40 +00:00
|
|
|
col = yield Zotero.Collections.getAsync(id);
|
|
|
|
assert.equal(col.parentKey, parentKey);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("should change parent collection for existing collections", function* () {
|
|
|
|
// Create initial parent collection
|
|
|
|
var parentCol = new Zotero.Collection
|
|
|
|
parentCol.name = "Parent";
|
2015-05-10 08:20:47 +00:00
|
|
|
var parentID = yield parentCol.saveTx();
|
2015-05-04 09:59:40 +00:00
|
|
|
var {libraryID, key: parentKey} = Zotero.Collections.getLibraryAndKeyFromID(parentID);
|
|
|
|
|
|
|
|
// Create subcollection
|
|
|
|
var col = new Zotero.Collection
|
|
|
|
col.name = "Child";
|
|
|
|
col.parentKey = parentKey;
|
2015-05-10 08:20:47 +00:00
|
|
|
var id = yield col.saveTx();
|
2015-05-04 09:59:40 +00:00
|
|
|
|
|
|
|
// Create new parent collection
|
|
|
|
var newParentCol = new Zotero.Collection
|
|
|
|
newParentCol.name = "New Parent";
|
2015-05-10 08:20:47 +00:00
|
|
|
var newParentID = yield newParentCol.saveTx();
|
2015-05-04 09:59:40 +00:00
|
|
|
var {libraryID, key: newParentKey} = Zotero.Collections.getLibraryAndKeyFromID(newParentID);
|
|
|
|
|
|
|
|
// Change parent collection
|
|
|
|
col.parentKey = newParentKey;
|
2015-05-10 08:20:47 +00:00
|
|
|
yield col.saveTx();
|
2015-05-21 07:19:28 +00:00
|
|
|
assert.equal(col.parentKey, newParentKey);
|
2015-05-04 09:59:40 +00:00
|
|
|
col = yield Zotero.Collections.getAsync(id);
|
|
|
|
assert.equal(col.parentKey, newParentKey);
|
|
|
|
});
|
|
|
|
|
2015-05-05 18:08:28 +00:00
|
|
|
it("should not mark collection as unchanged if set to existing value", function* () {
|
|
|
|
// Create initial parent collection
|
|
|
|
var parentCol = new Zotero.Collection
|
|
|
|
parentCol.name = "Parent";
|
2015-05-10 08:20:47 +00:00
|
|
|
var parentID = yield parentCol.saveTx();
|
2015-05-05 18:08:28 +00:00
|
|
|
var {libraryID, key: parentKey} = Zotero.Collections.getLibraryAndKeyFromID(parentID);
|
|
|
|
|
|
|
|
// Create subcollection
|
|
|
|
var col = new Zotero.Collection
|
|
|
|
col.name = "Child";
|
|
|
|
col.parentKey = parentKey;
|
2015-05-10 08:20:47 +00:00
|
|
|
var id = yield col.saveTx();
|
2015-05-05 18:08:28 +00:00
|
|
|
|
|
|
|
// Set to existing parent
|
|
|
|
col.parentKey = parentKey;
|
|
|
|
assert.isFalse(col.hasChanged());
|
|
|
|
});
|
|
|
|
|
2015-05-04 09:59:40 +00:00
|
|
|
it("should not resave a collection with no parent if set to false", function* () {
|
|
|
|
var col = new Zotero.Collection
|
|
|
|
col.name = "Test";
|
2015-05-10 08:20:47 +00:00
|
|
|
var id = yield col.saveTx();
|
2015-05-04 09:59:40 +00:00
|
|
|
|
|
|
|
col.parentKey = false;
|
2015-05-10 08:20:47 +00:00
|
|
|
var ret = yield col.saveTx();
|
2015-05-04 09:59:40 +00:00
|
|
|
assert.isFalse(ret);
|
|
|
|
});
|
|
|
|
})
|
2015-05-30 22:35:43 +00:00
|
|
|
|
2015-08-08 20:45:51 +00:00
|
|
|
describe("#hasChildCollections()", function () {
|
|
|
|
it("should be false if child made top-level", function* () {
|
|
|
|
var collection1 = yield createDataObject('collection');
|
|
|
|
var collection2 = yield createDataObject('collection', { parentID: collection1.id });
|
|
|
|
|
|
|
|
assert.isTrue(collection1.hasChildCollections());
|
|
|
|
collection2.parentKey = false;
|
|
|
|
yield collection2.saveTx();
|
|
|
|
assert.isFalse(collection1.hasChildCollections());
|
|
|
|
})
|
|
|
|
|
|
|
|
it("should be false if child moved to another collection", function* () {
|
|
|
|
var collection1 = yield createDataObject('collection');
|
|
|
|
var collection2 = yield createDataObject('collection', { parentID: collection1.id });
|
|
|
|
var collection3 = yield createDataObject('collection');
|
|
|
|
|
|
|
|
assert.isTrue(collection1.hasChildCollections());
|
|
|
|
collection2.parentKey = collection3.key;
|
|
|
|
yield collection2.saveTx();
|
|
|
|
assert.isFalse(collection1.hasChildCollections());
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
2015-05-30 22:35:43 +00:00
|
|
|
describe("#getChildCollections()", function () {
|
|
|
|
it("should include child collections", function* () {
|
|
|
|
var collection1 = yield createDataObject('collection');
|
|
|
|
var collection2 = yield createDataObject('collection', { parentID: collection1.id });
|
|
|
|
yield collection1.saveTx();
|
|
|
|
|
|
|
|
yield collection1.loadChildCollections();
|
|
|
|
var childCollections = collection1.getChildCollections();
|
|
|
|
assert.lengthOf(childCollections, 1);
|
|
|
|
assert.equal(childCollections[0].id, collection2.id);
|
|
|
|
})
|
|
|
|
|
|
|
|
it("should not include collections that have been removed", function* () {
|
|
|
|
var collection1 = yield createDataObject('collection');
|
|
|
|
var collection2 = yield createDataObject('collection', { parentID: collection1.id });
|
|
|
|
yield collection1.saveTx();
|
|
|
|
|
|
|
|
yield collection1.loadChildCollections();
|
|
|
|
|
|
|
|
collection2.parentID = false;
|
|
|
|
yield collection2.save()
|
|
|
|
|
|
|
|
var childCollections = collection1.getChildCollections();
|
|
|
|
assert.lengthOf(childCollections, 0);
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
describe("#getChildItems()", function () {
|
|
|
|
it("should include child items", function* () {
|
|
|
|
var collection = yield createDataObject('collection');
|
|
|
|
var item = createUnsavedDataObject('item');
|
|
|
|
item.addToCollection(collection.key);
|
|
|
|
yield item.saveTx();
|
|
|
|
|
|
|
|
yield collection.loadChildItems();
|
|
|
|
assert.lengthOf(collection.getChildItems(), 1);
|
|
|
|
})
|
|
|
|
|
|
|
|
it("should not include items in trash by default", function* () {
|
|
|
|
var collection = yield createDataObject('collection');
|
|
|
|
var item = createUnsavedDataObject('item');
|
|
|
|
item.deleted = true;
|
|
|
|
item.addToCollection(collection.key);
|
|
|
|
yield item.saveTx();
|
|
|
|
|
|
|
|
yield collection.loadChildItems();
|
|
|
|
assert.lengthOf(collection.getChildItems(), 0);
|
|
|
|
})
|
|
|
|
|
|
|
|
it("should include items in trash if includeTrashed=true", function* () {
|
|
|
|
var collection = yield createDataObject('collection');
|
|
|
|
var item = createUnsavedDataObject('item');
|
|
|
|
item.deleted = true;
|
|
|
|
item.addToCollection(collection.key);
|
|
|
|
yield item.saveTx();
|
|
|
|
|
|
|
|
yield collection.loadChildItems();
|
|
|
|
assert.lengthOf(collection.getChildItems(false, true), 1);
|
|
|
|
})
|
|
|
|
})
|
2015-04-26 06:44:29 +00:00
|
|
|
})
|