mirror of
https://github.com/sudoxnym/habitica-self-host.git
synced 2026-08-02 04:00:36 +00:00
clean up cruft from api tests
This commit is contained in:
parent
c1051a9035
commit
180279f2f6
6 changed files with 715 additions and 778 deletions
|
|
@ -1,156 +1,148 @@
|
||||||
'use strict'
|
'use strict'
|
||||||
#jslint node: true
|
|
||||||
|
|
||||||
#global describe, before, beforeEach, it
|
|
||||||
|
|
||||||
app = require("../../website/src/server")
|
app = require("../../website/src/server")
|
||||||
User = require("../../website/src/models/user").model
|
|
||||||
Group = require("../../website/src/models/group").model
|
Group = require("../../website/src/models/group").model
|
||||||
Challenge = require("../../website/src/models/challenge").model
|
Challenge = require("../../website/src/models/challenge").model
|
||||||
|
|
||||||
describe "API", ->
|
describe "Challenges", ->
|
||||||
|
|
||||||
|
challenge = undefined
|
||||||
|
updateTodo = undefined
|
||||||
|
group = undefined
|
||||||
|
|
||||||
before (done) ->
|
before (done) ->
|
||||||
require "../../website/src/server" # start the server
|
async.waterfall [
|
||||||
# then wait for it to do it's thing. TODO make a cb-compatible export of server
|
(cb) ->
|
||||||
setTimeout done, 2000
|
registerNewUser(cb, true)
|
||||||
|
, (user, cb) ->
|
||||||
describe "Challenges", ->
|
request.post(baseURL + "/groups").send(
|
||||||
challenge = undefined
|
name: "TestGroup"
|
||||||
updateTodo = undefined
|
type: "party"
|
||||||
group = undefined
|
).end (res) ->
|
||||||
before (done) ->
|
expectCode res, 200
|
||||||
async.waterfall [
|
group = res.body
|
||||||
(cb) ->
|
expect(group.members.length).to.be 1
|
||||||
registerNewUser(cb, true)
|
expect(group.leader).to.be user._id
|
||||||
, (user, cb) ->
|
|
||||||
request.post(baseURL + "/groups").send(
|
|
||||||
name: "TestGroup"
|
|
||||||
type: "party"
|
|
||||||
).end (res) ->
|
|
||||||
expectCode res, 200
|
|
||||||
group = res.body
|
|
||||||
expect(group.members.length).to.be 1
|
|
||||||
expect(group.leader).to.be user._id
|
|
||||||
done()
|
|
||||||
]
|
|
||||||
it "Creates a challenge", (done) ->
|
|
||||||
request.post(baseURL + "/challenges").send(
|
|
||||||
group: group._id
|
|
||||||
dailys: [
|
|
||||||
type: "daily"
|
|
||||||
text: "Challenge Daily"
|
|
||||||
]
|
|
||||||
todos: [{
|
|
||||||
type: "todo"
|
|
||||||
text: "Challenge Todo 1"
|
|
||||||
notes: "Challenge Notes"
|
|
||||||
}, {
|
|
||||||
type: "todo"
|
|
||||||
text: "Challenge Todo 2"
|
|
||||||
notes: "Challenge Notes"
|
|
||||||
}]
|
|
||||||
rewards: []
|
|
||||||
habits: []
|
|
||||||
official: true
|
|
||||||
).end (res) ->
|
|
||||||
expectCode res, 200
|
|
||||||
async.parallel [
|
|
||||||
(cb) ->
|
|
||||||
User.findById user._id, cb
|
|
||||||
(cb) ->
|
|
||||||
Challenge.findById res.body._id, cb
|
|
||||||
], (err, results) ->
|
|
||||||
_user = results[0]
|
|
||||||
challenge = results[1]
|
|
||||||
expect(_user.dailys[_user.dailys.length - 1].text).to.be "Challenge Daily"
|
|
||||||
updateTodo = _user.todos[_user.todos.length - 1]
|
|
||||||
expect(updateTodo.text).to.be "Challenge Todo 2"
|
|
||||||
expect(challenge.official).to.be false
|
|
||||||
user = _user
|
|
||||||
done()
|
done()
|
||||||
|
]
|
||||||
|
|
||||||
it "User updates challenge notes", (done) ->
|
it "Creates a challenge", (done) ->
|
||||||
updateTodo.notes = "User overriden notes"
|
request.post(baseURL + "/challenges").send(
|
||||||
request.put(baseURL + "/user/tasks/" + updateTodo.id).send(updateTodo).end (res) ->
|
group: group._id
|
||||||
done() # we'll do the check down below
|
dailys: [
|
||||||
|
type: "daily"
|
||||||
it "Change challenge daily", (done) ->
|
text: "Challenge Daily"
|
||||||
challenge.dailys[0].text = "Updated Daily"
|
]
|
||||||
challenge.todos[0].notes = "Challenge Updated Todo Notes"
|
todos: [{
|
||||||
request.post(baseURL + "/challenges/" + challenge._id).send(challenge).end (res) ->
|
type: "todo"
|
||||||
setTimeout (->
|
text: "Challenge Todo 1"
|
||||||
User.findById user._id, (err, _user) ->
|
notes: "Challenge Notes"
|
||||||
expectCode res, 200
|
}, {
|
||||||
expect(_user.dailys[_user.dailys.length - 1].text).to.be "Updated Daily"
|
type: "todo"
|
||||||
expect(res.body.todos[0].notes).to.be "Challenge Updated Todo Notes"
|
text: "Challenge Todo 2"
|
||||||
expect(_user.todos[_user.todos.length - 1].notes).to.be "User overriden notes"
|
notes: "Challenge Notes"
|
||||||
user = _user
|
}]
|
||||||
done()
|
rewards: []
|
||||||
), 500 # we have to wait a while for users' tasks to be updated, called async on server
|
habits: []
|
||||||
|
official: true
|
||||||
it "Shows user notes on challenge page", (done) ->
|
).end (res) ->
|
||||||
request.get(baseURL + "/challenges/" + challenge._id + "/member/" + user._id).end (res) ->
|
expectCode res, 200
|
||||||
expect(res.body.todos[res.body.todos.length - 1].notes).to.be "User overriden notes"
|
async.parallel [
|
||||||
|
(cb) ->
|
||||||
|
User.findById user._id, cb
|
||||||
|
(cb) ->
|
||||||
|
Challenge.findById res.body._id, cb
|
||||||
|
], (err, results) ->
|
||||||
|
_user = results[0]
|
||||||
|
challenge = results[1]
|
||||||
|
expect(_user.dailys[_user.dailys.length - 1].text).to.be "Challenge Daily"
|
||||||
|
updateTodo = _user.todos[_user.todos.length - 1]
|
||||||
|
expect(updateTodo.text).to.be "Challenge Todo 2"
|
||||||
|
expect(challenge.official).to.be false
|
||||||
|
user = _user
|
||||||
done()
|
done()
|
||||||
|
|
||||||
it "Complete To-Dos", (done) ->
|
it "User updates challenge notes", (done) ->
|
||||||
User.findById user._id, (err, _user) ->
|
updateTodo.notes = "User overriden notes"
|
||||||
u = _user
|
request.put(baseURL + "/user/tasks/" + updateTodo.id).send(updateTodo).end (res) ->
|
||||||
numTasks = (_.size(u.todos))
|
done() # we'll do the check down below
|
||||||
request.post(baseURL + "/user/tasks/" + u.todos[0].id + "/up").end (res) ->
|
|
||||||
request.post(baseURL + "/user/tasks/clear-completed").end (res) ->
|
|
||||||
expect(_.size(res.body)).to.be numTasks - 1
|
|
||||||
done()
|
|
||||||
|
|
||||||
it "Challenge deleted, breaks task link", (done) ->
|
it "Change challenge daily", (done) ->
|
||||||
itThis = this
|
challenge.dailys[0].text = "Updated Daily"
|
||||||
request.del(baseURL + "/challenges/" + challenge._id).end (res) ->
|
challenge.todos[0].notes = "Challenge Updated Todo Notes"
|
||||||
User.findById user._id, (err, user) ->
|
request.post(baseURL + "/challenges/" + challenge._id).send(challenge).end (res) ->
|
||||||
len = user.dailys.length - 1
|
setTimeout (->
|
||||||
daily = user.dailys[user.dailys.length - 1]
|
User.findById user._id, (err, _user) ->
|
||||||
expect(daily.challenge.broken).to.be "CHALLENGE_DELETED"
|
expectCode res, 200
|
||||||
|
expect(_user.dailys[_user.dailys.length - 1].text).to.be "Updated Daily"
|
||||||
|
expect(res.body.todos[0].notes).to.be "Challenge Updated Todo Notes"
|
||||||
|
expect(_user.todos[_user.todos.length - 1].notes).to.be "User overriden notes"
|
||||||
|
user = _user
|
||||||
|
done()
|
||||||
|
), 500 # we have to wait a while for users' tasks to be updated, called async on server
|
||||||
|
|
||||||
# Now let's handle if challenge was deleted, but didn't get to update all the users (an error)
|
it "Shows user notes on challenge page", (done) ->
|
||||||
unset = $unset: {}
|
request.get(baseURL + "/challenges/" + challenge._id + "/member/" + user._id).end (res) ->
|
||||||
unset["$unset"]["dailys." + len + ".challenge.broken"] = 1
|
expect(res.body.todos[res.body.todos.length - 1].notes).to.be "User overriden notes"
|
||||||
User.findByIdAndUpdate user._id, unset, (err, user) ->
|
done()
|
||||||
expect(err).to.not.be.ok()
|
|
||||||
expect(user.dailys[len].challenge.broken).to.not.be.ok()
|
|
||||||
request.post(baseURL + "/user/tasks/" + daily.id + "/up").end (res) ->
|
|
||||||
setTimeout (->
|
|
||||||
User.findById user._id, (err, user) ->
|
|
||||||
expect(user.dailys[len].challenge.broken).to.be "CHALLENGE_DELETED"
|
|
||||||
done()
|
|
||||||
), 100 # we need to wait for challenge to update user, it's a background job for perf reasons
|
|
||||||
|
|
||||||
it "Admin creates a challenge", (done) ->
|
it "Complete To-Dos", (done) ->
|
||||||
User.findByIdAndUpdate user._id,
|
User.findById user._id, (err, _user) ->
|
||||||
$set:
|
u = _user
|
||||||
"contributor.admin": true
|
numTasks = (_.size(u.todos))
|
||||||
, (err, _user) ->
|
request.post(baseURL + "/user/tasks/" + u.todos[0].id + "/up").end (res) ->
|
||||||
expect(err).to.not.be.ok()
|
request.post(baseURL + "/user/tasks/clear-completed").end (res) ->
|
||||||
async.parallel [
|
expect(_.size(res.body)).to.be numTasks - 1
|
||||||
(cb) ->
|
done()
|
||||||
request.post(baseURL + "/challenges").send(
|
|
||||||
group: group._id
|
it "Challenge deleted, breaks task link", (done) ->
|
||||||
dailys: []
|
itThis = this
|
||||||
todos: []
|
request.del(baseURL + "/challenges/" + challenge._id).end (res) ->
|
||||||
rewards: []
|
User.findById user._id, (err, user) ->
|
||||||
habits: []
|
len = user.dailys.length - 1
|
||||||
official: false
|
daily = user.dailys[user.dailys.length - 1]
|
||||||
).end (res) ->
|
expect(daily.challenge.broken).to.be "CHALLENGE_DELETED"
|
||||||
expect(res.body.official).to.be false
|
|
||||||
cb()
|
# Now let's handle if challenge was deleted, but didn't get to update all the users (an error)
|
||||||
(cb) ->
|
unset = $unset: {}
|
||||||
request.post(baseURL + "/challenges").send(
|
unset["$unset"]["dailys." + len + ".challenge.broken"] = 1
|
||||||
group: group._id
|
User.findByIdAndUpdate user._id, unset, (err, user) ->
|
||||||
dailys: []
|
expect(err).to.not.be.ok()
|
||||||
todos: []
|
expect(user.dailys[len].challenge.broken).to.not.be.ok()
|
||||||
rewards: []
|
request.post(baseURL + "/user/tasks/" + daily.id + "/up").end (res) ->
|
||||||
habits: []
|
setTimeout (->
|
||||||
official: true
|
User.findById user._id, (err, user) ->
|
||||||
).end (res) ->
|
expect(user.dailys[len].challenge.broken).to.be "CHALLENGE_DELETED"
|
||||||
expect(res.body.official).to.be true
|
done()
|
||||||
cb()
|
), 100 # we need to wait for challenge to update user, it's a background job for perf reasons
|
||||||
], done
|
|
||||||
|
it "Admin creates a challenge", (done) ->
|
||||||
|
User.findByIdAndUpdate user._id,
|
||||||
|
$set:
|
||||||
|
"contributor.admin": true
|
||||||
|
, (err, _user) ->
|
||||||
|
expect(err).to.not.be.ok()
|
||||||
|
async.parallel [
|
||||||
|
(cb) ->
|
||||||
|
request.post(baseURL + "/challenges").send(
|
||||||
|
group: group._id
|
||||||
|
dailys: []
|
||||||
|
todos: []
|
||||||
|
rewards: []
|
||||||
|
habits: []
|
||||||
|
official: false
|
||||||
|
).end (res) ->
|
||||||
|
expect(res.body.official).to.be false
|
||||||
|
cb()
|
||||||
|
(cb) ->
|
||||||
|
request.post(baseURL + "/challenges").send(
|
||||||
|
group: group._id
|
||||||
|
dailys: []
|
||||||
|
todos: []
|
||||||
|
rewards: []
|
||||||
|
habits: []
|
||||||
|
official: true
|
||||||
|
).end (res) ->
|
||||||
|
expect(res.body.official).to.be true
|
||||||
|
cb()
|
||||||
|
], done
|
||||||
|
|
|
||||||
|
|
@ -1,330 +1,167 @@
|
||||||
'use strict'
|
'use strict'
|
||||||
#jslint node: true
|
|
||||||
|
|
||||||
#global describe, before, beforeEach, it
|
|
||||||
diff = require("deep-diff")
|
diff = require("deep-diff")
|
||||||
|
|
||||||
User = require("../../website/src/models/user").model
|
|
||||||
Group = require("../../website/src/models/group").model
|
Group = require("../../website/src/models/group").model
|
||||||
app = require("../../website/src/server")
|
app = require("../../website/src/server")
|
||||||
|
|
||||||
# ###### Helpers & Variables ######
|
describe "Groups", ->
|
||||||
model = undefined
|
group = undefined
|
||||||
uuid = undefined
|
|
||||||
taskPath = undefined
|
|
||||||
|
|
||||||
describe "API", ->
|
|
||||||
|
|
||||||
before (done) ->
|
before (done) ->
|
||||||
require "../../website/src/server" # start the server
|
async.waterfall [
|
||||||
# then wait for it to do it's thing. TODO make a cb-compatible export of server
|
(cb) ->
|
||||||
setTimeout done, 2000
|
registerNewUser(cb, true)
|
||||||
|
, (user, cb) ->
|
||||||
###
|
request.post(baseURL + "/groups").send(
|
||||||
GROUPS
|
name: "TestGroup"
|
||||||
###
|
|
||||||
describe "Groups", ->
|
|
||||||
group = undefined
|
|
||||||
before (done) ->
|
|
||||||
async.waterfall [
|
|
||||||
(cb) ->
|
|
||||||
registerNewUser(cb, true)
|
|
||||||
, (user, cb) ->
|
|
||||||
request.post(baseURL + "/groups").send(
|
|
||||||
name: "TestGroup"
|
|
||||||
type: "party"
|
|
||||||
).end (res) ->
|
|
||||||
expectCode res, 200
|
|
||||||
group = res.body
|
|
||||||
expect(group.members.length).to.be 1
|
|
||||||
expect(group.leader).to.be user._id
|
|
||||||
done()
|
|
||||||
]
|
|
||||||
|
|
||||||
describe "Party", ->
|
|
||||||
it "can be found by querying for party", (done) ->
|
|
||||||
request.get(baseURL + "/groups/").send(
|
|
||||||
type: "party"
|
type: "party"
|
||||||
).end (res) ->
|
).end (res) ->
|
||||||
expectCode res, 200
|
expectCode res, 200
|
||||||
|
group = res.body
|
||||||
|
expect(group.members.length).to.be 1
|
||||||
|
expect(group.leader).to.be user._id
|
||||||
|
done()
|
||||||
|
]
|
||||||
|
|
||||||
party = res.body[0]
|
describe "Party", ->
|
||||||
expect(party._id).to.be group._id
|
it "can be found by querying for party", (done) ->
|
||||||
expect(party.leader).to.be user._id
|
request.get(baseURL + "/groups/").send(
|
||||||
expect(party.name).to.be group.name
|
type: "party"
|
||||||
expect(party.quest).to.be.eql { progress: {} }
|
).end (res) ->
|
||||||
expect(party.memberCount).to.be group.memberCount
|
expectCode res, 200
|
||||||
|
|
||||||
|
party = res.body[0]
|
||||||
|
expect(party._id).to.be group._id
|
||||||
|
expect(party.leader).to.be user._id
|
||||||
|
expect(party.name).to.be group.name
|
||||||
|
expect(party.quest).to.be.eql { progress: {} }
|
||||||
|
expect(party.memberCount).to.be group.memberCount
|
||||||
|
done()
|
||||||
|
|
||||||
|
describe "Chat", ->
|
||||||
|
chat = undefined
|
||||||
|
it "Posts a message to party chat", (done) ->
|
||||||
|
msg = "TestMsg"
|
||||||
|
request.post(baseURL + "/groups/" + group._id + "/chat?message=" + msg).send(
|
||||||
|
).end (res) ->
|
||||||
|
expectCode res, 200
|
||||||
|
chat = res.body.message
|
||||||
|
expect(chat.id).to.be.ok
|
||||||
|
expect(chat.text).to.be.eql msg
|
||||||
|
expect(chat.timestamp).to.be.ok
|
||||||
|
expect(chat.likes).to.be.empty
|
||||||
|
expect(chat.flags).to.be.empty
|
||||||
|
expect(chat.flagCount).to.be 0
|
||||||
|
expect(chat.uuid).to.be.ok
|
||||||
|
expect(chat.contributor).to.be.empty
|
||||||
|
expect(chat.backer).to.be.empty
|
||||||
|
expect(chat.uuid).to.be user._id
|
||||||
|
expect(chat.user).to.be user.profile.name
|
||||||
done()
|
done()
|
||||||
|
|
||||||
describe "Chat", ->
|
it "Does not post an empty message", (done) ->
|
||||||
chat = undefined
|
msg = ""
|
||||||
it "Posts a message to party chat", (done) ->
|
request.post(baseURL + "/groups/" + group._id + "/chat?message=" + msg).send(
|
||||||
msg = "TestMsg"
|
).end (res) ->
|
||||||
request.post(baseURL + "/groups/" + group._id + "/chat?message=" + msg).send(
|
expectCode res, 400
|
||||||
).end (res) ->
|
expect(res.body.err).to.be.eql 'You cannot send a blank message'
|
||||||
expectCode res, 200
|
|
||||||
chat = res.body.message
|
|
||||||
expect(chat.id).to.be.ok
|
|
||||||
expect(chat.text).to.be.eql msg
|
|
||||||
expect(chat.timestamp).to.be.ok
|
|
||||||
expect(chat.likes).to.be.empty
|
|
||||||
expect(chat.flags).to.be.empty
|
|
||||||
expect(chat.flagCount).to.be 0
|
|
||||||
expect(chat.uuid).to.be.ok
|
|
||||||
expect(chat.contributor).to.be.empty
|
|
||||||
expect(chat.backer).to.be.empty
|
|
||||||
expect(chat.uuid).to.be user._id
|
|
||||||
expect(chat.user).to.be user.profile.name
|
|
||||||
done()
|
|
||||||
|
|
||||||
it "Does not post an empty message", (done) ->
|
|
||||||
msg = ""
|
|
||||||
request.post(baseURL + "/groups/" + group._id + "/chat?message=" + msg).send(
|
|
||||||
).end (res) ->
|
|
||||||
expectCode res, 400
|
|
||||||
expect(res.body.err).to.be.eql 'You cannot send a blank message'
|
|
||||||
done()
|
|
||||||
|
|
||||||
it "can not like own chat message", (done) ->
|
|
||||||
request.post(baseURL + "/groups/" + group._id + "/chat/" + chat.id + "/like").send(
|
|
||||||
).end (res) ->
|
|
||||||
expectCode res, 401
|
|
||||||
body = res.body
|
|
||||||
expect(body.err).to.be "Can't like your own message. Don't be that person."
|
|
||||||
done()
|
|
||||||
|
|
||||||
it "can not flag own message", (done) ->
|
|
||||||
request.post(baseURL + "/groups/" + group._id + "/chat/" + chat.id + "/flag").send(
|
|
||||||
).end (res) ->
|
|
||||||
expectCode res, 401
|
|
||||||
body = res.body
|
|
||||||
expect(body.err).to.be "Can't report your own message."
|
|
||||||
done()
|
|
||||||
|
|
||||||
it "Gets chat messages from party chat", (done) ->
|
|
||||||
request.get(baseURL + "/groups/" + group._id + "/chat").send(
|
|
||||||
).end (res) ->
|
|
||||||
expectCode res, 200
|
|
||||||
message = res.body[0]
|
|
||||||
expect(message.id).to.be chat.id
|
|
||||||
expect(message.timestamp).to.be chat.timestamp
|
|
||||||
expect(message.likes).to.be.eql chat.likes
|
|
||||||
expect(message.flags).to.be.eql chat.flags
|
|
||||||
expect(message.flagCount).to.be chat.flagCount
|
|
||||||
expect(message.uuid).to.be chat.uuid
|
|
||||||
expect(message.contributor).to.be.eql chat.contributor
|
|
||||||
expect(message.backer).to.be.eql chat.backer
|
|
||||||
expect(message.user).to.be chat.user
|
|
||||||
done()
|
|
||||||
|
|
||||||
it "Deletes a chat messages from party chat", (done) ->
|
|
||||||
request.del(baseURL + "/groups/" + group._id + "/chat/" + chat.id).send(
|
|
||||||
).end (res) ->
|
|
||||||
expectCode res, 204
|
|
||||||
expect(res.body).to.be.empty
|
|
||||||
done()
|
|
||||||
|
|
||||||
it "Can not delete already deleted message", (done) ->
|
|
||||||
request.del(baseURL + "/groups/" + group._id + "/chat/" + chat.id).send(
|
|
||||||
).end (res) ->
|
|
||||||
expectCode res, 404
|
|
||||||
body = res.body
|
|
||||||
expect(body.err).to.be "Message not found!"
|
|
||||||
done()
|
|
||||||
|
|
||||||
describe "Quests", ->
|
|
||||||
party = undefined
|
|
||||||
participating = []
|
|
||||||
notParticipating = []
|
|
||||||
before (done) ->
|
|
||||||
# Tavern boss, side-by-side
|
|
||||||
Group.update(
|
|
||||||
_id: "habitrpg"
|
|
||||||
,
|
|
||||||
$set:
|
|
||||||
quest:
|
|
||||||
key: "dilatory"
|
|
||||||
active: true
|
|
||||||
progress:
|
|
||||||
hp: shared.content.quests.dilatory.boss.hp
|
|
||||||
rage: 0
|
|
||||||
).exec()
|
|
||||||
|
|
||||||
# Tally some progress for later. Later we want to test that progress made before the quest began gets
|
|
||||||
# counted after the quest starts
|
|
||||||
async.waterfall [
|
|
||||||
(cb) ->
|
|
||||||
request.post(baseURL + '/user/tasks').send({
|
|
||||||
type: 'daily'
|
|
||||||
text: 'daily one'
|
|
||||||
}).end (res) ->
|
|
||||||
cb()
|
|
||||||
(cb) ->
|
|
||||||
request.post(baseURL + '/user/tasks').send({
|
|
||||||
type: 'daily'
|
|
||||||
text: 'daily two'
|
|
||||||
}).end (res) ->
|
|
||||||
cb()
|
|
||||||
(cb) ->
|
|
||||||
User.findByIdAndUpdate user._id,
|
|
||||||
$set:
|
|
||||||
"stats.lvl": 50
|
|
||||||
, (err, _user) ->
|
|
||||||
cb(null, _user)
|
|
||||||
(_user, cb) ->
|
|
||||||
user = _user
|
|
||||||
request.post(baseURL + "/user/batch-update").send([
|
|
||||||
{
|
|
||||||
op: "score"
|
|
||||||
params:
|
|
||||||
direction: "up"
|
|
||||||
id: user.dailys[0].id
|
|
||||||
}
|
|
||||||
{
|
|
||||||
op: "score"
|
|
||||||
params:
|
|
||||||
direction: "up"
|
|
||||||
id: user.dailys[0].id
|
|
||||||
}
|
|
||||||
{
|
|
||||||
op: "update"
|
|
||||||
body:
|
|
||||||
"stats.lvl": 50
|
|
||||||
}
|
|
||||||
]).end (res) ->
|
|
||||||
# console.log(res.body)
|
|
||||||
# console.log("********************************************************************************")
|
|
||||||
# console.log("GOT HERE")
|
|
||||||
# console.log(user._id)
|
|
||||||
# console.log(user.dailys)
|
|
||||||
# console.log("********************************************************************************")
|
|
||||||
user = res.body
|
|
||||||
expect(user.party.quest.progress.up).to.be.above 0
|
|
||||||
|
|
||||||
# Invite some members
|
|
||||||
async.waterfall [
|
|
||||||
|
|
||||||
# Register new users
|
|
||||||
(cb) ->
|
|
||||||
async.parallel [
|
|
||||||
(cb2) ->
|
|
||||||
registerNewUser cb2, false
|
|
||||||
(cb2) ->
|
|
||||||
registerNewUser cb2, false
|
|
||||||
(cb2) ->
|
|
||||||
registerNewUser cb2, false
|
|
||||||
], cb
|
|
||||||
|
|
||||||
# Send them invitations
|
|
||||||
(_party, cb) ->
|
|
||||||
party = _party
|
|
||||||
inviteURL = baseURL + "/groups/" + group._id + "/invite"
|
|
||||||
async.parallel [
|
|
||||||
(cb2) ->
|
|
||||||
request.post(inviteURL).send(
|
|
||||||
uuids: [party[0]._id]
|
|
||||||
).end ->
|
|
||||||
cb2()
|
|
||||||
(cb2) ->
|
|
||||||
request.post(inviteURL).send(
|
|
||||||
uuids: [party[1]._id]
|
|
||||||
).end ->
|
|
||||||
cb2()
|
|
||||||
(cb2) ->
|
|
||||||
request.post(inviteURL).send(
|
|
||||||
uuids: [party[2]._id]
|
|
||||||
).end (res)->
|
|
||||||
cb2()
|
|
||||||
], cb
|
|
||||||
|
|
||||||
# Accept / Reject
|
|
||||||
(results, cb) ->
|
|
||||||
|
|
||||||
# series since they'll be modifying the same group record
|
|
||||||
series = _.reduce(party, (m, v, i) ->
|
|
||||||
m.push (cb2) ->
|
|
||||||
request.post(baseURL + "/groups/" + group._id + "/join").set("X-API-User", party[i]._id).set("X-API-Key", party[i].apiToken).end ->
|
|
||||||
cb2()
|
|
||||||
m
|
|
||||||
, [])
|
|
||||||
async.series series, cb
|
|
||||||
|
|
||||||
# Make sure the invites stuck
|
|
||||||
(whatever, cb) ->
|
|
||||||
Group.findById group._id, (err, g) ->
|
|
||||||
group = g
|
|
||||||
expect(g.members.length).to.be 4
|
|
||||||
cb()
|
|
||||||
|
|
||||||
], ->
|
|
||||||
|
|
||||||
# Start the quest
|
|
||||||
async.waterfall [
|
|
||||||
(cb) ->
|
|
||||||
request.post(baseURL + "/groups/" + group._id + "/questAccept?key=vice3").end (res) ->
|
|
||||||
expectCode res, 400
|
|
||||||
User.findByIdAndUpdate user._id,
|
|
||||||
$set:
|
|
||||||
"items.quests.vice3": 1
|
|
||||||
, cb
|
|
||||||
|
|
||||||
(_user, cb) ->
|
|
||||||
request.post(baseURL + "/groups/" + group._id + "/questAccept?key=vice3").end (res) ->
|
|
||||||
expectCode res, 200
|
|
||||||
Group.findById group._id, cb
|
|
||||||
|
|
||||||
(_group, cb) ->
|
|
||||||
expect(_group.quest.key).to.be "vice3"
|
|
||||||
expect(_group.quest.active).to.be false
|
|
||||||
request.post(baseURL + "/groups/" + group._id + "/questAccept").set("X-API-User", party[0]._id).set("X-API-Key", party[0].apiToken).end ->
|
|
||||||
request.post(baseURL + "/groups/" + group._id + "/questAccept").set("X-API-User", party[1]._id).set("X-API-Key", party[1].apiToken).end (res) ->
|
|
||||||
request.post(baseURL + "/groups/" + group._id + "/questReject").set("X-API-User", party[2]._id).set("X-API-Key", party[2].apiToken).end (res) ->
|
|
||||||
group = res.body
|
|
||||||
expect(group.quest.active).to.be true
|
|
||||||
cb()
|
|
||||||
|
|
||||||
], done
|
|
||||||
]
|
|
||||||
|
|
||||||
it "Casts a spell", (done) ->
|
|
||||||
mp = user.stats.mp
|
|
||||||
request.get(baseURL + "/members/" + party[0]._id).end (res) ->
|
|
||||||
party[0] = res.body
|
|
||||||
request.post(baseURL + "/user/class/cast/snowball?targetType=user&targetId=" + party[0]._id).end (res) ->
|
|
||||||
|
|
||||||
#expect(res.body.stats.mp).to.be.below(mp);
|
|
||||||
request.get(baseURL + "/members/" + party[0]._id).end (res) ->
|
|
||||||
member = res.body
|
|
||||||
expect(member.achievements.snowball).to.be 1
|
|
||||||
expect(member.stats.buffs.snowball).to.be true
|
|
||||||
difference = diff(member, party[0])
|
|
||||||
expect(_.size(difference)).to.be 2
|
|
||||||
|
|
||||||
# level up user so str is > 0
|
|
||||||
request.put(baseURL + "/user").send("stats.lvl": 5).end (res) ->
|
|
||||||
|
|
||||||
# Refill mana so user can cast
|
|
||||||
request.put(baseURL + "/user").send("stats.mp": 100).end (res) ->
|
|
||||||
request.post(baseURL + "/user/class/cast/valorousPresence?targetType=party").end (res) ->
|
|
||||||
request.get(baseURL + "/members/" + member._id).end (res) ->
|
|
||||||
expect(res.body.stats.buffs.str).to.be.above 0
|
|
||||||
expect(diff(res.body, member).length).to.be 1
|
|
||||||
done()
|
|
||||||
|
|
||||||
it "Doesn't include people who aren't participating", (done) ->
|
|
||||||
request.get(baseURL + "/groups/" + group._id).end (res) ->
|
|
||||||
expect(_.size(res.body.quest.members)).to.be 3
|
|
||||||
done()
|
done()
|
||||||
|
|
||||||
xit "Hurts the boss", (done) ->
|
it "can not like own chat message", (done) ->
|
||||||
request.post(baseURL + "/user/batch-update").end (res) ->
|
request.post(baseURL + "/groups/" + group._id + "/chat/" + chat.id + "/like").send(
|
||||||
user = res.body
|
).end (res) ->
|
||||||
up = user.party.quest.progress.up
|
expectCode res, 401
|
||||||
expect(up).to.be.above 0
|
body = res.body
|
||||||
|
expect(body.err).to.be "Can't like your own message. Don't be that person."
|
||||||
|
done()
|
||||||
|
|
||||||
#{op:'score',params:{direction:'up',id:user.dailys[3].id}}, // leave one daily undone so Trapper hurts party
|
it "can not flag own message", (done) ->
|
||||||
# set day to yesterday, cron will then be triggered on next action
|
request.post(baseURL + "/groups/" + group._id + "/chat/" + chat.id + "/flag").send(
|
||||||
|
).end (res) ->
|
||||||
|
expectCode res, 401
|
||||||
|
body = res.body
|
||||||
|
expect(body.err).to.be "Can't report your own message."
|
||||||
|
done()
|
||||||
|
|
||||||
|
it "Gets chat messages from party chat", (done) ->
|
||||||
|
request.get(baseURL + "/groups/" + group._id + "/chat").send(
|
||||||
|
).end (res) ->
|
||||||
|
expectCode res, 200
|
||||||
|
message = res.body[0]
|
||||||
|
expect(message.id).to.be chat.id
|
||||||
|
expect(message.timestamp).to.be chat.timestamp
|
||||||
|
expect(message.likes).to.be.eql chat.likes
|
||||||
|
expect(message.flags).to.be.eql chat.flags
|
||||||
|
expect(message.flagCount).to.be chat.flagCount
|
||||||
|
expect(message.uuid).to.be chat.uuid
|
||||||
|
expect(message.contributor).to.be.eql chat.contributor
|
||||||
|
expect(message.backer).to.be.eql chat.backer
|
||||||
|
expect(message.user).to.be chat.user
|
||||||
|
done()
|
||||||
|
|
||||||
|
it "Deletes a chat messages from party chat", (done) ->
|
||||||
|
request.del(baseURL + "/groups/" + group._id + "/chat/" + chat.id).send(
|
||||||
|
).end (res) ->
|
||||||
|
expectCode res, 204
|
||||||
|
expect(res.body).to.be.empty
|
||||||
|
done()
|
||||||
|
|
||||||
|
it "Can not delete already deleted message", (done) ->
|
||||||
|
request.del(baseURL + "/groups/" + group._id + "/chat/" + chat.id).send(
|
||||||
|
).end (res) ->
|
||||||
|
expectCode res, 404
|
||||||
|
body = res.body
|
||||||
|
expect(body.err).to.be "Message not found!"
|
||||||
|
done()
|
||||||
|
|
||||||
|
describe "Quests", ->
|
||||||
|
party = undefined
|
||||||
|
participating = []
|
||||||
|
notParticipating = []
|
||||||
|
before (done) ->
|
||||||
|
# Tavern boss, side-by-side
|
||||||
|
Group.update(
|
||||||
|
_id: "habitrpg"
|
||||||
|
,
|
||||||
|
$set:
|
||||||
|
quest:
|
||||||
|
key: "dilatory"
|
||||||
|
active: true
|
||||||
|
progress:
|
||||||
|
hp: shared.content.quests.dilatory.boss.hp
|
||||||
|
rage: 0
|
||||||
|
).exec()
|
||||||
|
|
||||||
|
# Tally some progress for later. Later we want to test that progress made before the quest began gets
|
||||||
|
# counted after the quest starts
|
||||||
|
async.waterfall [
|
||||||
|
(cb) ->
|
||||||
|
request.post(baseURL + '/user/tasks').send({
|
||||||
|
type: 'daily'
|
||||||
|
text: 'daily one'
|
||||||
|
}).end (res) ->
|
||||||
|
cb()
|
||||||
|
(cb) ->
|
||||||
|
request.post(baseURL + '/user/tasks').send({
|
||||||
|
type: 'daily'
|
||||||
|
text: 'daily two'
|
||||||
|
}).end (res) ->
|
||||||
|
cb()
|
||||||
|
(cb) ->
|
||||||
|
User.findByIdAndUpdate user._id,
|
||||||
|
$set:
|
||||||
|
"stats.lvl": 50
|
||||||
|
, (err, _user) ->
|
||||||
|
cb(null, _user)
|
||||||
|
(_user, cb) ->
|
||||||
|
user = _user
|
||||||
request.post(baseURL + "/user/batch-update").send([
|
request.post(baseURL + "/user/batch-update").send([
|
||||||
|
{
|
||||||
|
op: "score"
|
||||||
|
params:
|
||||||
|
direction: "up"
|
||||||
|
id: user.dailys[0].id
|
||||||
|
}
|
||||||
{
|
{
|
||||||
op: "score"
|
op: "score"
|
||||||
params:
|
params:
|
||||||
|
|
@ -334,138 +171,283 @@ describe "API", ->
|
||||||
{
|
{
|
||||||
op: "update"
|
op: "update"
|
||||||
body:
|
body:
|
||||||
lastCron: moment().subtract(1, "days")
|
"stats.lvl": 50
|
||||||
}
|
}
|
||||||
]).end (res) ->
|
]).end (res) ->
|
||||||
expect(res.body.party.quest.progress.up).to.be.above up
|
# console.log(res.body)
|
||||||
request.post(baseURL + "/user/batch-update").end ->
|
# console.log("********************************************************************************")
|
||||||
request.get(baseURL + "/groups/party").end (res) ->
|
# console.log("GOT HERE")
|
||||||
|
# console.log(user._id)
|
||||||
|
# console.log(user.dailys)
|
||||||
|
# console.log("********************************************************************************")
|
||||||
|
user = res.body
|
||||||
|
expect(user.party.quest.progress.up).to.be.above 0
|
||||||
|
|
||||||
# Check boss damage
|
# Invite some members
|
||||||
async.waterfall [
|
async.waterfall [
|
||||||
(cb) ->
|
|
||||||
async.parallel [
|
|
||||||
|
|
||||||
#tavern boss
|
# Register new users
|
||||||
(cb2) ->
|
(cb) ->
|
||||||
Group.findById "habitrpg",
|
async.parallel [
|
||||||
quest: 1
|
(cb2) ->
|
||||||
, (err, tavern) ->
|
registerNewUser cb2, false
|
||||||
expect(tavern.quest.progress.hp).to.be.below shared.content.quests.dilatory.boss.hp
|
(cb2) ->
|
||||||
expect(tavern.quest.progress.rage).to.be.above 0
|
registerNewUser cb2, false
|
||||||
console.log tavernBoss: tavern.quest
|
(cb2) ->
|
||||||
cb2()
|
registerNewUser cb2, false
|
||||||
|
], cb
|
||||||
|
|
||||||
# party boss
|
# Send them invitations
|
||||||
(cb2) ->
|
(_party, cb) ->
|
||||||
expect(res.body.quest.progress.hp).to.be.below shared.content.quests.vice3.boss.hp
|
party = _party
|
||||||
_party = res.body.members
|
inviteURL = baseURL + "/groups/" + group._id + "/invite"
|
||||||
expect(_.find(_party,
|
async.parallel [
|
||||||
_id: party[0]._id
|
(cb2) ->
|
||||||
).stats.hp).to.be.below 50
|
request.post(inviteURL).send(
|
||||||
expect(_.find(_party,
|
uuids: [party[0]._id]
|
||||||
_id: party[1]._id
|
).end ->
|
||||||
).stats.hp).to.be.below 50
|
cb2()
|
||||||
expect(_.find(_party,
|
(cb2) ->
|
||||||
_id: party[2]._id
|
request.post(inviteURL).send(
|
||||||
).stats.hp).to.be 50
|
uuids: [party[1]._id]
|
||||||
cb2()
|
).end ->
|
||||||
], cb
|
cb2()
|
||||||
|
(cb2) ->
|
||||||
|
request.post(inviteURL).send(
|
||||||
|
uuids: [party[2]._id]
|
||||||
|
).end (res)->
|
||||||
|
cb2()
|
||||||
|
], cb
|
||||||
|
|
||||||
# Kill the boss
|
# Accept / Reject
|
||||||
(whatever, cb) ->
|
(results, cb) ->
|
||||||
async.waterfall [
|
|
||||||
|
|
||||||
# tavern boss
|
# series since they'll be modifying the same group record
|
||||||
(cb2) ->
|
series = _.reduce(party, (m, v, i) ->
|
||||||
expect(user.items.pets["MantisShrimp-Base"]).to.not.be.ok()
|
m.push (cb2) ->
|
||||||
Group.update
|
request.post(baseURL + "/groups/" + group._id + "/join").set("X-API-User", party[i]._id).set("X-API-Key", party[i].apiToken).end ->
|
||||||
_id: "habitrpg"
|
cb2()
|
||||||
,
|
m
|
||||||
$set:
|
, [])
|
||||||
"quest.progress.hp": 0
|
async.series series, cb
|
||||||
, cb2
|
|
||||||
|
|
||||||
# party boss
|
# Make sure the invites stuck
|
||||||
(arg1, arg2, cb2) ->
|
(whatever, cb) ->
|
||||||
expect(user.items.gear.owned.weapon_special_2).to.not.be.ok()
|
Group.findById group._id, (err, g) ->
|
||||||
Group.findByIdAndUpdate group._id,
|
group = g
|
||||||
$set:
|
expect(g.members.length).to.be 4
|
||||||
"quest.progress.hp": 0
|
cb()
|
||||||
, cb2
|
|
||||||
], cb
|
|
||||||
(_group, cb) ->
|
|
||||||
# set day to yesterday, cron will then be triggered on next action
|
|
||||||
request.post(baseURL + "/user/batch-update").send([
|
|
||||||
{
|
|
||||||
op: "score"
|
|
||||||
params:
|
|
||||||
direction: "up"
|
|
||||||
id: user.dailys[1].id
|
|
||||||
}
|
|
||||||
{
|
|
||||||
op: "update"
|
|
||||||
body:
|
|
||||||
lastCron: moment().subtract(1, "days")
|
|
||||||
}
|
|
||||||
]).end ->
|
|
||||||
cb()
|
|
||||||
|
|
||||||
(cb) ->
|
], ->
|
||||||
request.post(baseURL + "/user/batch-update").end (res) ->
|
|
||||||
cb null, res.body
|
|
||||||
|
|
||||||
(_user, cb) ->
|
# Start the quest
|
||||||
|
async.waterfall [
|
||||||
|
(cb) ->
|
||||||
|
request.post(baseURL + "/groups/" + group._id + "/questAccept?key=vice3").end (res) ->
|
||||||
|
expectCode res, 400
|
||||||
|
User.findByIdAndUpdate user._id,
|
||||||
|
$set:
|
||||||
|
"items.quests.vice3": 1
|
||||||
|
, cb
|
||||||
|
|
||||||
# need to load the user again, since tavern boss does update after user's cron
|
(_user, cb) ->
|
||||||
User.findById _user._id, cb
|
request.post(baseURL + "/groups/" + group._id + "/questAccept?key=vice3").end (res) ->
|
||||||
(_user, cb) ->
|
expectCode res, 200
|
||||||
user = _user
|
|
||||||
Group.findById group._id, cb
|
Group.findById group._id, cb
|
||||||
(_group, cb) ->
|
|
||||||
cummExp = shared.content.quests.vice3.drop.exp + shared.content.quests.dilatory.drop.exp
|
|
||||||
cummGp = shared.content.quests.vice3.drop.gp + shared.content.quests.dilatory.drop.gp
|
|
||||||
|
|
||||||
#//FIXME check that user got exp, but user is leveling up making the exp check difficult
|
(_group, cb) ->
|
||||||
# expect(user.stats.exp).to.be.above(cummExp);
|
expect(_group.quest.key).to.be "vice3"
|
||||||
# expect(user.stats.gp).to.be.above(cummGp);
|
expect(_group.quest.active).to.be false
|
||||||
async.parallel [
|
request.post(baseURL + "/groups/" + group._id + "/questAccept").set("X-API-User", party[0]._id).set("X-API-Key", party[0].apiToken).end ->
|
||||||
|
request.post(baseURL + "/groups/" + group._id + "/questAccept").set("X-API-User", party[1]._id).set("X-API-Key", party[1].apiToken).end (res) ->
|
||||||
|
request.post(baseURL + "/groups/" + group._id + "/questReject").set("X-API-User", party[2]._id).set("X-API-Key", party[2].apiToken).end (res) ->
|
||||||
|
group = res.body
|
||||||
|
expect(group.quest.active).to.be true
|
||||||
|
cb()
|
||||||
|
|
||||||
# Tavern Boss
|
], done
|
||||||
(cb2) ->
|
]
|
||||||
Group.findById "habitrpg", (err, tavern) ->
|
|
||||||
|
|
||||||
#use an explicit get because mongoose wraps the null in an object
|
it "Casts a spell", (done) ->
|
||||||
expect(_.isEmpty(tavern.get("quest"))).to.be true
|
mp = user.stats.mp
|
||||||
expect(user.items.pets["MantisShrimp-Base"]).to.be 5
|
request.get(baseURL + "/members/" + party[0]._id).end (res) ->
|
||||||
expect(user.items.mounts["MantisShrimp-Base"]).to.be true
|
party[0] = res.body
|
||||||
expect(user.items.eggs.Dragon).to.be 2
|
request.post(baseURL + "/user/class/cast/snowball?targetType=user&targetId=" + party[0]._id).end (res) ->
|
||||||
expect(user.items.hatchingPotions.Shade).to.be 2
|
|
||||||
cb2()
|
|
||||||
|
|
||||||
# Party Boss
|
#expect(res.body.stats.mp).to.be.below(mp);
|
||||||
(cb2) ->
|
request.get(baseURL + "/members/" + party[0]._id).end (res) ->
|
||||||
|
member = res.body
|
||||||
|
expect(member.achievements.snowball).to.be 1
|
||||||
|
expect(member.stats.buffs.snowball).to.be true
|
||||||
|
difference = diff(member, party[0])
|
||||||
|
expect(_.size(difference)).to.be 2
|
||||||
|
|
||||||
|
# level up user so str is > 0
|
||||||
|
request.put(baseURL + "/user").send("stats.lvl": 5).end (res) ->
|
||||||
|
|
||||||
|
# Refill mana so user can cast
|
||||||
|
request.put(baseURL + "/user").send("stats.mp": 100).end (res) ->
|
||||||
|
request.post(baseURL + "/user/class/cast/valorousPresence?targetType=party").end (res) ->
|
||||||
|
request.get(baseURL + "/members/" + member._id).end (res) ->
|
||||||
|
expect(res.body.stats.buffs.str).to.be.above 0
|
||||||
|
expect(diff(res.body, member).length).to.be 1
|
||||||
|
done()
|
||||||
|
|
||||||
|
it "Doesn't include people who aren't participating", (done) ->
|
||||||
|
request.get(baseURL + "/groups/" + group._id).end (res) ->
|
||||||
|
expect(_.size(res.body.quest.members)).to.be 3
|
||||||
|
done()
|
||||||
|
|
||||||
|
xit "Hurts the boss", (done) ->
|
||||||
|
request.post(baseURL + "/user/batch-update").end (res) ->
|
||||||
|
user = res.body
|
||||||
|
up = user.party.quest.progress.up
|
||||||
|
expect(up).to.be.above 0
|
||||||
|
|
||||||
|
#{op:'score',params:{direction:'up',id:user.dailys[3].id}}, // leave one daily undone so Trapper hurts party
|
||||||
|
# set day to yesterday, cron will then be triggered on next action
|
||||||
|
request.post(baseURL + "/user/batch-update").send([
|
||||||
|
{
|
||||||
|
op: "score"
|
||||||
|
params:
|
||||||
|
direction: "up"
|
||||||
|
id: user.dailys[0].id
|
||||||
|
}
|
||||||
|
{
|
||||||
|
op: "update"
|
||||||
|
body:
|
||||||
|
lastCron: moment().subtract(1, "days")
|
||||||
|
}
|
||||||
|
]).end (res) ->
|
||||||
|
expect(res.body.party.quest.progress.up).to.be.above up
|
||||||
|
request.post(baseURL + "/user/batch-update").end ->
|
||||||
|
request.get(baseURL + "/groups/party").end (res) ->
|
||||||
|
|
||||||
|
# Check boss damage
|
||||||
|
async.waterfall [
|
||||||
|
(cb) ->
|
||||||
|
async.parallel [
|
||||||
|
|
||||||
|
#tavern boss
|
||||||
|
(cb2) ->
|
||||||
|
Group.findById "habitrpg",
|
||||||
|
quest: 1
|
||||||
|
, (err, tavern) ->
|
||||||
|
expect(tavern.quest.progress.hp).to.be.below shared.content.quests.dilatory.boss.hp
|
||||||
|
expect(tavern.quest.progress.rage).to.be.above 0
|
||||||
|
console.log tavernBoss: tavern.quest
|
||||||
|
cb2()
|
||||||
|
|
||||||
|
# party boss
|
||||||
|
(cb2) ->
|
||||||
|
expect(res.body.quest.progress.hp).to.be.below shared.content.quests.vice3.boss.hp
|
||||||
|
_party = res.body.members
|
||||||
|
expect(_.find(_party,
|
||||||
|
_id: party[0]._id
|
||||||
|
).stats.hp).to.be.below 50
|
||||||
|
expect(_.find(_party,
|
||||||
|
_id: party[1]._id
|
||||||
|
).stats.hp).to.be.below 50
|
||||||
|
expect(_.find(_party,
|
||||||
|
_id: party[2]._id
|
||||||
|
).stats.hp).to.be 50
|
||||||
|
cb2()
|
||||||
|
], cb
|
||||||
|
|
||||||
|
# Kill the boss
|
||||||
|
(whatever, cb) ->
|
||||||
|
async.waterfall [
|
||||||
|
|
||||||
|
# tavern boss
|
||||||
|
(cb2) ->
|
||||||
|
expect(user.items.pets["MantisShrimp-Base"]).to.not.be.ok()
|
||||||
|
Group.update
|
||||||
|
_id: "habitrpg"
|
||||||
|
,
|
||||||
|
$set:
|
||||||
|
"quest.progress.hp": 0
|
||||||
|
, cb2
|
||||||
|
|
||||||
|
# party boss
|
||||||
|
(arg1, arg2, cb2) ->
|
||||||
|
expect(user.items.gear.owned.weapon_special_2).to.not.be.ok()
|
||||||
|
Group.findByIdAndUpdate group._id,
|
||||||
|
$set:
|
||||||
|
"quest.progress.hp": 0
|
||||||
|
, cb2
|
||||||
|
], cb
|
||||||
|
(_group, cb) ->
|
||||||
|
# set day to yesterday, cron will then be triggered on next action
|
||||||
|
request.post(baseURL + "/user/batch-update").send([
|
||||||
|
{
|
||||||
|
op: "score"
|
||||||
|
params:
|
||||||
|
direction: "up"
|
||||||
|
id: user.dailys[1].id
|
||||||
|
}
|
||||||
|
{
|
||||||
|
op: "update"
|
||||||
|
body:
|
||||||
|
lastCron: moment().subtract(1, "days")
|
||||||
|
}
|
||||||
|
]).end ->
|
||||||
|
cb()
|
||||||
|
|
||||||
|
(cb) ->
|
||||||
|
request.post(baseURL + "/user/batch-update").end (res) ->
|
||||||
|
cb null, res.body
|
||||||
|
|
||||||
|
(_user, cb) ->
|
||||||
|
|
||||||
|
# need to load the user again, since tavern boss does update after user's cron
|
||||||
|
User.findById _user._id, cb
|
||||||
|
(_user, cb) ->
|
||||||
|
user = _user
|
||||||
|
Group.findById group._id, cb
|
||||||
|
(_group, cb) ->
|
||||||
|
cummExp = shared.content.quests.vice3.drop.exp + shared.content.quests.dilatory.drop.exp
|
||||||
|
cummGp = shared.content.quests.vice3.drop.gp + shared.content.quests.dilatory.drop.gp
|
||||||
|
|
||||||
|
#//FIXME check that user got exp, but user is leveling up making the exp check difficult
|
||||||
|
# expect(user.stats.exp).to.be.above(cummExp);
|
||||||
|
# expect(user.stats.gp).to.be.above(cummGp);
|
||||||
|
async.parallel [
|
||||||
|
|
||||||
|
# Tavern Boss
|
||||||
|
(cb2) ->
|
||||||
|
Group.findById "habitrpg", (err, tavern) ->
|
||||||
|
|
||||||
#use an explicit get because mongoose wraps the null in an object
|
#use an explicit get because mongoose wraps the null in an object
|
||||||
expect(_.isEmpty(_group.get("quest"))).to.be true
|
expect(_.isEmpty(tavern.get("quest"))).to.be true
|
||||||
expect(user.items.gear.owned.weapon_special_2).to.be true
|
expect(user.items.pets["MantisShrimp-Base"]).to.be 5
|
||||||
|
expect(user.items.mounts["MantisShrimp-Base"]).to.be true
|
||||||
expect(user.items.eggs.Dragon).to.be 2
|
expect(user.items.eggs.Dragon).to.be 2
|
||||||
expect(user.items.hatchingPotions.Shade).to.be 2
|
expect(user.items.hatchingPotions.Shade).to.be 2
|
||||||
|
cb2()
|
||||||
|
|
||||||
# need to fetch users to get updated data
|
# Party Boss
|
||||||
async.parallel [
|
(cb2) ->
|
||||||
(cb3) ->
|
|
||||||
User.findById party[0].id, (err, mbr) ->
|
#use an explicit get because mongoose wraps the null in an object
|
||||||
expect(mbr.items.gear.owned.weapon_special_2).to.be true
|
expect(_.isEmpty(_group.get("quest"))).to.be true
|
||||||
cb3()
|
expect(user.items.gear.owned.weapon_special_2).to.be true
|
||||||
(cb3) ->
|
expect(user.items.eggs.Dragon).to.be 2
|
||||||
User.findById party[1].id, (err, mbr) ->
|
expect(user.items.hatchingPotions.Shade).to.be 2
|
||||||
expect(mbr.items.gear.owned.weapon_special_2).to.be true
|
|
||||||
cb3()
|
# need to fetch users to get updated data
|
||||||
(cb3) ->
|
async.parallel [
|
||||||
User.findById party[2].id, (err, mbr) ->
|
(cb3) ->
|
||||||
expect(mbr.items.gear.owned.weapon_special_2).to.not.be.ok()
|
User.findById party[0].id, (err, mbr) ->
|
||||||
cb3()
|
expect(mbr.items.gear.owned.weapon_special_2).to.be true
|
||||||
], cb2
|
cb3()
|
||||||
], cb
|
(cb3) ->
|
||||||
], done
|
User.findById party[1].id, (err, mbr) ->
|
||||||
|
expect(mbr.items.gear.owned.weapon_special_2).to.be true
|
||||||
|
cb3()
|
||||||
|
(cb3) ->
|
||||||
|
User.findById party[2].id, (err, mbr) ->
|
||||||
|
expect(mbr.items.gear.owned.weapon_special_2).to.not.be.ok()
|
||||||
|
cb3()
|
||||||
|
], cb2
|
||||||
|
], cb
|
||||||
|
], done
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
User = require("../../website/src/models/user").model
|
global.User = require("../../website/src/models/user").model
|
||||||
Group = require("../../website/src/models/group").model
|
|
||||||
##############################
|
##############################
|
||||||
# Global modules
|
# Global modules
|
||||||
##############################
|
##############################
|
||||||
|
|
@ -54,7 +53,7 @@ global.registerNewUser = (cb, main) ->
|
||||||
return cb(null, res.body) unless main
|
return cb(null, res.body) unless main
|
||||||
_id = res.body._id
|
_id = res.body._id
|
||||||
apiToken = res.body.apiToken
|
apiToken = res.body.apiToken
|
||||||
User.findOne
|
global.User.findOne
|
||||||
_id: _id
|
_id: _id
|
||||||
apiToken: apiToken
|
apiToken: apiToken
|
||||||
, (err, _user) ->
|
, (err, _user) ->
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,8 @@
|
||||||
'use strict'
|
'use strict'
|
||||||
#jslint node: true
|
|
||||||
|
|
||||||
#global describe, before, beforeEach, it
|
|
||||||
|
|
||||||
app = require("../../website/src/server")
|
app = require("../../website/src/server")
|
||||||
|
|
||||||
describe "API", ->
|
describe "Site Status", ->
|
||||||
|
|
||||||
before (done) ->
|
|
||||||
require "../../website/src/server" # start the server
|
|
||||||
# then wait for it to do it's thing. TODO make a cb-compatible export of server
|
|
||||||
setTimeout done, 2000
|
|
||||||
|
|
||||||
describe "Without token or user id", ->
|
describe "Without token or user id", ->
|
||||||
|
|
||||||
|
|
@ -32,6 +24,7 @@ describe "API", ->
|
||||||
done()
|
done()
|
||||||
|
|
||||||
describe "With token or user id", ->
|
describe "With token or user id", ->
|
||||||
|
|
||||||
before (done) ->
|
before (done) ->
|
||||||
registerNewUser(done, true)
|
registerNewUser(done, true)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,57 +1,41 @@
|
||||||
'use strict'
|
'use strict'
|
||||||
#jslint node: true
|
|
||||||
|
|
||||||
#global describe, before, beforeEach, it
|
|
||||||
diff = require("deep-diff")
|
|
||||||
|
|
||||||
User = require("../../website/src/models/user").model
|
|
||||||
payments = require("../../website/src/controllers/payments")
|
payments = require("../../website/src/controllers/payments")
|
||||||
app = require("../../website/src/server")
|
app = require("../../website/src/server")
|
||||||
|
|
||||||
# ###### Helpers & Variables ######
|
describe "Subscriptions", ->
|
||||||
model = undefined
|
|
||||||
uuid = undefined
|
|
||||||
taskPath = undefined
|
|
||||||
|
|
||||||
describe "API", ->
|
|
||||||
|
|
||||||
before (done) ->
|
before (done) ->
|
||||||
require "../../website/src/server" # start the server
|
registerNewUser(done, true)
|
||||||
# then wait for it to do it's thing. TODO make a cb-compatible export of server
|
|
||||||
setTimeout done, 2000
|
|
||||||
|
|
||||||
describe "Subscriptions", ->
|
it "Handles unsubscription", (done) ->
|
||||||
before (done) ->
|
cron = ->
|
||||||
registerNewUser(done, true)
|
user.lastCron = moment().subtract(1, "d")
|
||||||
|
user.fns.cron()
|
||||||
|
|
||||||
it "Handles unsubscription", (done) ->
|
expect(user.purchased.plan.customerId).to.not.be.ok()
|
||||||
cron = ->
|
payments.createSubscription
|
||||||
user.lastCron = moment().subtract(1, "d")
|
user: user
|
||||||
user.fns.cron()
|
customerId: "123"
|
||||||
|
paymentMethod: "Stripe"
|
||||||
|
sub: {key: 'basic_6mo'}
|
||||||
|
|
||||||
expect(user.purchased.plan.customerId).to.not.be.ok()
|
expect(user.purchased.plan.customerId).to.be.ok()
|
||||||
payments.createSubscription
|
shared.wrap user
|
||||||
user: user
|
cron()
|
||||||
customerId: "123"
|
expect(user.purchased.plan.customerId).to.be.ok()
|
||||||
paymentMethod: "Stripe"
|
payments.cancelSubscription user: user
|
||||||
sub: {key: 'basic_6mo'}
|
cron()
|
||||||
|
expect(user.purchased.plan.customerId).to.be.ok()
|
||||||
|
expect(user.purchased.plan.dateTerminated).to.be.ok()
|
||||||
|
user.purchased.plan.dateTerminated = moment().subtract(2, "d")
|
||||||
|
cron()
|
||||||
|
expect(user.purchased.plan.customerId).to.not.be.ok()
|
||||||
|
payments.createSubscription
|
||||||
|
user: user
|
||||||
|
customerId: "123"
|
||||||
|
paymentMethod: "Stripe"
|
||||||
|
sub: {key: 'basic_6mo'}
|
||||||
|
|
||||||
expect(user.purchased.plan.customerId).to.be.ok()
|
expect(user.purchased.plan.dateTerminated).to.not.be.ok()
|
||||||
shared.wrap user
|
done()
|
||||||
cron()
|
|
||||||
expect(user.purchased.plan.customerId).to.be.ok()
|
|
||||||
payments.cancelSubscription user: user
|
|
||||||
cron()
|
|
||||||
expect(user.purchased.plan.customerId).to.be.ok()
|
|
||||||
expect(user.purchased.plan.dateTerminated).to.be.ok()
|
|
||||||
user.purchased.plan.dateTerminated = moment().subtract(2, "d")
|
|
||||||
cron()
|
|
||||||
expect(user.purchased.plan.customerId).to.not.be.ok()
|
|
||||||
payments.createSubscription
|
|
||||||
user: user
|
|
||||||
customerId: "123"
|
|
||||||
paymentMethod: "Stripe"
|
|
||||||
sub: {key: 'basic_6mo'}
|
|
||||||
|
|
||||||
expect(user.purchased.plan.dateTerminated).to.not.be.ok()
|
|
||||||
done()
|
|
||||||
|
|
|
||||||
|
|
@ -1,178 +1,165 @@
|
||||||
'use strict'
|
'use strict'
|
||||||
#jslint node: true
|
|
||||||
|
|
||||||
#global describe, before, beforeEach, it
|
require("../../website/src/server")
|
||||||
diff = require("deep-diff")
|
|
||||||
|
|
||||||
User = require("../../website/src/models/user").model
|
describe "Todos", ->
|
||||||
Group = require("../../website/src/models/group").model
|
|
||||||
app = require("../../website/src/server")
|
|
||||||
|
|
||||||
describe "API", ->
|
|
||||||
|
|
||||||
before (done) ->
|
before (done) ->
|
||||||
require "../../website/src/server" # start the server
|
registerNewUser done, true
|
||||||
# then wait for it to do it's thing. TODO make a cb-compatible export of server
|
|
||||||
setTimeout done, 2000
|
|
||||||
|
|
||||||
describe "With token and user id", ->
|
beforeEach (done) ->
|
||||||
before (done) ->
|
User.findById user._id, (err, _user) ->
|
||||||
registerNewUser done, true
|
user = _user
|
||||||
|
shared.wrap user
|
||||||
|
done()
|
||||||
|
|
||||||
beforeEach (done) ->
|
it "Archives old todos", (done) ->
|
||||||
User.findById user._id, (err, _user) ->
|
numTasks = _.size(user.todos)
|
||||||
user = _user
|
request.post(baseURL + "/user/batch-update?_v=999").send([
|
||||||
shared.wrap user
|
{
|
||||||
done()
|
op: "addTask"
|
||||||
|
body:
|
||||||
describe "Todos", ->
|
type: "todo"
|
||||||
it "Archives old todos", (done) ->
|
}
|
||||||
numTasks = _.size(user.todos)
|
{
|
||||||
request.post(baseURL + "/user/batch-update?_v=999").send([
|
op: "addTask"
|
||||||
|
body:
|
||||||
|
type: "todo"
|
||||||
|
}
|
||||||
|
{
|
||||||
|
op: "addTask"
|
||||||
|
body:
|
||||||
|
type: "todo"
|
||||||
|
}
|
||||||
|
]).end (res) ->
|
||||||
|
expectCode res, 200
|
||||||
|
# Expect number of todos to be 3 greater than the number the user started with
|
||||||
|
expect(_.size(res.body.todos)).to.be numTasks + 3
|
||||||
|
# Assign new number to numTasks variable
|
||||||
|
numTasks += 3
|
||||||
|
request.post(baseURL + "/user/batch-update?_v=998").send([
|
||||||
|
{
|
||||||
|
op: "score"
|
||||||
|
params:
|
||||||
|
direction: "up"
|
||||||
|
id: res.body.todos[0].id
|
||||||
|
}
|
||||||
|
{
|
||||||
|
op: "score"
|
||||||
|
params:
|
||||||
|
direction: "up"
|
||||||
|
id: res.body.todos[1].id
|
||||||
|
}
|
||||||
|
{
|
||||||
|
op: "score"
|
||||||
|
params:
|
||||||
|
direction: "up"
|
||||||
|
id: res.body.todos[2].id
|
||||||
|
}
|
||||||
|
]).end (res) ->
|
||||||
|
expectCode res, 200
|
||||||
|
expect(_.size(res.body.todos)).to.be numTasks
|
||||||
|
request.post(baseURL + "/user/batch-update?_v=997").send([
|
||||||
{
|
{
|
||||||
op: "addTask"
|
op: "updateTask"
|
||||||
|
params:
|
||||||
|
id: res.body.todos[0].id
|
||||||
|
|
||||||
body:
|
body:
|
||||||
type: "todo"
|
dateCompleted: moment().subtract(4, "days")
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
op: "addTask"
|
op: "updateTask"
|
||||||
|
params:
|
||||||
|
id: res.body.todos[1].id
|
||||||
|
|
||||||
body:
|
body:
|
||||||
type: "todo"
|
dateCompleted: moment().subtract(4, "days")
|
||||||
}
|
|
||||||
{
|
|
||||||
op: "addTask"
|
|
||||||
body:
|
|
||||||
type: "todo"
|
|
||||||
}
|
}
|
||||||
]).end (res) ->
|
]).end (res) ->
|
||||||
|
# Expect todos to be 2 less than the total count
|
||||||
|
expect(_.size(res.body.todos)).to.be numTasks - 2
|
||||||
|
done()
|
||||||
|
|
||||||
|
describe "Creating, Updating, Deleting Todos", ->
|
||||||
|
todo = undefined
|
||||||
|
updateTodo = undefined
|
||||||
|
describe "Creating todos", ->
|
||||||
|
it "Creates a todo", (done) ->
|
||||||
|
request.post(baseURL + "/user/tasks").send(
|
||||||
|
type: "todo"
|
||||||
|
text: "Sample Todo"
|
||||||
|
).end (res) ->
|
||||||
expectCode res, 200
|
expectCode res, 200
|
||||||
# Expect number of todos to be 3 greater than the number the user started with
|
todo = res.body
|
||||||
expect(_.size(res.body.todos)).to.be numTasks + 3
|
expect(todo.text).to.be "Sample Todo"
|
||||||
# Assign new number to numTasks variable
|
expect(todo.id).to.be.ok
|
||||||
numTasks += 3
|
expect(todo.value).to.be 0
|
||||||
request.post(baseURL + "/user/batch-update?_v=998").send([
|
done()
|
||||||
{
|
|
||||||
op: "score"
|
|
||||||
params:
|
|
||||||
direction: "up"
|
|
||||||
id: res.body.todos[0].id
|
|
||||||
}
|
|
||||||
{
|
|
||||||
op: "score"
|
|
||||||
params:
|
|
||||||
direction: "up"
|
|
||||||
id: res.body.todos[1].id
|
|
||||||
}
|
|
||||||
{
|
|
||||||
op: "score"
|
|
||||||
params:
|
|
||||||
direction: "up"
|
|
||||||
id: res.body.todos[2].id
|
|
||||||
}
|
|
||||||
]).end (res) ->
|
|
||||||
expectCode res, 200
|
|
||||||
expect(_.size(res.body.todos)).to.be numTasks
|
|
||||||
request.post(baseURL + "/user/batch-update?_v=997").send([
|
|
||||||
{
|
|
||||||
op: "updateTask"
|
|
||||||
params:
|
|
||||||
id: res.body.todos[0].id
|
|
||||||
|
|
||||||
body:
|
describe "Updating todos", ->
|
||||||
dateCompleted: moment().subtract(4, "days")
|
it "Does not update id of todo", (done) ->
|
||||||
}
|
request.put(baseURL + "/user/tasks/" + todo.id).send(
|
||||||
{
|
id: "a-new-id"
|
||||||
op: "updateTask"
|
).end (res) ->
|
||||||
params:
|
expectCode res, 200
|
||||||
id: res.body.todos[1].id
|
updateTodo = res.body
|
||||||
|
expect(updateTodo.id).to.be todo.id
|
||||||
|
done()
|
||||||
|
|
||||||
body:
|
it "Does not update type of todo", (done) ->
|
||||||
dateCompleted: moment().subtract(4, "days")
|
request.put(baseURL + "/user/tasks/" + todo.id).send(
|
||||||
}
|
type: "habit"
|
||||||
]).end (res) ->
|
).end (res) ->
|
||||||
# Expect todos to be 2 less than the total count
|
expectCode res, 200
|
||||||
expect(_.size(res.body.todos)).to.be numTasks - 2
|
updateTodo = res.body
|
||||||
done()
|
expect(updateTodo.type).to.be todo.type
|
||||||
|
done()
|
||||||
|
|
||||||
describe "Creating, Updating, Deleting Todos", ->
|
it "Does update text, attribute, priority, value, notes", (done) ->
|
||||||
todo = undefined
|
request.put(baseURL + "/user/tasks/" + todo.id).send(
|
||||||
updateTodo = undefined
|
text: "Changed Title"
|
||||||
describe "Creating todos", ->
|
attribute: "int"
|
||||||
it "Creates a todo", (done) ->
|
priority: 1.5
|
||||||
request.post(baseURL + "/user/tasks").send(
|
value: 5
|
||||||
type: "todo"
|
notes: "Some notes"
|
||||||
text: "Sample Todo"
|
).end (res) ->
|
||||||
).end (res) ->
|
expectCode res, 200
|
||||||
expectCode res, 200
|
todo = res.body
|
||||||
todo = res.body
|
expect(todo.text).to.be "Changed Title"
|
||||||
expect(todo.text).to.be "Sample Todo"
|
expect(todo.attribute).to.be "int"
|
||||||
expect(todo.id).to.be.ok
|
expect(todo.priority).to.be 1.5
|
||||||
expect(todo.value).to.be 0
|
expect(todo.value).to.be 5
|
||||||
done()
|
expect(todo.notes).to.be "Some notes"
|
||||||
|
done()
|
||||||
|
|
||||||
describe "Updating todos", ->
|
describe "Deleting todos", ->
|
||||||
it "Does not update id of todo", (done) ->
|
it "Does delete todo", (done) ->
|
||||||
request.put(baseURL + "/user/tasks/" + todo.id).send(
|
request.del(baseURL + "/user/tasks/" + todo.id).send(
|
||||||
id: "a-new-id"
|
).end (res) ->
|
||||||
).end (res) ->
|
expectCode res, 200
|
||||||
expectCode res, 200
|
body = res.body
|
||||||
updateTodo = res.body
|
expect(body).to.be.empty
|
||||||
expect(updateTodo.id).to.be todo.id
|
done()
|
||||||
done()
|
|
||||||
|
|
||||||
it "Does not update type of todo", (done) ->
|
it "Does not delete already deleted todo", (done) ->
|
||||||
request.put(baseURL + "/user/tasks/" + todo.id).send(
|
request.del(baseURL + "/user/tasks/" + todo.id).send(
|
||||||
type: "habit"
|
).end (res) ->
|
||||||
).end (res) ->
|
expectCode res, 404
|
||||||
expectCode res, 200
|
body = res.body
|
||||||
updateTodo = res.body
|
expect(body.err).to.be "Task not found."
|
||||||
expect(updateTodo.type).to.be todo.type
|
done()
|
||||||
done()
|
|
||||||
|
|
||||||
it "Does update text, attribute, priority, value, notes", (done) ->
|
it "Does not update text, attribute, priority, value, notes if task is already deleted", (done) ->
|
||||||
request.put(baseURL + "/user/tasks/" + todo.id).send(
|
request.put(baseURL + "/user/tasks/" + todo.id).send(
|
||||||
text: "Changed Title"
|
text: "New Title"
|
||||||
attribute: "int"
|
attribute: "str"
|
||||||
priority: 1.5
|
priority: 1
|
||||||
value: 5
|
value: 4
|
||||||
notes: "Some notes"
|
notes: "Other notes"
|
||||||
).end (res) ->
|
).end (res) ->
|
||||||
expectCode res, 200
|
expectCode res, 404
|
||||||
todo = res.body
|
body = res.body
|
||||||
expect(todo.text).to.be "Changed Title"
|
expect(body.err).to.be "Task not found."
|
||||||
expect(todo.attribute).to.be "int"
|
done()
|
||||||
expect(todo.priority).to.be 1.5
|
|
||||||
expect(todo.value).to.be 5
|
|
||||||
expect(todo.notes).to.be "Some notes"
|
|
||||||
done()
|
|
||||||
|
|
||||||
describe "Deleting todos", ->
|
|
||||||
it "Does delete todo", (done) ->
|
|
||||||
request.del(baseURL + "/user/tasks/" + todo.id).send(
|
|
||||||
).end (res) ->
|
|
||||||
expectCode res, 200
|
|
||||||
body = res.body
|
|
||||||
expect(body).to.be.empty
|
|
||||||
done()
|
|
||||||
|
|
||||||
it "Does not delete already deleted todo", (done) ->
|
|
||||||
request.del(baseURL + "/user/tasks/" + todo.id).send(
|
|
||||||
).end (res) ->
|
|
||||||
expectCode res, 404
|
|
||||||
body = res.body
|
|
||||||
expect(body.err).to.be "Task not found."
|
|
||||||
done()
|
|
||||||
|
|
||||||
it "Does not update text, attribute, priority, value, notes if task is already deleted", (done) ->
|
|
||||||
request.put(baseURL + "/user/tasks/" + todo.id).send(
|
|
||||||
text: "New Title"
|
|
||||||
attribute: "str"
|
|
||||||
priority: 1
|
|
||||||
value: 4
|
|
||||||
notes: "Other notes"
|
|
||||||
).end (res) ->
|
|
||||||
expectCode res, 404
|
|
||||||
body = res.body
|
|
||||||
expect(body.err).to.be "Task not found."
|
|
||||||
done()
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue