mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-19 15:48:04 +01:00
Move all delete user tests to new structure
This commit is contained in:
@@ -1,235 +0,0 @@
|
||||
'use strict'
|
||||
|
||||
User = require("../../website/src/models/user").model
|
||||
app = require("../../website/src/server")
|
||||
|
||||
describe "Users", ->
|
||||
|
||||
describe "Deleting Users", ->
|
||||
|
||||
before (done) ->
|
||||
registerNewUser ->
|
||||
done()
|
||||
, true
|
||||
|
||||
context "handle group changes when user cancels", ->
|
||||
it "Should choose a new group leader when deleting a user", (done) ->
|
||||
userToDelete = undefined
|
||||
userToBecomeLeader = undefined
|
||||
guildToHaveNewLeader = undefined
|
||||
async.waterfall [
|
||||
(cb) ->
|
||||
registerManyUsers 2, cb
|
||||
|
||||
(_users, cb) ->
|
||||
userToDelete = _users[0]
|
||||
userToBecomeLeader = _users[1]
|
||||
User.findByIdAndUpdate userToDelete._id,
|
||||
$set:
|
||||
"balance": 4
|
||||
, {new: true}
|
||||
, (err, _user) ->
|
||||
cb()
|
||||
|
||||
(cb) ->
|
||||
request.post(baseURL + "/groups").send(
|
||||
name: "GuildToGainNewLeader"
|
||||
type: "guild"
|
||||
)
|
||||
.set("X-API-User", userToDelete._id)
|
||||
.set("X-API-Key", userToDelete.apiToken)
|
||||
.end (err, res) ->
|
||||
expectCode res, 200
|
||||
guildToHaveNewLeader = res.body
|
||||
expect(guildToHaveNewLeader.leader).to.eql(userToDelete._id)
|
||||
cb()
|
||||
|
||||
(cb) ->
|
||||
inviteURL = baseURL + "/groups/" + guildToHaveNewLeader._id + "/invite"
|
||||
request.post(inviteURL)
|
||||
.send( uuids: [userToBecomeLeader._id])
|
||||
.end (err, res) ->
|
||||
expectCode res, 200
|
||||
cb()
|
||||
|
||||
(cb) ->
|
||||
request.post(baseURL + "/groups/" + guildToHaveNewLeader._id + "/join")
|
||||
.set("X-API-User", userToBecomeLeader._id)
|
||||
.set("X-API-Key", userToBecomeLeader.apiToken)
|
||||
.end (err, res) ->
|
||||
expectCode res, 200
|
||||
cb()
|
||||
|
||||
(cb) ->
|
||||
request.del(baseURL + "/user")
|
||||
.set("X-API-User", userToDelete._id)
|
||||
.set("X-API-Key", userToDelete.apiToken)
|
||||
.end (err, res) ->
|
||||
expectCode res, 200
|
||||
cb()
|
||||
|
||||
(cb) ->
|
||||
request.get(baseURL + "/groups/" + guildToHaveNewLeader._id)
|
||||
.set("X-API-User", userToBecomeLeader._id)
|
||||
.set("X-API-Key", userToBecomeLeader.apiToken)
|
||||
.end (err, res) ->
|
||||
expectCode res, 200
|
||||
g = res.body
|
||||
userInGroup = _.find(g.members, (member) -> return member._id == userToDelete._id; )
|
||||
expect(userInGroup).to.equal(undefined)
|
||||
expect(g.leader._id).to.equal(userToBecomeLeader._id)
|
||||
cb()
|
||||
|
||||
], done
|
||||
|
||||
context "handle group and invite removals", ->
|
||||
guild = undefined
|
||||
party = undefined
|
||||
before (done) ->
|
||||
User.findByIdAndUpdate user._id,
|
||||
$set:
|
||||
"balance": 4
|
||||
, {new: true}
|
||||
, (err, _user) ->
|
||||
async.waterfall [
|
||||
(cb) ->
|
||||
request.post(baseURL + "/groups").send(
|
||||
name: "TestPrivateGroup"
|
||||
type: "party"
|
||||
)
|
||||
.end (err, res) ->
|
||||
expectCode res, 200
|
||||
party = res.body
|
||||
cb()
|
||||
|
||||
(cb) ->
|
||||
request.post(baseURL + "/groups").send(
|
||||
name: "TestPrivateGroup"
|
||||
type: "guild"
|
||||
)
|
||||
.end (err, res) ->
|
||||
expectCode res, 200
|
||||
guild = res.body
|
||||
cb()
|
||||
|
||||
], done
|
||||
|
||||
it 'Should remove a user from a group when deleting a user', (done) ->
|
||||
userToDelete = undefined
|
||||
async.waterfall [
|
||||
(cb) ->
|
||||
registerManyUsers 1, cb
|
||||
|
||||
# Send them invitations
|
||||
(_users, cb) ->
|
||||
userToDelete = _users[0]
|
||||
inviteURL = baseURL + "/groups/" + party._id + "/invite"
|
||||
request.post(inviteURL)
|
||||
.send( uuids: [userToDelete._id])
|
||||
.end (err, res) ->
|
||||
expectCode res, 200
|
||||
cb()
|
||||
|
||||
(cb) ->
|
||||
inviteURL = baseURL + "/groups/" + guild._id + "/invite"
|
||||
request.post(inviteURL)
|
||||
.send( uuids: [userToDelete._id])
|
||||
.end (err, res) ->
|
||||
expectCode res, 200
|
||||
cb()
|
||||
|
||||
(cb) ->
|
||||
request.post(baseURL + "/groups/" + party._id + "/join")
|
||||
.set("X-API-User", userToDelete._id)
|
||||
.set("X-API-Key", userToDelete.apiToken)
|
||||
.end (err, res) ->
|
||||
expectCode res, 200
|
||||
cb()
|
||||
|
||||
(cb) ->
|
||||
request.post(baseURL + "/groups/" + guild._id + "/join")
|
||||
.set("X-API-User", userToDelete._id)
|
||||
.set("X-API-Key", userToDelete.apiToken)
|
||||
.end (err, res) ->
|
||||
expectCode res, 200
|
||||
cb()
|
||||
|
||||
(cb) ->
|
||||
request.del(baseURL + "/user")
|
||||
.set("X-API-User", userToDelete._id)
|
||||
.set("X-API-Key", userToDelete.apiToken)
|
||||
.end (err, res) ->
|
||||
expectCode res, 200
|
||||
cb()
|
||||
|
||||
(cb) ->
|
||||
request.get(baseURL + "/groups/" + party._id)
|
||||
.end (err, res) ->
|
||||
expectCode res, 200
|
||||
g = res.body
|
||||
userInGroup = _.find(g.members, (member) -> return member._id == userToDelete._id; )
|
||||
expect(userInGroup).to.equal(undefined)
|
||||
cb()
|
||||
|
||||
(cb) ->
|
||||
request.get(baseURL + "/groups/" + guild._id)
|
||||
.end (err, res) ->
|
||||
expectCode res, 200
|
||||
g = res.body
|
||||
userInGroup = _.find(g.members, (member) -> return member._id == userToDelete._id; );
|
||||
expect(userInGroup).to.equal(undefined)
|
||||
cb()
|
||||
|
||||
], done
|
||||
|
||||
it 'Should remove invitations when deleting a user', (done) ->
|
||||
userToDeleteInvites = undefined
|
||||
async.waterfall [
|
||||
(cb) ->
|
||||
registerManyUsers 1, cb
|
||||
|
||||
# Send them invitations
|
||||
(_users, cb) ->
|
||||
userToDeleteInvites = _users[0]
|
||||
inviteURL = baseURL + "/groups/" + party._id + "/invite"
|
||||
request.post(inviteURL)
|
||||
.send( uuids: [userToDeleteInvites._id])
|
||||
.end (err, res) ->
|
||||
expectCode res, 200
|
||||
cb()
|
||||
|
||||
(cb) ->
|
||||
inviteURL = baseURL + "/groups/" + guild._id + "/invite"
|
||||
request.post(inviteURL)
|
||||
.send( uuids: [userToDeleteInvites._id])
|
||||
.end (err, res) ->
|
||||
expectCode res, 200
|
||||
cb()
|
||||
|
||||
(cb) ->
|
||||
request.del(baseURL + "/user")
|
||||
.set("X-API-User", userToDeleteInvites._id)
|
||||
.set("X-API-Key", userToDeleteInvites.apiToken)
|
||||
.end (err, res) ->
|
||||
expectCode res, 200
|
||||
cb()
|
||||
|
||||
(cb) ->
|
||||
request.get(baseURL + "/groups/" + party._id)
|
||||
.end (err, res) ->
|
||||
expectCode res, 200
|
||||
g = res.body
|
||||
userInviteForGroup = _.find(g.invites, (invite) -> return invite._id == userToDeleteInvites._id; )
|
||||
expect(userInviteForGroup).to.equal(undefined)
|
||||
cb()
|
||||
|
||||
(cb) ->
|
||||
request.get(baseURL + "/groups/" + guild._id)
|
||||
.end (err, res) ->
|
||||
expectCode res, 200
|
||||
g = res.body
|
||||
userInviteForGroup = _.find(g.invites, (invite) -> return invite._id == userToDeleteInvites._id; )
|
||||
expect(userInviteForGroup).to.equal(undefined)
|
||||
cb()
|
||||
|
||||
], done
|
||||
@@ -1,10 +1,12 @@
|
||||
import {
|
||||
checkExistence,
|
||||
createAndPopulateGroup,
|
||||
generateGroup,
|
||||
generateUser,
|
||||
requester,
|
||||
translate as t,
|
||||
} from '../../../helpers/api-integration.helper';
|
||||
import { find } from 'lodash';
|
||||
|
||||
describe('DELETE /user', () => {
|
||||
let api, user;
|
||||
@@ -64,13 +66,111 @@ describe('DELETE /user', () => {
|
||||
});
|
||||
});
|
||||
|
||||
context('groups with multiple members', () => {
|
||||
it('removes user from all groups user was a part of');
|
||||
context('groups user is leader of', () => {
|
||||
let api, group, oldLeader, newLeader;
|
||||
|
||||
beforeEach(() => {
|
||||
return createAndPopulateGroup({
|
||||
groupDetails: {
|
||||
type: 'guild',
|
||||
privacy: 'public',
|
||||
},
|
||||
members: 3,
|
||||
}).then((res) => {
|
||||
group = res.group;
|
||||
newLeader = res.members[0];
|
||||
oldLeader = res.leader;
|
||||
api = requester(oldLeader);
|
||||
});
|
||||
});
|
||||
|
||||
it('chooses new group leader for any group user was the leader of', () => {
|
||||
return api.del('/user').then((res) => {
|
||||
return requester(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 api, group1, group2, userToDelete, otherUser;
|
||||
|
||||
beforeEach(() => {
|
||||
return generateUser({
|
||||
balance: 10,
|
||||
}).then((user) => {
|
||||
userToDelete = user;
|
||||
api = requester(userToDelete);
|
||||
|
||||
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 api.post(`/groups/${group2._id}/join`);
|
||||
});
|
||||
});
|
||||
|
||||
it('removes user from all groups user was a part of', () => {
|
||||
return api.del('/user').then((res) => {
|
||||
return requester(otherUser).get(`/groups/${group1._id}`);
|
||||
}).then((fetchedGroup1) => {
|
||||
expect(fetchedGroup1.members).to.be.empty;
|
||||
|
||||
return requester(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;
|
||||
});
|
||||
});
|
||||
|
||||
it('chooses new group leader for any group user was the leader of');
|
||||
});
|
||||
|
||||
context('pending invitation to group', () => {
|
||||
it('removes invitations from groups');
|
||||
let api, group, userToDelete, otherUser;
|
||||
|
||||
beforeEach(() => {
|
||||
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', () => {
|
||||
return requester(userToDelete).del('/user').then((res) => {
|
||||
return requester(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);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user