mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-18 07:07:35 +01:00
api.mocha.coffee into archive directory. we could depend on git history, but I want to keep them publicly visible to developers for now since they may contain valuable test worth porting to our new setup.
107 lines
3.5 KiB
CoffeeScript
107 lines
3.5 KiB
CoffeeScript
utils = require('utils')
|
|
|
|
module.exports = ->
|
|
|
|
SYNC_WAIT_TIME = 40
|
|
|
|
baseUrl = 'http://localhost:3000'
|
|
|
|
random = Math.random().toString(36).substring(7)
|
|
|
|
casper = require("casper").create
|
|
clientScripts: 'test/includes/lodash.min.js'
|
|
|
|
getModel = ->
|
|
casper.evaluate ->
|
|
model = window.DERBY.app.model
|
|
{
|
|
_userId: model.get('_userId')
|
|
_user: model.get('_user')
|
|
_todoList: model.get('_todoList')
|
|
_dailyList: model.get('_dailyList')
|
|
_rewardList: model.get('_rewardList')
|
|
_habitList: model.get('_habitList')
|
|
}
|
|
|
|
{
|
|
casper: casper
|
|
|
|
baseUrl: baseUrl
|
|
playUrl: baseUrl + '/?play=1'
|
|
|
|
utils: utils
|
|
|
|
addTasks: (types = 'all', num = 5)->
|
|
if types == 'all'
|
|
types = ['habit', 'daily', 'todo', 'reward']
|
|
types.forEach (type) ->
|
|
i = 0
|
|
casper.repeat num, ->
|
|
casper.fill "form#new-#{type}", {'new-task': "#{type}-#{i}"} # why can't I use true here?
|
|
casper.click "form#new-#{type} input[type=submit]"
|
|
|
|
reset: ->
|
|
casper.evaluate -> window.DERBY.app.reset()
|
|
|
|
getModelDelayed: (cb) ->
|
|
# This time is needed for derby to have enough time to update all it's data.
|
|
# It still happens sometimes that the retrieved model does not contain any
|
|
# data. It might be worth to do some basic checks on the model here, and if
|
|
# it doesn't look OK, wait a bit longer and get it again.
|
|
casper.wait SYNC_WAIT_TIME, ->
|
|
cb(getModel())
|
|
|
|
modelBeforeAfter: (between_cb, done_cb) ->
|
|
that = @
|
|
model = {}
|
|
@getModelDelayed (before) ->
|
|
model.before = before
|
|
casper.then ->
|
|
between_cb()
|
|
that.getModelDelayed (after) ->
|
|
model.after = after
|
|
casper.then -> done_cb(model)
|
|
|
|
runCron: ->
|
|
casper.evaluate ->
|
|
yesterday = new Date()
|
|
yesterday.setDate(yesterday.getDate() - 1);
|
|
window.DERBY.app.model.set('_user.lastCron', yesterday)
|
|
casper.then -> casper.reload()
|
|
|
|
cronBeforeAfter: (cb) ->
|
|
that = @
|
|
model = {}
|
|
@getModelDelayed (before) ->
|
|
model.before = before
|
|
casper.then -> that.runCron()
|
|
casper.then ->
|
|
casper.wait 1100, -> # user's hp is updated after 1s for animation
|
|
model.after = getModel()
|
|
casper.then ->
|
|
casper.test.assertEqual model.before._user.id, model.after._user.id, 'user id equal after cron'
|
|
casper.test.assertEqual model.before._user.tasks.length, model.after._user.tasks.length, "Didn't lose anything on cron"
|
|
cb(model)
|
|
|
|
register: ->
|
|
casper.fill 'form#derby-auth-register',
|
|
username: random
|
|
email: random + '@example.com'
|
|
password: random
|
|
'password-confirmation': random
|
|
, true
|
|
|
|
login: ->
|
|
casper.fill 'form#derby-auth-login',
|
|
username: random
|
|
password: random
|
|
, true
|
|
|
|
deleteOne: (list, typeSelector) ->
|
|
selector = "#{typeSelector} a[data-original-title=\"Delete\"]"
|
|
@modelBeforeAfter (-> casper.click selector), (model) ->
|
|
casper.test.assertEquals Object.keys(model.before._user.tasks).length - 1, Object.keys(model.after._user.tasks).length, "1 #{typeSelector} deleted from user.tasks"
|
|
casper.test.assertEquals model.before._user["#{list}Ids"].length - 1, model.after._user["#{list}Ids"].length, "1 #{typeSelector} deleted from user._typeIds"
|
|
casper.test.assertEquals model.before["_#{list}List"].length - 1, model.after["_#{list}List"].length, "1 #{typeSelector} deleted from _typeList"
|
|
}
|