From 1e4570ff883545a1a975765fa55d59f88ff6e507 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Thu, 5 Nov 2015 08:16:22 -0600 Subject: [PATCH] Move all delete user tests to new structure --- test/api-legacy/users.coffee | 235 --------------------------- test/api/v2/user/DELETE-user.test.js | 108 +++++++++++- 2 files changed, 104 insertions(+), 239 deletions(-) delete mode 100644 test/api-legacy/users.coffee diff --git a/test/api-legacy/users.coffee b/test/api-legacy/users.coffee deleted file mode 100644 index 69411cf792..0000000000 --- a/test/api-legacy/users.coffee +++ /dev/null @@ -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 diff --git a/test/api/v2/user/DELETE-user.test.js b/test/api/v2/user/DELETE-user.test.js index eb7bc2b047..7958c7fddd 100644 --- a/test/api/v2/user/DELETE-user.test.js +++ b/test/api/v2/user/DELETE-user.test.js @@ -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); + }); + }); }); });