2015-06-07 19:40:04 +00:00
|
|
|
"use strict";
|
|
|
|
|
|
|
|
describe("Zotero.Group", function () {
|
2015-06-02 04:29:40 +00:00
|
|
|
describe("#constructor()", function() {
|
|
|
|
it("should accept required parameters", function* () {
|
|
|
|
let group = new Zotero.Group();
|
|
|
|
yield assert.isRejected(group.saveTx(), "fails without required parameters");
|
|
|
|
|
|
|
|
let groupID = Zotero.Utilities.rand(10000, 1000000);
|
|
|
|
let groupName = "Test " + Zotero.Utilities.randomString();
|
|
|
|
let groupVersion = Zotero.Utilities.rand(10000, 1000000);
|
|
|
|
group = new Zotero.Group({
|
|
|
|
groupID: groupID,
|
|
|
|
name: groupName,
|
|
|
|
description: "",
|
|
|
|
version:groupVersion,
|
|
|
|
editable: true,
|
|
|
|
filesEditable: true
|
|
|
|
});
|
|
|
|
yield assert.isFulfilled(group.saveTx(), "saves given required parameters");
|
|
|
|
|
|
|
|
assert.isTrue(Zotero.Libraries.exists(group.libraryID));
|
|
|
|
assert.equal(group, Zotero.Groups.get(group.groupID));
|
|
|
|
|
|
|
|
assert.equal(group.name, groupName);
|
|
|
|
assert.equal(group.groupID, groupID);
|
|
|
|
assert.equal(group.version, groupVersion);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe("#version", function() {
|
|
|
|
it("should be settable to increasing values", function() {
|
|
|
|
let library = new Zotero.Group();
|
|
|
|
assert.throws(() => library.version = -1);
|
|
|
|
assert.throws(() => library.version = "a");
|
|
|
|
assert.throws(() => library.version = 1.1);
|
|
|
|
assert.doesNotThrow(() => library.version = 0);
|
|
|
|
assert.doesNotThrow(() => library.version = 5);
|
|
|
|
});
|
|
|
|
it("should not be possible to decrement", function() {
|
|
|
|
let library = new Zotero.Group();
|
|
|
|
library.version = 5;
|
|
|
|
assert.throws(() => library.version = 0);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2015-06-07 19:40:04 +00:00
|
|
|
describe("#erase()", function () {
|
|
|
|
it("should unregister group", function* () {
|
|
|
|
var group = yield createGroup();
|
|
|
|
var id = group.id;
|
2015-06-02 04:29:40 +00:00
|
|
|
yield group.eraseTx();
|
2015-06-07 19:40:04 +00:00
|
|
|
assert.isFalse(Zotero.Groups.exists(id));
|
|
|
|
})
|
2015-06-08 07:01:19 +00:00
|
|
|
|
|
|
|
it("should provide libraryID in extraData", function* () {
|
|
|
|
var group = yield createGroup();
|
|
|
|
var libraryID = group.libraryID;
|
|
|
|
|
|
|
|
var deferred = Zotero.Promise.defer();
|
|
|
|
var observerID = Zotero.Notifier.registerObserver({
|
|
|
|
notify: function (event, type, ids, extraData) {
|
|
|
|
deferred.resolve(extraData[ids[0]]);
|
|
|
|
}
|
|
|
|
}, ['group'], "test");
|
|
|
|
try {
|
|
|
|
yield group.eraseTx();
|
|
|
|
let extraData = yield deferred.promise;
|
|
|
|
assert.equal(extraData.libraryID, libraryID);
|
|
|
|
}
|
|
|
|
finally {
|
|
|
|
Zotero.Notifier.unregisterObserver(observerID);
|
|
|
|
}
|
|
|
|
})
|
2015-06-07 19:40:04 +00:00
|
|
|
})
|
|
|
|
|
|
|
|
describe("#fromJSON()", function () {
|
|
|
|
it("should set permissions for owner", function* () {
|
|
|
|
var group = new Zotero.Group;
|
|
|
|
group.fromJSON({
|
|
|
|
owner: 1,
|
|
|
|
libraryEditing: 'admins',
|
|
|
|
fileEditing: 'admins'
|
|
|
|
}, 1);
|
|
|
|
assert.isTrue(group.editable);
|
|
|
|
assert.isTrue(group.filesEditable);
|
|
|
|
|
|
|
|
var group = new Zotero.Group;
|
|
|
|
group.fromJSON({
|
|
|
|
owner: 1,
|
|
|
|
libraryEditing: 'members',
|
|
|
|
fileEditing: 'members'
|
|
|
|
}, 1);
|
|
|
|
assert.isTrue(group.editable);
|
|
|
|
assert.isTrue(group.filesEditable);
|
|
|
|
|
|
|
|
var group = new Zotero.Group;
|
|
|
|
group.fromJSON({
|
|
|
|
owner: 1,
|
|
|
|
libraryEditing: 'admins',
|
|
|
|
fileEditing: 'none'
|
|
|
|
}, 1);
|
|
|
|
assert.isTrue(group.editable);
|
|
|
|
assert.isFalse(group.filesEditable);
|
|
|
|
})
|
|
|
|
|
|
|
|
it("should set permissions for admin", function* () {
|
|
|
|
var group = new Zotero.Group;
|
|
|
|
group.fromJSON({
|
|
|
|
owner: 1,
|
|
|
|
libraryEditing: 'admins',
|
|
|
|
fileEditing: 'admins',
|
|
|
|
admins: [2]
|
|
|
|
}, 2);
|
|
|
|
assert.isTrue(group.editable);
|
|
|
|
assert.isTrue(group.filesEditable);
|
|
|
|
|
|
|
|
var group = new Zotero.Group;
|
|
|
|
group.fromJSON({
|
|
|
|
owner: 1,
|
|
|
|
libraryEditing: 'members',
|
|
|
|
fileEditing: 'members',
|
|
|
|
admins: [2]
|
|
|
|
}, 2);
|
|
|
|
assert.isTrue(group.editable);
|
|
|
|
assert.isTrue(group.filesEditable);
|
|
|
|
|
|
|
|
var group = new Zotero.Group;
|
|
|
|
group.fromJSON({
|
|
|
|
owner: 1,
|
|
|
|
libraryEditing: 'admins',
|
|
|
|
fileEditing: 'none',
|
|
|
|
admins: [2]
|
|
|
|
}, 2);
|
|
|
|
assert.isTrue(group.editable);
|
|
|
|
assert.isFalse(group.filesEditable);
|
|
|
|
})
|
|
|
|
|
|
|
|
it("should set permissions for member", function* () {
|
|
|
|
var group = new Zotero.Group;
|
|
|
|
group.fromJSON({
|
|
|
|
owner: 1,
|
|
|
|
libraryEditing: 'members',
|
|
|
|
fileEditing: 'members',
|
|
|
|
admins: [2],
|
|
|
|
members: [3]
|
|
|
|
}, 3);
|
|
|
|
assert.isTrue(group.editable);
|
|
|
|
assert.isTrue(group.filesEditable);
|
|
|
|
|
|
|
|
var group = new Zotero.Group;
|
|
|
|
group.fromJSON({
|
|
|
|
owner: 1,
|
|
|
|
libraryEditing: 'admins',
|
|
|
|
fileEditing: 'admins',
|
|
|
|
admins: [2],
|
|
|
|
members: [3]
|
|
|
|
}, 3);
|
|
|
|
assert.isFalse(group.editable);
|
|
|
|
assert.isFalse(group.filesEditable);
|
|
|
|
|
|
|
|
var group = new Zotero.Group;
|
|
|
|
group.fromJSON({
|
|
|
|
owner: 1,
|
|
|
|
libraryEditing: 'admins',
|
|
|
|
fileEditing: 'members', // Shouldn't be possible
|
|
|
|
admins: [2],
|
|
|
|
members: [3]
|
|
|
|
}, 3);
|
|
|
|
assert.isFalse(group.editable);
|
|
|
|
assert.isFalse(group.filesEditable);
|
|
|
|
|
|
|
|
var group = new Zotero.Group;
|
|
|
|
group.fromJSON({
|
|
|
|
owner: 1,
|
|
|
|
libraryEditing: 'members',
|
|
|
|
fileEditing: 'none',
|
2015-06-10 05:14:02 +00:00
|
|
|
// No admins
|
2015-06-07 19:40:04 +00:00
|
|
|
members: [3]
|
|
|
|
}, 3);
|
|
|
|
assert.isTrue(group.editable);
|
|
|
|
assert.isFalse(group.filesEditable);
|
|
|
|
})
|
|
|
|
|
|
|
|
it("should set permissions for non-member", function* () {
|
|
|
|
var group = new Zotero.Group;
|
|
|
|
group.fromJSON({
|
|
|
|
owner: 1,
|
|
|
|
libraryEditing: 'members',
|
|
|
|
fileEditing: 'members',
|
|
|
|
admins: [2],
|
|
|
|
members: [3]
|
|
|
|
});
|
|
|
|
assert.isFalse(group.editable);
|
|
|
|
assert.isFalse(group.filesEditable);
|
|
|
|
})
|
|
|
|
})
|
|
|
|
})
|