From b60e0a4c64b22063990c3a5435929f4d8ff44c8c Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Sun, 17 Jan 2016 13:32:31 -0600 Subject: [PATCH 1/3] Added initial get groups tests --- .../v3/integration/groups/GET-groups.test.js | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 test/api/v3/integration/groups/GET-groups.test.js diff --git a/test/api/v3/integration/groups/GET-groups.test.js b/test/api/v3/integration/groups/GET-groups.test.js new file mode 100644 index 0000000000..7f86480187 --- /dev/null +++ b/test/api/v3/integration/groups/GET-groups.test.js @@ -0,0 +1,99 @@ +import { + generateUser, + resetHabiticaDB, + generateGroup, +} from '../../../../helpers/api-v3-integration.helper'; + +describe('GET /groups', () => { + let user; + const NUMBER_OF_PUBLIC_GUILDS = 3; + const NUMBER_OF_USERS_PRIVATE_GUILDS = 1; + const NUMBER_OF_GROUPS_USER_CAN_VIEW = 5; + + before(async () => { + await resetHabiticaDB(); + + let leader = await generateUser({ balance: 10 }); + user = await generateUser({balance: 4}); + + let publicGuildUserIsMemberOf = await generateGroup(leader, { + name: 'public guild - is member', + type: 'guild', + privacy: 'public', + }); + await leader.post(`/groups/${publicGuildUserIsMemberOf._id}/invite`, { uuids: [user._id]}); + await user.post(`/groups/${publicGuildUserIsMemberOf._id}/join`); + + await generateGroup(leader, { + name: 'public guild - is not member', + type: 'guild', + privacy: 'public', + }); + + let privateGuildUserIsMemberOf = await generateGroup(leader, { + name: 'private guild - is member', + type: 'guild', + privacy: 'private', + }); + await leader.post(`/groups/${privateGuildUserIsMemberOf._id}/invite`, { uuids: [user._id]}); + await user.post(`/groups/${privateGuildUserIsMemberOf._id}/join`); + + await generateGroup(leader, { + name: 'private guild - is not member', + type: 'guild', + privacy: 'private', + }); + + await generateGroup(leader, { + name: 'party - is not member', + type: 'party', + privacy: 'private', + }); + + await user.post('/groups', { + name: 'party - is member', + type: 'party', + privacy: 'private', + }); + }); + + it('returns error when no query passed in', async () => { + await expect(user.get('/groups')) + .to.eventually.be.rejected.and.eql({ + code: 400, + error: 'BadRequest', + message: 'Invalid request parameters.', + }); + }); + + it('returns only the tavern when tavern passed in as query', async () => { + await expect(user.get('/groups?type=tavern')) + .to.eventually.have.a.lengthOf(1) + .and.to.have.deep.property('[0]') + .and.to.have.property('_id', 'habitrpg'); + }); + + it('returns only the user\'s party when party passed in as query', async () => { + await expect(user.get('/groups?type=party')) + .to.eventually.have.a.lengthOf(1) + .and.to.have.deep.property('[0]') + .and.to.have.property('leader', user._id); + }); + + it('returns all public guilds when publicGuilds passed in as query', async () => { + await expect(user.get('/groups?type=publicGuilds')) + .to.eventually.have.a.lengthOf(NUMBER_OF_PUBLIC_GUILDS); + }); + + it('returns all private guilds user is a part of when privateGuilds passed in as query', async () => { + await expect(user.get('/groups?type=privateGuilds')) + .to.eventually.have.a.lengthOf(NUMBER_OF_USERS_PRIVATE_GUILDS); + }); + + it('returns a list of groups user has access to', async () => { + let groups = await user.get('/groups?type=privateGuilds,publicGuilds,party'); + + await expect(groups.length) + .to.eql(NUMBER_OF_GROUPS_USER_CAN_VIEW); + }); +}); From c5947ca9c4a719f133ab7213a45d4dc226d47d8c Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Sun, 17 Jan 2016 14:20:51 -0600 Subject: [PATCH 2/3] Updated party test to conform to new leader populate --- test/api/v3/integration/groups/GET-groups.test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/api/v3/integration/groups/GET-groups.test.js b/test/api/v3/integration/groups/GET-groups.test.js index 7f86480187..1994d31dd1 100644 --- a/test/api/v3/integration/groups/GET-groups.test.js +++ b/test/api/v3/integration/groups/GET-groups.test.js @@ -77,7 +77,7 @@ describe('GET /groups', () => { await expect(user.get('/groups?type=party')) .to.eventually.have.a.lengthOf(1) .and.to.have.deep.property('[0]') - .and.to.have.property('leader', user._id); + .and.to.have.property('leader._id', user._id); }); it('returns all public guilds when publicGuilds passed in as query', async () => { @@ -93,7 +93,7 @@ describe('GET /groups', () => { it('returns a list of groups user has access to', async () => { let groups = await user.get('/groups?type=privateGuilds,publicGuilds,party'); - await expect(groups.length) + expect(groups.length) .to.eql(NUMBER_OF_GROUPS_USER_CAN_VIEW); }); }); From be55176954a76d046e2e988d38c1be802f677022 Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Tue, 19 Jan 2016 08:13:24 -0600 Subject: [PATCH 3/3] Ensured tavern is not returned twice and removed leader population --- test/api/v3/integration/groups/GET-groups.test.js | 9 +++------ website/src/controllers/api-v3/groups.js | 8 +++++--- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/test/api/v3/integration/groups/GET-groups.test.js b/test/api/v3/integration/groups/GET-groups.test.js index 1994d31dd1..b37b87f890 100644 --- a/test/api/v3/integration/groups/GET-groups.test.js +++ b/test/api/v3/integration/groups/GET-groups.test.js @@ -76,8 +76,7 @@ describe('GET /groups', () => { it('returns only the user\'s party when party passed in as query', async () => { await expect(user.get('/groups?type=party')) .to.eventually.have.a.lengthOf(1) - .and.to.have.deep.property('[0]') - .and.to.have.property('leader._id', user._id); + .and.to.have.deep.property('[0]'); }); it('returns all public guilds when publicGuilds passed in as query', async () => { @@ -91,9 +90,7 @@ describe('GET /groups', () => { }); it('returns a list of groups user has access to', async () => { - let groups = await user.get('/groups?type=privateGuilds,publicGuilds,party'); - - expect(groups.length) - .to.eql(NUMBER_OF_GROUPS_USER_CAN_VIEW); + await expect(user.get('/groups?type=privateGuilds,publicGuilds,party,tavern')) + .to.eventually.have.lengthOf(NUMBER_OF_GROUPS_USER_CAN_VIEW); }); }); diff --git a/website/src/controllers/api-v3/groups.js b/website/src/controllers/api-v3/groups.js index d7d3eedbd3..14754ffaf6 100644 --- a/website/src/controllers/api-v3/groups.js +++ b/website/src/controllers/api-v3/groups.js @@ -86,14 +86,14 @@ api.getGroups = { // TODO validate types are acceptable? probably not necessary let types = req.query.type.split(','); - let groupFields = 'name description memberCount balance leader'; + let groupFields = 'name description memberCount balance'; let sort = '-memberCount'; let queries = []; types.forEach(type => { switch (type) { case 'party': - queries.push(Group.getGroup({user, groupId: 'party', fields: groupFields, populateLeader: true})); + queries.push(Group.getGroup({user, groupId: 'party', fields: groupFields})); break; case 'privateGuilds': queries.push(Group.find({ @@ -109,7 +109,9 @@ api.getGroups = { }).select(groupFields).sort(sort).exec()); // TODO use lean? break; case 'tavern': - queries.push(Group.getGroup({user, groupId: 'habitrpg', fields: groupFields, populateLeader: true})); + if (types.indexOf('publicGuilds') === -1) { + queries.push(Group.getGroup({user, groupId: 'habitrpg', fields: groupFields})); + } break; } });