Files
habitica/test/api/users.coffee
T
Alex Hart d7498245dc Refactor API unit tests
Move GET /user tests from status.coffee to users.coffee.
Remove GET /status test that uses user id and token.
2015-10-16 14:59:09 -05:00

277 lines
9.0 KiB
CoffeeScript

'use strict'
User = require("../../website/src/models/user").model
app = require("../../website/src/server")
describe "Users", ->
describe "GET /user without token or user id", ->
it "/api/v2/user", (done) ->
request
.get(baseURL + "/user")
.set("Accept", "application/json")
.set("X-API-User", '')
.set("X-API-Key", '')
.end (res) ->
expect(res.statusCode).to.equal 401
expect(res.body.err).to.equal "You must include a token and uid (user id) in your request"
done()
describe "GET /user with token or user id", ->
before (done) ->
registerNewUser(done, true)
it "/api/v2/user", (done) ->
request.get(baseURL + "/user").set("Accept", "application/json").end (res) ->
expect(res.statusCode).to.equal 200
expect(res.body._id).to.equal user._id
done()
describe "Deleting Users", ->
before (done) ->
registerNewUser ->
done()
, true
it 'Should delete a user', (done) ->
async.waterfall [
(cb) ->
registerManyUsers 1, cb
(_userToDelete, cb) ->
userToDelete = _userToDelete[0]
request.del(baseURL + "/user")
.set("X-API-User", userToDelete._id)
.set("X-API-Key", userToDelete.apiToken)
.end (res) ->
expectCode res, 200
request.get(baseURL + "/user/" + userToDelete._id)
.end (res) ->
expectCode res, 404
cb()
], done
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
, (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 (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 (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 (res) ->
expectCode res, 200
cb()
(cb) ->
request.del(baseURL + "/user")
.set("X-API-User", userToDelete._id)
.set("X-API-Key", userToDelete.apiToken)
.end (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 (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
, (err, _user) ->
async.waterfall [
(cb) ->
request.post(baseURL + "/groups").send(
name: "TestPrivateGroup"
type: "party"
)
.end (res) ->
expectCode res, 200
party = res.body
cb()
(cb) ->
request.post(baseURL + "/groups").send(
name: "TestPrivateGroup"
type: "guild"
)
.end (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 (res) ->
expectCode res, 200
cb()
(cb) ->
inviteURL = baseURL + "/groups/" + guild._id + "/invite"
request.post(inviteURL)
.send( uuids: [userToDelete._id])
.end (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 (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 (res) ->
expectCode res, 200
cb()
(cb) ->
request.del(baseURL + "/user")
.set("X-API-User", userToDelete._id)
.set("X-API-Key", userToDelete.apiToken)
.end (res) ->
expectCode res, 200
cb()
(cb) ->
request.get(baseURL + "/groups/" + party._id)
.end (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 (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 (res) ->
expectCode res, 200
cb()
(cb) ->
inviteURL = baseURL + "/groups/" + guild._id + "/invite"
request.post(inviteURL)
.send( uuids: [userToDeleteInvites._id])
.end (res) ->
expectCode res, 200
cb()
(cb) ->
request.del(baseURL + "/user")
.set("X-API-User", userToDeleteInvites._id)
.set("X-API-Key", userToDeleteInvites.apiToken)
.end (res) ->
expectCode res, 200
cb()
(cb) ->
request.get(baseURL + "/groups/" + party._id)
.end (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 (res) ->
expectCode res, 200
g = res.body
userInviteForGroup = _.find(g.invites, (invite) -> return invite._id == userToDeleteInvites._id; )
expect(userInviteForGroup).to.equal(undefined)
cb()
], done