mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-16 22:27:26 +01:00
* move challenge test to separate file * adjust wording of popover text * prevent refunding gems for tavern challenges * adjust ui of challenge creation page * fix bug in cancel function * adjust wording of delete confirmation message
207 lines
6.9 KiB
CoffeeScript
207 lines
6.9 KiB
CoffeeScript
'use strict'
|
|
|
|
app = require("../../website/src/server")
|
|
Group = require("../../website/src/models/group").model
|
|
Challenge = require("../../website/src/models/challenge").model
|
|
|
|
describe "Challenges", ->
|
|
|
|
challenge = undefined
|
|
updateTodo = undefined
|
|
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.equal 1
|
|
expect(group.leader).to.equal 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.equal "Challenge Daily"
|
|
updateTodo = _user.todos[_user.todos.length - 1]
|
|
expect(updateTodo.text).to.equal "Challenge Todo 2"
|
|
expect(challenge.official).to.equal false
|
|
user = _user
|
|
done()
|
|
|
|
it "User updates challenge notes", (done) ->
|
|
updateTodo.notes = "User overriden notes"
|
|
request.put(baseURL + "/user/tasks/" + updateTodo.id).send(updateTodo).end (res) ->
|
|
done() # we'll do the check down below
|
|
|
|
it "Change challenge daily", (done) ->
|
|
challenge.dailys[0].text = "Updated Daily"
|
|
challenge.todos[0].notes = "Challenge Updated Todo Notes"
|
|
request.post(baseURL + "/challenges/" + challenge._id).send(challenge).end (res) ->
|
|
setTimeout (->
|
|
User.findById user._id, (err, _user) ->
|
|
expectCode res, 200
|
|
expect(_user.dailys[_user.dailys.length - 1].text).to.equal "Updated Daily"
|
|
expect(res.body.todos[0].notes).to.equal "Challenge Updated Todo Notes"
|
|
expect(_user.todos[_user.todos.length - 1].notes).to.equal "User overriden notes"
|
|
user = _user
|
|
done()
|
|
), 500 # we have to wait a while for users' tasks to be updated, called async on server
|
|
|
|
it "Shows user notes on challenge page", (done) ->
|
|
request.get(baseURL + "/challenges/" + challenge._id + "/member/" + user._id).end (res) ->
|
|
expect(res.body.todos[res.body.todos.length - 1].notes).to.equal "User overriden notes"
|
|
done()
|
|
|
|
it "Complete To-Dos", (done) ->
|
|
User.findById user._id, (err, _user) ->
|
|
u = _user
|
|
numTasks = (_.size(u.todos))
|
|
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.equal numTasks - 1
|
|
done()
|
|
|
|
it "Challenge deleted, breaks task link", (done) ->
|
|
itThis = this
|
|
request.del(baseURL + "/challenges/" + challenge._id).end (res) ->
|
|
User.findById user._id, (err, user) ->
|
|
len = user.dailys.length - 1
|
|
daily = user.dailys[user.dailys.length - 1]
|
|
expect(daily.challenge.broken).to.equal "CHALLENGE_DELETED"
|
|
|
|
# Now let's handle if challenge was deleted, but didn't get to update all the users (an error)
|
|
unset = $unset: {}
|
|
unset["$unset"]["dailys." + len + ".challenge.broken"] = 1
|
|
User.findByIdAndUpdate user._id, unset, (err, user) ->
|
|
expect(err).to.not.exist
|
|
expect(user.dailys[len].challenge.broken).to.not.exist
|
|
request.post(baseURL + "/user/tasks/" + daily.id + "/up").end (res) ->
|
|
setTimeout (->
|
|
User.findById user._id, (err, user) ->
|
|
expect(user.dailys[len].challenge.broken).to.equal "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) ->
|
|
User.findByIdAndUpdate user._id,
|
|
$set:
|
|
"contributor.admin": true
|
|
, (err, _user) ->
|
|
expect(err).to.not.exist
|
|
async.parallel [
|
|
(cb) ->
|
|
request.post(baseURL + "/challenges").send(
|
|
group: group._id
|
|
dailys: []
|
|
todos: []
|
|
rewards: []
|
|
habits: []
|
|
official: false
|
|
).end (res) ->
|
|
expect(res.body.official).to.equal false
|
|
cb()
|
|
(cb) ->
|
|
request.post(baseURL + "/challenges").send(
|
|
group: group._id
|
|
dailys: []
|
|
todos: []
|
|
rewards: []
|
|
habits: []
|
|
official: true
|
|
).end (res) ->
|
|
expect(res.body.official).to.equal true
|
|
cb()
|
|
], done
|
|
|
|
it "User creates a non-tavern challenge with prize, deletes it, gets refund", (done) ->
|
|
User.findByIdAndUpdate user._id,
|
|
$set:
|
|
"balance": 8
|
|
, (err, user) ->
|
|
expect(err).to.not.be.ok
|
|
request.post(baseURL + "/challenges").send(
|
|
group: group._id
|
|
dailys: []
|
|
todos: []
|
|
rewards: []
|
|
habits: []
|
|
prize: 10
|
|
).end (res) ->
|
|
expect(res.body.prize).to.equal 10
|
|
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.balance).to.equal 5.5
|
|
request.del(baseURL + "/challenges/" + challenge._id).end (res) ->
|
|
User.findById user._id, (err, _user) ->
|
|
expect(_user.balance).to.equal 8
|
|
done()
|
|
|
|
it "User creates a tavern challenge with prize, deletes it, and does not get refund", (done) ->
|
|
User.findByIdAndUpdate user._id,
|
|
$set:
|
|
"balance": 8
|
|
, (err, user) ->
|
|
expect(err).to.not.be.ok
|
|
request.post(baseURL + "/challenges").send(
|
|
group: 'habitrpg'
|
|
dailys: []
|
|
todos: []
|
|
rewards: []
|
|
habits: []
|
|
prize: 10
|
|
).end (res) ->
|
|
expect(res.body.prize).to.equal 10
|
|
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.balance).to.equal 5.5
|
|
request.del(baseURL + "/challenges/" + challenge._id).end (res) ->
|
|
User.findById user._id, (err, _user) ->
|
|
expect(_user.balance).to.equal 5.5
|
|
done()
|