improve group invitation code and tests

This commit is contained in:
Alys 2016-03-02 09:26:55 +10:00
parent 2516eae8d3
commit f69a29c152
2 changed files with 92 additions and 0 deletions

View file

@ -0,0 +1,89 @@
import {
createAndPopulateGroup,
generateUser,
} from '../../../helpers/api-integration/v2';
import { each } from 'lodash';
describe('POST /groups/:id/invite', () => {
context('user is a member of the group', () => {
each({
'public guild': {type: 'guild', privacy: 'public'},
'private guild': {type: 'guild', privacy: 'private'},
party: {type: 'party', privacy: 'private'},
}, (groupDetails, groupType) => {
let group, invitee, inviter;
beforeEach(async () => {
invitee = await generateUser();
let groupData = await createAndPopulateGroup({
groupDetails,
members: 1,
});
group = groupData.group;
inviter = groupData.members[0];
});
it(`allows user to send an invitation for a ${groupType}`, async () => {
await inviter.post(`/groups/${group._id}/invite`, {
uuids: [invitee._id],
});
await group.sync();
expect(group.invites).to.include(invitee._id);
});
});
});
context('user is a not member of the group', () => {
each({
'public guild': {type: 'guild', privacy: 'public'},
}, (groupDetails, groupType) => {
context(`the group is a ${groupType}`, () => {
let group, invitee, inviter;
beforeEach(async () => {
invitee = await generateUser();
inviter = await generateUser();
let groupData = await createAndPopulateGroup({
groupDetails,
});
group = groupData.group;
});
it(`allows user to send an invitation for a ${groupType}`, async () => {
await inviter.post(`/groups/${group._id}/invite`, {
uuids: [invitee._id],
});
await group.sync();
expect(group.invites).to.include(invitee._id);
});
});
});
each({
'private guild': {type: 'guild', privacy: 'private'},
party: {type: 'party', privacy: 'private'},
}, (groupDetails, groupType) => {
context(`the group is a ${groupType}`, () => {
let group, invitee, inviter;
beforeEach(async () => {
invitee = await generateUser();
inviter = await generateUser();
let groupData = await createAndPopulateGroup({
groupDetails,
});
group = groupData.group;
});
it(`does not allows user to send an invitation for a ${groupType}`, async () => {
return expect(inviter.post(`/groups/${group._id}/invite`, {
uuids: [invitee._id],
})).to.eventually.be.rejected.and.eql({
code: 401,
text: 'Only a member can invite new members!',
});
});
});
});
});
});

View file

@ -690,6 +690,9 @@ var inviteByEmails = function(invites, group, req, res, next){
api.invite = function(req, res, next){
var group = res.locals.group;
if (group.privacy === 'private' && !_.contains(group.members,res.locals.user._id)) {
return res.json(401, {err: "Only a member can invite new members!"});
}
if (req.body.uuids) {
inviteByUUIDs(req.body.uuids, group, req, res, next);
} else if (req.body.emails) {