Skip to content

Commit

Permalink
Merge pull request #6531 from TheHollidayInn/api-v3-group-get-groups-…
Browse files Browse the repository at this point in the history
…test

Added initial get groups tests
  • Loading branch information
paglias committed Jan 24, 2016
2 parents c5d731a + be55176 commit fe170a5
Show file tree
Hide file tree
Showing 2 changed files with 101 additions and 3 deletions.
96 changes: 96 additions & 0 deletions test/api/v3/integration/groups/GET-groups.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
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]');
});

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 () => {
await expect(user.get('/groups?type=privateGuilds,publicGuilds,party,tavern'))
.to.eventually.have.lengthOf(NUMBER_OF_GROUPS_USER_CAN_VIEW);
});
});
8 changes: 5 additions & 3 deletions website/src/controllers/api-v3/groups.js
Original file line number Diff line number Diff line change
Expand Up @@ -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({
Expand All @@ -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;
}
});
Expand Down

0 comments on commit fe170a5

Please sign in to comment.