From dff4ee767c9b8b2a292fe7133b175230e85fdb9d Mon Sep 17 00:00:00 2001 From: barisusakli Date: Sat, 26 Nov 2016 12:03:21 +0300 Subject: [PATCH] more group tests --- src/groups/update.js | 56 ++++++++++---------- test/groups.js | 122 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 150 insertions(+), 28 deletions(-) diff --git a/src/groups/update.js b/src/groups/update.js index fa998bafe6..01bbd54974 100644 --- a/src/groups/update.js +++ b/src/groups/update.js @@ -12,45 +12,48 @@ module.exports = function (Groups) { Groups.update = function (groupName, values, callback) { callback = callback || function () {}; - db.exists('group:' + groupName, function (err, exists) { - if (err || !exists) { - return callback(err || new Error('[[error:no-group]]')); - } - plugins.fireHook('filter:group.update', { - groupName: groupName, - values: values - }, function (err) { - if (err) { - return callback(err); + async.waterfall([ + function (next) { + db.exists('group:' + groupName, next); + }, + function (exists, next) { + if (!exists) { + return next(new Error('[[error:no-group]]')); } + plugins.fireHook('filter:group.update', { + groupName: groupName, + values: values + }, next); + }, + function (result, next) { + values = result.values; var payload = { description: values.description || '', icon: values.icon || '', labelColor: values.labelColor || '#000000' }; - + if (values.hasOwnProperty('userTitle')) { payload.userTitle = values.userTitle || ''; } - + if (values.hasOwnProperty('userTitleEnabled')) { payload.userTitleEnabled = values.userTitleEnabled ? '1' : '0'; } - + if (values.hasOwnProperty('hidden')) { payload.hidden = values.hidden ? '1' : '0'; } - + if (values.hasOwnProperty('private')) { payload.private = values.private ? '1' : '0'; } - + if (values.hasOwnProperty('disableJoinRequests')) { payload.disableJoinRequests = values.disableJoinRequests ? '1' : '0'; } - async.series([ async.apply(checkNameChange, groupName, values.name), async.apply(updatePrivacy, groupName, values.private), @@ -63,19 +66,16 @@ module.exports = function (Groups) { }, async.apply(db.setObject, 'group:' + groupName, payload), async.apply(renameGroup, groupName, values.name) - ], function (err) { - if (err) { - return callback(err); - } - - plugins.fireHook('action:group.update', { - name: groupName, - values: values - }); - callback(); + ], next); + }, + function (result, next) { + plugins.fireHook('action:group.update', { + name: groupName, + values: values }); - }); - }); + next(); + } + ], callback); }; function updateVisibility(groupName, hidden, callback) { diff --git a/test/groups.js b/test/groups.js index 6a71933fb7..122645cc2b 100644 --- a/test/groups.js +++ b/test/groups.js @@ -504,6 +504,128 @@ describe('Groups', function () { }); + describe('admin socket methods', function () { + var socketGroups = require('../src/socket.io/admin/groups'); + + it('should fail to create group with invalid data', function (done) { + socketGroups.create({uid: adminUid}, null, function (err) { + assert.equal(err.message, '[[error:invalid-data]]'); + done(); + }); + }); + + it('should fail to create group if group name is privilege group', function (done) { + socketGroups.create({uid: adminUid}, {name: 'cid:1:privileges:read'}, function (err) { + assert.equal(err.message, '[[error:invalid-group-name]]'); + done(); + }); + }); + + it('should create a group', function (done) { + socketGroups.create({uid: adminUid}, {name: 'newgroup', description: 'group created by admin'}, function (err, groupData) { + assert.ifError(err); + assert.equal(groupData.name, 'newgroup'); + assert.equal(groupData.description, 'group created by admin'); + assert.equal(groupData.ownerUid, adminUid); + assert.equal(groupData.private, true); + assert.equal(groupData.memberCount, 1); + done(); + }); + }); + + it('should fail to join with invalid data', function (done) { + socketGroups.join({uid: adminUid}, null, function (err) { + assert.equal(err.message, '[[error:invalid-data]]'); + done(); + }); + }); + + it('should add user to group', function (done) { + socketGroups.join({uid: adminUid}, {uid: testUid, groupName: 'newgroup'}, function (err) { + assert.ifError(err); + Groups.isMember(testUid, 'newgroup', function (err, isMember) { + assert.ifError(err); + assert(isMember); + done(); + }); + }); + }); + + it('should fail to if user is already member', function (done) { + socketGroups.join({uid: adminUid}, {uid: testUid, groupName: 'newgroup'}, function (err) { + assert.equal(err.message, '[[error:group-already-member]]'); + done(); + }); + }); + + it('it should fail with invalid data', function (done) { + socketGroups.leave({uid: adminUid}, null, function (err) { + assert.equal(err.message, '[[error:invalid-data]]'); + done(); + }); + }); + + it('it should fail if admin tries to remove self', function (done) { + socketGroups.leave({uid: adminUid}, {uid: adminUid, groupName: 'administrators'}, function (err) { + assert.equal(err.message, '[[error:cant-remove-self-as-admin]]'); + done(); + }); + }); + + it('should fail if user is not member', function (done) { + socketGroups.leave({uid: adminUid}, {uid: 3, groupName: 'newgroup'}, function (err) { + assert.equal(err.message, '[[error:group-not-member]]'); + done(); + }); + }); + + it('should remove user from group', function (done) { + socketGroups.leave({uid: adminUid}, {uid: testUid, groupName: 'newgroup'}, function (err) { + assert.ifError(err); + Groups.isMember(testUid, 'newgroup', function (err, isMember) { + assert.ifError(err); + assert(!isMember); + done(); + }); + }); + }); + + it('should fail with invalid data', function (done) { + socketGroups.update({uid: adminUid}, null, function (err) { + assert.equal(err.message, '[[error:invalid-data]]'); + done(); + }); + }); + + it('should update group', function (done) { + var data = { + groupName: 'newgroup', + values: { + name: 'renamedgroup', + description: 'cat group', + userTitle: 'cats', + userTitleEnabled: 1, + disableJoinRequests: 1, + hidden: 1, + private: 0 + } + }; + socketGroups.update({uid: adminUid}, data, function (err) { + assert.ifError(err); + Groups.get('renamedgroup', {}, function (err, groupData) { + assert.ifError(err); + assert.equal(groupData.name, 'renamedgroup'); + assert.equal(groupData.userTitle, 'cats'); + assert.equal(groupData.description, 'cat group'); + assert.equal(groupData.hidden, true); + assert.equal(groupData.disableJoinRequests, true); + assert.equal(groupData.private, false); + done(); + }); + }); + }); + }); + after(function (done) { db.emptydb(done); });