From 4701eb1cee1a35b7f059f4362773bd9d67b7370c Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Fri, 21 Mar 2014 09:27:13 -0400 Subject: [PATCH] updating groups so that members leave a group when it is deleted --- src/groups.js | 3 +++ src/upgrade.js | 3 ++- tests/groups.js | 16 +++++++++++++++- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/groups.js b/src/groups.js index cd9e89c96d..c12deaacd1 100644 --- a/src/groups.js +++ b/src/groups.js @@ -178,6 +178,9 @@ }, function(next) { db.setRemove('groups', groupName, next); + }, + function(next) { + db.delete('group:' + groupName + ':members', next); } ], callback); }; diff --git a/src/upgrade.js b/src/upgrade.js index e8c4332a23..8cfb81ba44 100644 --- a/src/upgrade.js +++ b/src/upgrade.js @@ -433,10 +433,11 @@ Upgrade.upgrade = function(callback) { function(next) { Groups.list({ showAllGroups: true }, function(err, groups) { async.each(groups, function(group, next) { - // If empty, delete group if (group.memberCount === 0) { + // If empty, delete group Groups.destroy(group.name, next); } else if (group.hidden && !isValidHiddenGroup.test(group.name)) { + // If invalidly named hidden group, delete Groups.destroy(group.name, next); } else { next(); diff --git a/tests/groups.js b/tests/groups.js index 8465dcc2d5..349560e2e4 100644 --- a/tests/groups.js +++ b/tests/groups.js @@ -184,6 +184,10 @@ describe('Groups', function() { }); describe('.destroy()', function() { + before(function(done) { + Groups.join('foo', 1, done); + }); + it('should destroy a group', function(done) { Groups.destroy('foo', function(err) { if (err) return done(err); @@ -196,6 +200,16 @@ describe('Groups', function() { }); }); }); + + it('should also remove the members set', function(done) { + db.exists('group:foo:members', function(err, exists) { + if (err) return done(err); + + assert.strictEqual(false, exists); + + done(); + }); + }); }); describe('.join()', function() { @@ -235,7 +249,7 @@ describe('Groups', function() { Groups.leaveAllGroups(1, function(err) { if (err) return done(err); - var groups = ['Test', 'Hidden', 'foo']; + var groups = ['Test', 'Hidden']; async.every(groups, function(group, next) { Groups.isMember(1, group, function(err, isMember) { if (err) done(err);