mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-17 22:57:21 +01:00
169 lines
4.3 KiB
JavaScript
169 lines
4.3 KiB
JavaScript
import {
|
|
checkExistence,
|
|
createAndPopulateGroup,
|
|
generateGroup,
|
|
generateUser,
|
|
} from '../../../helpers/api-integration.helper';
|
|
import { find } from 'lodash';
|
|
|
|
describe('DELETE /user', () => {
|
|
let user;
|
|
|
|
beforeEach(async () => {
|
|
user = await generateUser();
|
|
});
|
|
|
|
it('deletes the user', async () => {
|
|
return expect(user.del('/user').then(() => {
|
|
return checkExistence('users', user._id);
|
|
})).to.eventually.eql(false);
|
|
});
|
|
|
|
context('user has active subscription', () => {
|
|
it('does not delete account');
|
|
});
|
|
|
|
context('last member of a party', () => {
|
|
let party;
|
|
|
|
beforeEach(async () => {
|
|
return generateGroup(user, {
|
|
type: 'party',
|
|
privacy: 'private',
|
|
}).then((group) => {
|
|
party = group;
|
|
});
|
|
});
|
|
|
|
it('deletes party when user is the only member', async () => {
|
|
return expect(user.del('/user').then(() => {
|
|
return checkExistence('groups', party._id);
|
|
})).to.eventually.eql(false);
|
|
});
|
|
});
|
|
|
|
context('last member of a private guild', () => {
|
|
let guild;
|
|
|
|
beforeEach(async () => {
|
|
return generateGroup(user, {
|
|
type: 'guild',
|
|
privacy: 'private',
|
|
}).then((group) => {
|
|
guild = group;
|
|
});
|
|
});
|
|
|
|
it('deletes guild when user is the only member', async () => {
|
|
return expect(user.del('/user').then(() => {
|
|
return checkExistence('groups', guild._id);
|
|
})).to.eventually.eql(false);
|
|
});
|
|
});
|
|
|
|
context('groups user is leader of', () => {
|
|
let group, oldLeader, newLeader;
|
|
|
|
beforeEach(async () => {
|
|
return createAndPopulateGroup({
|
|
groupDetails: {
|
|
type: 'guild',
|
|
privacy: 'public',
|
|
},
|
|
members: 3,
|
|
}).then((res) => {
|
|
group = res.group;
|
|
newLeader = res.members[0];
|
|
oldLeader = res.leader;
|
|
});
|
|
});
|
|
|
|
it('chooses new group leader for any group user was the leader of', async () => {
|
|
return oldLeader.del('/user').then(() => {
|
|
return newLeader.get(`/groups/${group._id}`);
|
|
}).then((guild) => {
|
|
expect(guild.leader).to.exist;
|
|
expect(guild.leader._id).to.not.eql(oldLeader._id);
|
|
});
|
|
});
|
|
});
|
|
|
|
context('groups user is a part of', () => {
|
|
let group1, group2, userToDelete, otherUser;
|
|
|
|
beforeEach(async () => {
|
|
return generateUser({
|
|
balance: 10,
|
|
}).then((_user) => {
|
|
userToDelete = _user;
|
|
|
|
return generateGroup(userToDelete, {
|
|
type: 'guild',
|
|
privacy: 'public',
|
|
});
|
|
}).then((newGroup) => {
|
|
group1 = newGroup;
|
|
|
|
return createAndPopulateGroup({
|
|
groupDetails: {
|
|
type: 'guild',
|
|
privacy: 'public',
|
|
},
|
|
members: 3,
|
|
});
|
|
}).then((res) => {
|
|
group2 = res.group;
|
|
otherUser = res.members[0];
|
|
|
|
return userToDelete.post(`/groups/${group2._id}/join`);
|
|
});
|
|
});
|
|
|
|
it('removes user from all groups user was a part of', async () => {
|
|
return userToDelete.del('/user').then(() => {
|
|
return otherUser.get(`/groups/${group1._id}`);
|
|
}).then((fetchedGroup1) => {
|
|
expect(fetchedGroup1.members).to.be.empty;
|
|
|
|
return otherUser.get(`/groups/${group2._id}`);
|
|
}).then((fetchedGroup2) => {
|
|
expect(fetchedGroup2.members).to.not.be.empty;
|
|
|
|
let userInGroup = find(fetchedGroup2.members, (member) => {
|
|
return member._id === userToDelete._id;
|
|
});
|
|
|
|
expect(userInGroup).to.not.be.ok;
|
|
});
|
|
});
|
|
});
|
|
|
|
context('pending invitation to group', () => {
|
|
let group, userToDelete, otherUser;
|
|
|
|
beforeEach(async () => {
|
|
return createAndPopulateGroup({
|
|
groupDetails: {
|
|
type: 'guild',
|
|
privacy: 'public',
|
|
},
|
|
members: 3,
|
|
invites: 2,
|
|
}).then((res) => {
|
|
group = res.group;
|
|
otherUser = res.members[0];
|
|
userToDelete = res.invitees[0];
|
|
});
|
|
});
|
|
|
|
it('removes invitations from groups', async () => {
|
|
return userToDelete.del('/user').then(() => {
|
|
return otherUser.get(`/groups/${group._id}`);
|
|
}).then((fetchedGroup) => {
|
|
expect(fetchedGroup.invites).to.have.a.lengthOf(1);
|
|
expect(fetchedGroup.invites[0]._id).to.not.eql(userToDelete._id);
|
|
});
|
|
});
|
|
});
|
|
});
|