Files
habitica/test/api/v2/groups/POST-groups_id_invite.test.js

90 lines
2.8 KiB
JavaScript

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],
});
group = await inviter.get(`/groups/${group._id}`);
expect(_.find(group.invites, {_id: invitee._id})._id).to.exists;
});
});
});
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],
});
group = await inviter.get(`/groups/${group._id}`);
expect(_.find(group.invites, {_id: invitee._id})._id).to.exists;
});
});
});
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!',
});
});
});
});
});
});