diff --git a/src/groupdb.js b/src/groupdb.js index 22fecffa5..80eb517cc 100644 --- a/src/groupdb.js +++ b/src/groupdb.js @@ -84,10 +84,14 @@ function del(id, callback) { assert.strictEqual(typeof id, 'string'); assert.strictEqual(typeof callback, 'function'); - database.query('DELETE FROM groups WHERE id = ?', [ id ], function (error, result) { - if (error && error.code === 'ER_ROW_IS_REFERENCED_2') return callback(new DatabaseError(DatabaseError.IN_USE)); + // also cleanup the groupMembers table + var queries = []; + queries.push({ query: 'DELETE FROM groupMembers WHERE groupId = ?', args: [ id ] }); + queries.push({ query: 'DELETE FROM groups WHERE id = ?', args: [ id ] }); + + database.transaction(queries, function (error, result) { if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); - if (result.affectedRows !== 1) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); + if (result[1].affectedRows !== 1) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); callback(error); }); diff --git a/src/test/groups-test.js b/src/test/groups-test.js index e67e4b03d..d1ee438d7 100644 --- a/src/test/groups-test.js +++ b/src/test/groups-test.js @@ -199,13 +199,6 @@ describe('Group membership', function () { }); }); - it('cannot remove group with member', function (done) { - groups.remove(GROUP0_ID, function (error) { - expect(error.reason).to.be(GroupError.NOT_EMPTY); - done(); - }); - }); - it('can remove member', function (done) { groups.removeMember(GROUP0_ID, USER_0.id, function (error) { expect(error).to.be(null); @@ -227,6 +220,21 @@ describe('Group membership', function () { done(); }); }); + + it('can remove group with member', function (done) { + groups.create(GROUP0_NAME, function (error) { + expect(error).to.eql(null); + + groups.addMember(GROUP0_ID, USER_0.id, function (error) { + expect(error).to.be(null); + + groups.remove(GROUP0_ID, function (error) { + expect(error).to.eql(null); + done(); + }); + }); + }); + }); }); describe('Set user groups', function () {