zotero/test/tests/groupTest.js

198 lines
5.1 KiB
JavaScript
Raw Normal View History

"use strict";
describe("Zotero.Group", function () {
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);
});
});
describe("#erase()", function () {
it("should unregister group", function* () {
var group = yield createGroup();
var id = group.id;
yield group.eraseTx();
assert.isFalse(Zotero.Groups.exists(id));
})
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);
}
})
})
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',
// No admins
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);
})
})
})