mirror of
https://github.com/sudoxnym/habitica.git
synced 2026-05-19 20:28:53 +00:00
improve group invitation code and tests
This commit is contained in:
parent
2516eae8d3
commit
f69a29c152
2 changed files with 92 additions and 0 deletions
89
test/api/v2/groups/POST-groups_id_invite.test.js
Normal file
89
test/api/v2/groups/POST-groups_id_invite.test.js
Normal 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!',
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue