2013-01-28 22:31:10 +00:00
utils = require ( ' utils ' )
2013-01-26 19:57:47 +00:00
module.exports = ->
2013-02-20 23:56:27 +00:00
SYNC_WAIT_TIME = 40
2013-02-17 16:55:30 +00:00
baseUrl = ' http://localhost:3000 '
2013-01-28 22:31:10 +00:00
random = Math . random ( ) . toString ( 36 ) . substring ( 7 )
2013-01-26 19:57:47 +00:00
2013-01-28 22:31:10 +00:00
casper = require ( " casper " ) . create
2013-01-26 19:57:47 +00:00
clientScripts: ' test/includes/lodash.min.js '
2013-02-17 16:55:30 +00:00
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 ' )
}
2013-01-28 22:31:10 +00:00
{
casper: casper
2013-02-17 16:55:30 +00:00
baseUrl: baseUrl
playUrl: baseUrl + ' /?play=1 '
2013-01-28 22:31:10 +00:00
utils: utils
2013-02-20 23:56:27 +00:00
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?
2013-01-28 22:31:10 +00:00
casper . click " form # new- #{ type } input[type=submit] "
reset: ->
casper . evaluate -> window . DERBY . app . reset ( )
2013-02-17 16:55:30 +00:00
getModelDelayed: (cb) ->
casper . wait SYNC_WAIT_TIME , ->
cb ( getModel ( ) )
2013-01-30 17:11:15 +00:00
modelBeforeAfter: (between_cb, done_cb) ->
that = @
2013-02-17 16:55:30 +00:00
model = { }
@ getModelDelayed (before) ->
model.before = before
2013-01-30 17:11:15 +00:00
casper . then ->
2013-02-17 16:55:30 +00:00
between_cb ( )
that . getModelDelayed (after) ->
model.after = after
casper . then -> done_cb ( model )
2013-01-28 22:31:10 +00:00
runCron: ->
2013-02-20 23:56:27 +00:00
casper . evaluate ->
yesterday = new Date ( )
yesterday . setDate ( yesterday . getDate ( ) - 1 ) ;
window . DERBY . app . model . set ( ' _user.lastCron ' , yesterday )
2013-01-30 17:11:15 +00:00
casper . then -> casper . reload ( )
2013-01-28 22:31:10 +00:00
2013-01-28 23:09:04 +00:00
cronBeforeAfter: (cb) ->
that = @
2013-02-17 16:55:30 +00:00
model = { }
@ getModelDelayed (before) ->
model.before = before
casper . then -> that . runCron ( )
casper . then ->
2013-02-20 23:56:27 +00:00
casper . wait 1100 , -> # user's hp is updated after 1s for animation
2013-02-17 16:55:30 +00:00
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 )
2013-01-28 23:09:04 +00:00
2013-01-28 22:31:10 +00:00
register: ->
casper . fill ' form # derby-auth-register ' ,
username: random
email: random + ' @gmail.com '
' email-confirmation ' : random + ' @gmail.com '
password: random
, true
login: ->
casper . fill ' form # derby-auth-login ' ,
username: random
password: random
, true
2013-02-20 23:56:27 +00:00
deleteOne: (list, typeSelector) ->
selector = " #{ typeSelector } a[data-original-title= \" Delete \" ] "
2013-01-30 17:11:15 +00:00
@ modelBeforeAfter ( -> casper . click selector ) , (model) ->
2013-02-20 23:56:27 +00:00
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 "
2013-01-28 22:31:10 +00:00
}