groupTest.js (5182B)
1 "use strict"; 2 3 describe("Zotero.Group", function () { 4 describe("#constructor()", function() { 5 it("should accept required parameters", function* () { 6 let group = new Zotero.Group(); 7 yield assert.isRejected(group.saveTx()); // fails without required parameters 8 9 let groupID = Zotero.Utilities.rand(10000, 1000000); 10 let groupName = "Test " + Zotero.Utilities.randomString(); 11 let groupVersion = Zotero.Utilities.rand(10000, 1000000); 12 group = new Zotero.Group({ 13 groupID: groupID, 14 name: groupName, 15 description: "", 16 version:groupVersion, 17 editable: true, 18 filesEditable: true 19 }); 20 yield assert.isFulfilled(group.saveTx(), "saves given required parameters"); 21 22 assert.isTrue(Zotero.Libraries.exists(group.libraryID)); 23 assert.equal(group, Zotero.Groups.get(group.groupID)); 24 25 assert.equal(group.name, groupName); 26 assert.equal(group.groupID, groupID); 27 assert.equal(group.version, groupVersion); 28 }); 29 }); 30 31 describe("#version", function() { 32 it("should be settable to increasing values", function() { 33 let library = new Zotero.Group(); 34 assert.throws(() => library.version = -1); 35 assert.throws(() => library.version = "a"); 36 assert.throws(() => library.version = 1.1); 37 assert.doesNotThrow(() => library.version = 0); 38 assert.doesNotThrow(() => library.version = 5); 39 }); 40 it("should not be possible to decrement", function() { 41 let library = new Zotero.Group(); 42 library.version = 5; 43 assert.throws(() => library.version = 0); 44 }); 45 }); 46 47 describe("#erase()", function () { 48 it("should unregister group", function* () { 49 var group = yield createGroup(); 50 var id = group.id; 51 yield group.eraseTx(); 52 assert.isFalse(Zotero.Groups.exists(id)); 53 }) 54 55 it("should provide libraryID in extraData", function* () { 56 var group = yield createGroup(); 57 var libraryID = group.libraryID; 58 59 var deferred = Zotero.Promise.defer(); 60 var observerID = Zotero.Notifier.registerObserver({ 61 notify: function (event, type, ids, extraData) { 62 deferred.resolve(extraData[ids[0]]); 63 } 64 }, ['group'], "test"); 65 try { 66 yield group.eraseTx(); 67 let extraData = yield deferred.promise; 68 assert.equal(extraData.libraryID, libraryID); 69 } 70 finally { 71 Zotero.Notifier.unregisterObserver(observerID); 72 } 73 }) 74 }) 75 76 describe("#fromJSON()", function () { 77 it("should set permissions for owner", function* () { 78 var group = new Zotero.Group; 79 group.fromJSON({ 80 owner: 1, 81 libraryEditing: 'admins', 82 fileEditing: 'admins' 83 }, 1); 84 assert.isTrue(group.editable); 85 assert.isTrue(group.filesEditable); 86 87 var group = new Zotero.Group; 88 group.fromJSON({ 89 owner: 1, 90 libraryEditing: 'members', 91 fileEditing: 'members' 92 }, 1); 93 assert.isTrue(group.editable); 94 assert.isTrue(group.filesEditable); 95 96 var group = new Zotero.Group; 97 group.fromJSON({ 98 owner: 1, 99 libraryEditing: 'admins', 100 fileEditing: 'none' 101 }, 1); 102 assert.isTrue(group.editable); 103 assert.isFalse(group.filesEditable); 104 }) 105 106 it("should set permissions for admin", function* () { 107 var group = new Zotero.Group; 108 group.fromJSON({ 109 owner: 1, 110 libraryEditing: 'admins', 111 fileEditing: 'admins', 112 admins: [2] 113 }, 2); 114 assert.isTrue(group.editable); 115 assert.isTrue(group.filesEditable); 116 117 var group = new Zotero.Group; 118 group.fromJSON({ 119 owner: 1, 120 libraryEditing: 'members', 121 fileEditing: 'members', 122 admins: [2] 123 }, 2); 124 assert.isTrue(group.editable); 125 assert.isTrue(group.filesEditable); 126 127 var group = new Zotero.Group; 128 group.fromJSON({ 129 owner: 1, 130 libraryEditing: 'admins', 131 fileEditing: 'none', 132 admins: [2] 133 }, 2); 134 assert.isTrue(group.editable); 135 assert.isFalse(group.filesEditable); 136 }) 137 138 it("should set permissions for member", function* () { 139 var group = new Zotero.Group; 140 group.fromJSON({ 141 owner: 1, 142 libraryEditing: 'members', 143 fileEditing: 'members', 144 admins: [2], 145 members: [3] 146 }, 3); 147 assert.isTrue(group.editable); 148 assert.isTrue(group.filesEditable); 149 150 var group = new Zotero.Group; 151 group.fromJSON({ 152 owner: 1, 153 libraryEditing: 'admins', 154 fileEditing: 'admins', 155 admins: [2], 156 members: [3] 157 }, 3); 158 assert.isFalse(group.editable); 159 assert.isFalse(group.filesEditable); 160 161 var group = new Zotero.Group; 162 group.fromJSON({ 163 owner: 1, 164 libraryEditing: 'admins', 165 fileEditing: 'members', // Shouldn't be possible 166 admins: [2], 167 members: [3] 168 }, 3); 169 assert.isFalse(group.editable); 170 assert.isFalse(group.filesEditable); 171 172 var group = new Zotero.Group; 173 group.fromJSON({ 174 owner: 1, 175 libraryEditing: 'members', 176 fileEditing: 'none', 177 // No admins 178 members: [3] 179 }, 3); 180 assert.isTrue(group.editable); 181 assert.isFalse(group.filesEditable); 182 }) 183 184 it("should set permissions for non-member", function* () { 185 var group = new Zotero.Group; 186 group.fromJSON({ 187 owner: 1, 188 libraryEditing: 'members', 189 fileEditing: 'members', 190 admins: [2], 191 members: [3] 192 }); 193 assert.isFalse(group.editable); 194 assert.isFalse(group.filesEditable); 195 }) 196 }) 197 })