diff --git a/src/mailboxdb.js b/src/mailboxdb.js index 5817f6848..847f17b64 100644 --- a/src/mailboxdb.js +++ b/src/mailboxdb.js @@ -134,7 +134,8 @@ function getGroup(name, callback) { if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); if (results.length === 0) return callback(new DatabaseError(DatabaseError.NOT_FOUND)); - database.query('SELECT users.username FROM groupMembers INNER JOIN users ON groupMembers.userId = users.id WHERE groupMembers.groupId = ?', [ results[0].ownerId ], function (error, memberList) { + // username can be null if the user has not signed up with the invite yet + database.query('SELECT users.username FROM groupMembers INNER JOIN users ON groupMembers.userId = users.id WHERE groupMembers.groupId = ? AND users.username IS NOT NULL', [ results[0].ownerId ], function (error, memberList) { if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); results[0].members = memberList.map(function (m) { return m.username; }); diff --git a/src/test/groups-test.js b/src/test/groups-test.js index 5671d4fd1..052fc078d 100644 --- a/src/test/groups-test.js +++ b/src/test/groups-test.js @@ -36,6 +36,19 @@ var USER_0 = { displayName: '' }; +var USER_1 = { // this user has not signed up yet + id: 'uuid222', + username: null, + password: '', + email: 'safe2@me.com', + admin: false, + salt: 'morton', + createdAt: 'sometime back', + modifiedAt: 'now', + resetToken: hat(256), + displayName: '' +}; + function setup(done) { // ensure data/config/mount paths database.initialize(function (error) { @@ -167,7 +180,8 @@ describe('Group membership', function () { next(); }); }, - userdb.add.bind(null, USER_0.id, USER_0) + userdb.add.bind(null, USER_0.id, USER_0), + userdb.add.bind(null, USER_1.id, USER_1) ], done); }); after(cleanup); @@ -201,6 +215,13 @@ describe('Group membership', function () { }); }); + it('can add member without username', function (done) { + groups.addMember(group0Object.id, USER_1.id, function (error) { + expect(error).to.be(null); + done(); + }); + }); + it('isMember returns true', function (done) { groups.isMember(group0Object.id, USER_0.id, function (error, member) { expect(error).to.be(null); @@ -212,8 +233,9 @@ describe('Group membership', function () { it('can get members', function (done) { groups.getMembers(group0Object.id, function (error, result) { expect(error).to.be(null); - expect(result.length).to.be(1); + expect(result.length).to.be(2); expect(result[0]).to.be(USER_0.id); + expect(result[1]).to.be(USER_1.id); done(); }); }); @@ -224,7 +246,7 @@ describe('Group membership', function () { expect(result.name).to.be(GROUP0_NAME.toLowerCase()); expect(result.ownerType).to.be(mailboxdb.TYPE_GROUP); expect(result.ownerId).to.be(group0Object.id); - expect(result.members).to.eql([ USER_0.username ]); + expect(result.members).to.eql([ USER_0.username ]); // filters out users that have not signed up yet done(); }); });