diff --git a/src/groupdb.js b/src/groupdb.js index 1f246467d..82690a220 100644 --- a/src/groupdb.js +++ b/src/groupdb.js @@ -9,6 +9,7 @@ exports = module.exports = { getMembers: getMembers, addMember: addMember, removeMember: removeMember, + isMember: isMember, _clear: clear }; @@ -116,3 +117,15 @@ function removeMember(groupId, userId, callback) { callback(null); }); } + +function isMember(groupId, userId, callback) { + assert.strictEqual(typeof groupId, 'string'); + assert.strictEqual(typeof userId, 'string'); + assert.strictEqual(typeof callback, 'function'); + + database.query('SELECT 1 FROM groupMembers WHERE groupId=? AND userId=?', [ groupId, userId ], function (error, result) { + if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); + + callback(null, result.length !== 0); + }); +} diff --git a/src/groups.js b/src/groups.js index 682398913..f3bb3f645 100644 --- a/src/groups.js +++ b/src/groups.js @@ -11,7 +11,8 @@ exports = module.exports = { getMembers: getMembers, addMember: addMember, - removeMember: removeMember + removeMember: removeMember, + isMember: isMember }; var assert = require('assert'), @@ -134,3 +135,16 @@ function removeMember(groupId, userId, callback) { return callback(null); }); } + +function isMember(groupId, userId, callback) { + assert.strictEqual(typeof groupId, 'string'); + assert.strictEqual(typeof userId, 'string'); + assert.strictEqual(typeof callback, 'function'); + + groupdb.isMember(groupId, userId, function (error, result) { + if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new GroupError(GroupError.NOT_FOUND)); + if (error) return callback(new GroupError(GroupError.INTERNAL_ERROR, error)); + + return callback(null, result); + }); +} diff --git a/src/test/group-test.js b/src/test/group-test.js index a37d21b86..9568caf57 100644 --- a/src/test/group-test.js +++ b/src/test/group-test.js @@ -136,6 +136,14 @@ describe('Group membership', function () { }); }); + it('isMember returns false', function (done) { + groups.isMember(GROUP_ID, USER_0.id, function (error, member) { + expect(error).to.be(null); + expect(member).to.be(false); + done(); + }); + }); + it('can add member', function (done) { groups.addMember(GROUP_ID, USER_0.id, function (error) { expect(error).to.be(null); @@ -143,6 +151,14 @@ describe('Group membership', function () { }); }); + it('isMember returns true', function (done) { + groups.isMember(GROUP_ID, USER_0.id, function (error, member) { + expect(error).to.be(null); + expect(member).to.be(true); + done(); + }); + }); + it('can get members', function (done) { groups.getMembers(GROUP_ID, function (error, result) { expect(error).to.be(null);