Files
habitica/test/api/groups/POST-groups_id_leave.test.js
2015-10-30 09:01:57 -05:00

165 lines
4.5 KiB
JavaScript

import {
createAndPopulateGroup,
generateGroup,
generateUser,
requester,
translate as t,
} from '../../helpers/api.helper';
import { find } from 'lodash';
describe('POST /groups/:id/leave', () => {
context('user is not member of the group', () => {
it('returns an error');
});
context('user is a non-leader member of a guild', () => {
let api, user, group;
beforeEach(() => {
return createAndPopulateGroup({
members: 3,
groupDetails: {
name: 'test guild',
type: 'guild',
privacy: 'public',
},
}).then((res) => {
user = res.members[0];
api = requester(user);
group = res.group;
});
});
it('leaves the group', () => {
return api.post(`/groups/${group._id}/leave`).then((result) => {
return api.get(`/groups/${group._id}`);
}).then((group) => {
let userInGroup = find(group.members, (member) => {
return member._id === user._id;
});
expect(userInGroup).to.not.be.ok;
});
});
});
context('user is the last member of a public guild', () => {
let api, user, group;
beforeEach(() => {
return createAndPopulateGroup({
groupDetails: {
name: 'test guild',
type: 'guild',
privacy: 'public',
},
}).then((res) => {
user = res.leader;
api = requester(user);
group = res.group;
});
});
it('leaves the group accessible', () => {
return expect(api.post(`/groups/${group._id}/leave`).then((result) => {
return api.get(`/groups/${group._id}`);
})).to.eventually.have.property('_id', group._id);
});
});
context('user is the last member of a private group', () => {
let api, user, group;
beforeEach(() => {
return createAndPopulateGroup({
groupDetails: {
name: 'test guild',
type: 'guild',
privacy: 'private',
},
}).then((res) => {
user = res.leader;
api = requester(user);
group = res.group;
});
});
it('group is not accessible after leaving', () => {
return expect(api.post(`/groups/${group._id}/leave`).then((result) => {
return api.get(`/groups/${group._id}`);
})).to.eventually.be.rejected.and.eql({
code: 404,
text: t('messageGroupNotFound'),
});
});
});
context('user is the last member of a private group with pending invites', () => {
let api, user, inviteeRequest1, inviteeRequest2, group;
beforeEach(() => {
return createAndPopulateGroup({
invites: 2,
groupDetails: {
name: 'test guild',
type: 'guild',
privacy: 'private',
},
}).then((res) => {
user = res.leader;
inviteeRequest1 = requester(res.invitees[0]);
inviteeRequest2 = requester(res.invitees[1]);
api = requester(user);
group = res.group;
});
});
it('deletes the group invitations from users', () => {
return api.post(`/groups/${group._id}/leave`).then((result) => {
return Promise.all([
expect(inviteeRequest1.get(`/user`))
.to.eventually.have.deep.property('invitations.guilds')
.and.to.be.empty,
expect(inviteeRequest2.get(`/user`))
.to.eventually.have.deep.property('invitations.guilds')
.and.to.be.empty,
]);
});
});
});
context('user is the last member of a party with pending invites', () => {
let api, user, inviteeRequest1, inviteeRequest2, group;
beforeEach(() => {
return createAndPopulateGroup({
invites: 2,
groupDetails: {
name: 'test party',
type: 'party',
privacy: 'private',
},
}).then((res) => {
user = res.leader;
inviteeRequest1 = requester(res.invitees[0]);
inviteeRequest2 = requester(res.invitees[1]);
api = requester(user);
group = res.group;
});
});
it('deletes the group invitations from users', () => {
return api.post(`/groups/${group._id}/leave`).then((result) => {
return Promise.all([
expect(inviteeRequest1.get(`/user`))
.to.eventually.have.deep.property('invitations.party')
.and.to.be.empty,
expect(inviteeRequest2.get(`/user`))
.to.eventually.have.deep.property('invitations.party')
.and.to.be.empty,
]);
});
});
});
});