mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-16 06:07:21 +01:00
Remove coffee from files
This commit is contained in:
@@ -128,7 +128,6 @@ module.exports = function(grunt) {
|
||||
grunt.registerTask('build:test', ['test:prepare:translations', 'build:dev']);
|
||||
|
||||
grunt.registerTask('test:prepare:translations', function() {
|
||||
require('coffee-script');
|
||||
var i18n = require('./website/src/libs/i18n'),
|
||||
fs = require('fs');
|
||||
fs.writeFileSync('test/spec/mocks/translations.js',
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
"bower": "~1.3.12",
|
||||
"browserify": "~12.0.1",
|
||||
"coffee-script": "1.6.x",
|
||||
"coffeeify": "0.6.0",
|
||||
"connect-ratelimit": "0.0.7",
|
||||
"coupon-code": "~0.3.0",
|
||||
"domain-middleware": "~0.1.0",
|
||||
@@ -97,7 +96,6 @@
|
||||
"devDependencies": {
|
||||
"chai": "^3.4.0",
|
||||
"chai-as-promised": "^5.1.0",
|
||||
"coffee-coverage": "~0.4.2",
|
||||
"coveralls": "^2.11.2",
|
||||
"csv": "~0.3.6",
|
||||
"deep-diff": "~0.1.4",
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
if(process.env.COVERAGE) {
|
||||
require('coffee-coverage').register({
|
||||
path: 'abbr',
|
||||
basePath: __dirname + '/common/script',
|
||||
initAll: true,
|
||||
});
|
||||
}
|
||||
@@ -1,5 +1,3 @@
|
||||
import 'coffee-script';
|
||||
|
||||
import mongoose from 'mongoose';
|
||||
import autoinc from 'mongoose-id-autoinc';
|
||||
import logging from '../website/src/libs/logging';
|
||||
|
||||
@@ -19,7 +19,6 @@ const shared = {
|
||||
};
|
||||
|
||||
gulp.task('lint:client', () => {
|
||||
// Ignore .coffee files
|
||||
return gulp.src(['./website/public/js/**/*.js'])
|
||||
.pipe(eslint(defaultsDeep({
|
||||
env: {
|
||||
@@ -31,7 +30,6 @@ gulp.task('lint:client', () => {
|
||||
});
|
||||
|
||||
gulp.task('lint:server', () => {
|
||||
// Ignore .coffee files
|
||||
return gulp.src(['./website/src/**/*.js'])
|
||||
.pipe(eslint(defaultsDeep({
|
||||
env: {
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
These are tests which are no longer used. While we could delete them and depend on git history for later lookup,
|
||||
I think it's important these are visible to developers since they may have valuable tests which haven't been ported
|
||||
to our new setup. Once a file is ported or determined useless, feel free to delete.
|
||||
@@ -1,655 +0,0 @@
|
||||
_ = require 'lodash'
|
||||
expect = require 'expect.js'
|
||||
async = require 'async'
|
||||
superagentDefaults = require 'superagent-defaults'
|
||||
|
||||
request = superagentDefaults()
|
||||
|
||||
conf = require("nconf")
|
||||
conf.argv().env().file({file: __dirname + '../config.json'}).defaults
|
||||
conf.set('port','1337')
|
||||
|
||||
# Override normal ENV values with nconf ENV values (ENV values are used the same way without nconf)
|
||||
#FIXME can't get nconf file above to load...
|
||||
process.env.BASE_URL = conf.get("BASE_URL")
|
||||
process.env.FACEBOOK_KEY = conf.get("FACEBOOK_KEY")
|
||||
process.env.FACEBOOK_SECRET = conf.get("FACEBOOK_SECRET")
|
||||
process.env.NODE_DB_URI = 'mongodb://localhost/habitrpg'
|
||||
|
||||
User = require('../../src/models/user').model
|
||||
Group = require('../../src/models/group').model
|
||||
Challenge = require('../../src/models/challenge').model
|
||||
|
||||
app = require '../../src/server'
|
||||
|
||||
## monkey-patch expect.js for better diffs on mocha
|
||||
## see: https://github.com/LearnBoost/expect.js/pull/34
|
||||
#origBe = expect.Assertion::be
|
||||
#expect.Assertion::be = expect.Assertion::equal = (obj) ->
|
||||
# @_expected = obj
|
||||
# origBe.call this, obj
|
||||
|
||||
# Custom modules
|
||||
shared = require 'habitrpg-shared'
|
||||
|
||||
###### Helpers & Variables ######
|
||||
|
||||
model = null
|
||||
uuid = null
|
||||
taskPath = null
|
||||
baseURL = 'http://localhost:3000/api/v2'
|
||||
|
||||
###
|
||||
expect().eql expects object keys to be in the correct order, this sorts that out
|
||||
###
|
||||
|
||||
expectUserEqual = (u1, u2) ->
|
||||
[u1, u2] = _.map [u1, u2], (obj) ->
|
||||
'update__ stats.toNextLevel stats.maxHealth __v'.split(' ').forEach (path) ->
|
||||
helpers.dotSet path, null, obj
|
||||
sorted = {}
|
||||
_.each _.keys(obj).sort(), (k) -> sorted[k] = obj[k]
|
||||
sorted.tasks = _.sortBy sorted.tasks, 'id'
|
||||
sorted
|
||||
# console.log {u1, u2}
|
||||
expect(u1).to.eql(u2)
|
||||
|
||||
expectSameValues = (obj1, obj2, paths) ->
|
||||
_.each paths, (k) ->
|
||||
expect(helpers.dotGet(k,obj1)).to.eql helpers.dotGet(k,obj2)
|
||||
|
||||
expectCode = (res, code) ->
|
||||
expect(res.body.err).to.be undefined if code is 200
|
||||
expect(res.statusCode).to.be code
|
||||
|
||||
###### Specs ######
|
||||
|
||||
describe 'API', ->
|
||||
user = null
|
||||
_id = null
|
||||
apiToken = null
|
||||
username = null
|
||||
password = null
|
||||
|
||||
registerNewUser = (cb, main=true)->
|
||||
randomID = shared.uuid()
|
||||
[username,password] = [randomID,randomID] if main
|
||||
request.post("#{baseURL}/register")
|
||||
.set('Accept', 'application/json')
|
||||
.send({
|
||||
username: randomID
|
||||
password: randomID
|
||||
confirmPassword: randomID
|
||||
email: "#{randomID}@gmail.com"
|
||||
})
|
||||
.end (res) ->
|
||||
return cb(null,res.body) unless main
|
||||
{_id,apiToken} = res.body
|
||||
console.log {_id,apiToken}
|
||||
User.findOne {_id, apiToken}, (err, _user) ->
|
||||
expect(err).to.not.be.ok
|
||||
user = _user
|
||||
request
|
||||
.set('Accept', 'application/json')
|
||||
.set('X-API-User', _id)
|
||||
.set('X-API-Key', apiToken)
|
||||
cb null, res.body
|
||||
|
||||
before (done)->
|
||||
require '../../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', ->
|
||||
it '/api/v2/status', (done) ->
|
||||
request.get("#{baseURL}/status")
|
||||
.set('Accept', 'application/json')
|
||||
.end (res) ->
|
||||
expect(res.statusCode).to.be 200
|
||||
expect(res.body.status).to.be 'up'
|
||||
done()
|
||||
|
||||
it '/api/v2/user', (done) ->
|
||||
request.get("#{baseURL}/user")
|
||||
.set('Accept', 'application/json')
|
||||
.end (res) ->
|
||||
expect(res.statusCode).to.be 401
|
||||
expect(res.body.err).to.be 'You must include a token and uid (user id) in your request'
|
||||
done()
|
||||
|
||||
describe 'With token and user id', ->
|
||||
currentUser = null
|
||||
|
||||
before (done) ->
|
||||
registerNewUser(done,true)
|
||||
|
||||
beforeEach (done) ->
|
||||
User.findById _id, (err,_user) ->
|
||||
currentUser = _user
|
||||
done()
|
||||
|
||||
############
|
||||
# Groups
|
||||
############
|
||||
|
||||
describe 'Groups', ->
|
||||
group = undefined
|
||||
|
||||
before (done) ->
|
||||
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 'Challenges', ->
|
||||
challenge = undefined
|
||||
updateTodo = undefined
|
||||
|
||||
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', notes:'Challenge Notes'}]
|
||||
rewards: []
|
||||
habits: []
|
||||
official: true
|
||||
})
|
||||
.end (res) ->
|
||||
expectCode res, 200
|
||||
async.parallel [
|
||||
(cb) -> User.findById _id, cb
|
||||
(cb) -> Challenge.findById res.body._id, cb
|
||||
], (err, results) ->
|
||||
[_user,challenge] = [results[0],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')
|
||||
expect(challenge.official).to.be false
|
||||
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 _id, (err,_user) ->
|
||||
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')
|
||||
currentUser = _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/#{_id}")
|
||||
.end (res) ->
|
||||
expect(res.body.todos[res.body.todos.length-1].notes).to.be('User overriden notes')
|
||||
done()
|
||||
|
||||
it 'Complete To-Dos', (done) ->
|
||||
u = currentUser
|
||||
request.post("#{baseURL}/user/tasks/#{u.todos[0].id}/up").end (res) ->
|
||||
request.post("#{baseURL}/user/tasks/#{u.todos[1].id}/up").end (res) ->
|
||||
request.post("#{baseURL}/user/tasks/").send({type:'todo'}).end (res) ->
|
||||
request.post("#{baseURL}/user/tasks/clear-completed").end (res) ->
|
||||
expect(_.size res.body).to.be 2
|
||||
done()
|
||||
|
||||
it 'Admin creates a challenge', (done) ->
|
||||
User.findByIdAndUpdate _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
|
||||
|
||||
|
||||
describe 'Quests', ->
|
||||
party = undefined
|
||||
participating = []
|
||||
notParticipating = []
|
||||
|
||||
it 'Invites some members', (done) ->
|
||||
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
|
||||
async.parallel [
|
||||
(cb2) -> request.post("#{baseURL}/groups/#{group._id}/invite?uuid=#{party[0]._id}").end (-> cb2())
|
||||
(cb2) -> request.post("#{baseURL}/groups/#{group._id}/invite?uuid=#{party[1]._id}").end (-> cb2())
|
||||
(cb2) -> request.post("#{baseURL}/groups/#{group._id}/invite?uuid=#{party[2]._id}").end (-> cb2())
|
||||
], cb
|
||||
|
||||
# Accept / Reject
|
||||
(results, cb) ->
|
||||
#series since they'll be modifying the same group record
|
||||
async.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 (res) -> cb2()
|
||||
m
|
||||
, []), cb
|
||||
|
||||
# Make sure the invites stuck
|
||||
(whatever, cb) ->
|
||||
Group.findById group._id, (err, g) ->
|
||||
expect(g.members.length).to.be 4
|
||||
cb()
|
||||
|
||||
], (err, results) ->
|
||||
expect(err).to.be.ok
|
||||
done()
|
||||
|
||||
it 'Starts a quest', (done) ->
|
||||
async.waterfall [
|
||||
(cb)->
|
||||
request.post("#{baseURL}/groups/#{group._id}/questAccept?key=evilsanta")
|
||||
.end (res) ->
|
||||
expectCode(res, 401)
|
||||
User.findByIdAndUpdate _id, {$set:'items.quests.evilsanta':1}, cb
|
||||
(_user,cb)->
|
||||
request.post("#{baseURL}/groups/#{group._id}/questAccept?key=evilsanta")
|
||||
.end (res) ->
|
||||
expectCode(res, 200)
|
||||
Group.findById group._id,cb
|
||||
(_group,cb)->
|
||||
group = _group #refresh local group
|
||||
expect(group.quest.key).to.be 'evilsanta'
|
||||
|
||||
async.series (_.reduce party, (m,v,i) ->
|
||||
m.push (cb2) ->
|
||||
request.post("#{baseURL}/groups/#{group._id}/questAccept")
|
||||
.set('X-API-User', party[i]._id)
|
||||
.set('X-API-Key', party[i].apiToken)
|
||||
.end (res) -> cb2()
|
||||
m
|
||||
, []), cb
|
||||
|
||||
], done
|
||||
|
||||
it "Doesn't include people who aren't participating"
|
||||
|
||||
|
||||
# ############
|
||||
# # Batch Update
|
||||
# ############
|
||||
#
|
||||
# describe 'Batch Update', ->
|
||||
#
|
||||
# it 'POST /api/v1/batch-update', (done) ->
|
||||
# userBefore = _.cloneDeep(currentUser)
|
||||
#
|
||||
# ops = [
|
||||
# # Good scores
|
||||
# op: 'score', params: {id:user.habits[0].id, direction: 'up'}
|
||||
# op: 'score', params: {id:user.habits[1].id, direction: 'down'}
|
||||
# op: 'score', params: {id:user.dailys[0].id, direction: 'up'}
|
||||
# op: 'score', params: {id:user.todos[0].id, direction: 'up'}
|
||||
# ]
|
||||
#
|
||||
# request.post("#{baseURL}/user/batch-update")
|
||||
# .send(ops)
|
||||
# .end (res) ->
|
||||
# expect(res.body.err).to.be undefined
|
||||
# expect(res.statusCode).to.be 200
|
||||
# #expectUserEqual(userBefore, res.body)
|
||||
# done()
|
||||
#
|
||||
#
|
||||
# ############
|
||||
# # To Be Updated (these are old v1 tests which haven't been touched in over 6 months, need to be portd to new API tests or deleted)
|
||||
# ############
|
||||
#
|
||||
# it.skip 'POST /api/v2/batch-update (handles corrupt values)', (done) ->
|
||||
# registerNewUser (_res) ->
|
||||
# # corrupt the tasks, and let's see how the server handles this
|
||||
# ids = _res.dailyIds
|
||||
# _res.tasks[ids[0]].value = NaN
|
||||
# _res.tasks[ids[1]].value = undefined
|
||||
# _res.tasks[ids[2]] = {}
|
||||
# _res.tasks["undefined"] = {}
|
||||
#
|
||||
# _res.stats.hp = _res.stats.gp = NaN
|
||||
#
|
||||
# _res.lastCron = +new Date('08/13/2013')
|
||||
#
|
||||
# ops = [
|
||||
# op: 'score', task: _res.tasks[ids[0]], dir: 'up'
|
||||
# ]
|
||||
#
|
||||
# model.set "users.#{_res.id}", _res, ->
|
||||
# request.post("#{baseURL}/user/batch-update")
|
||||
# .set('Accept', 'application/json')
|
||||
# .set('X-API-User', _res.id)
|
||||
# .set('X-API-Key', _res.apiToken)
|
||||
# .send(ops)
|
||||
# .end (res) ->
|
||||
# expect(res.statusCode).to.be 200
|
||||
# console.log {stats:res.body.stats, tasks:res.body.tasks}
|
||||
# done()
|
||||
#
|
||||
#
|
||||
# #FIXME figure out how to compare the objects
|
||||
# it.skip 'GET /api/v1/user', (done) ->
|
||||
# request.get("#{baseURL}/user")
|
||||
# .end (res) ->
|
||||
# expect(res.body.err).to.be undefined
|
||||
# expect(res.statusCode).to.be 200
|
||||
# expect(res.body.id).not.to.be.empty()
|
||||
# self = _.clone(currentUser)
|
||||
# delete self.apiToken
|
||||
# self.stats.toNextLevel = 150
|
||||
# self.stats.maxHealth = 50
|
||||
#
|
||||
# expectUserEqual(res.body, self)
|
||||
# done()
|
||||
#
|
||||
# it.skip 'GET /api/v1/user/task/:id', (done) ->
|
||||
# tid = _.pluck(currentUser.tasks, 'id')[0]
|
||||
# request.get("#{baseURL}/user/task/#{tid}")
|
||||
# .end (res) ->
|
||||
# expect(res.body.err).to.be undefined
|
||||
# expect(res.statusCode).to.be 200
|
||||
# expect(res.body).to.eql currentUser.tasks[tid]
|
||||
# done()
|
||||
#
|
||||
# it.skip 'POST /api/v1/user/task', (done) ->
|
||||
# request.post("#{baseURL}/user/task")
|
||||
# .send({title: 'Title', text: 'Text', type: 'habit'})
|
||||
# .end (res) ->
|
||||
# query = model.query('users').withIdAndToken(currentUser.id, currentUser.apiToken)
|
||||
# query.fetch (err, user) ->
|
||||
# expect(res.body.err).to.be undefined
|
||||
# expect(res.statusCode).to.be 201
|
||||
# expect(res.body.id).not.to.be.empty()
|
||||
# # Ensure that user owns the newly created object
|
||||
# saved = user.get("tasks.#{res.body.id}")
|
||||
# expect(saved).to.be.an('object')
|
||||
# done()
|
||||
#
|
||||
# it.skip 'POST /api/v1/user/task (without type)', (done) ->
|
||||
# request.post("#{baseURL}/user/task")
|
||||
# .send({})
|
||||
# .end (res) ->
|
||||
# expect(res.body.err).to.be 'type must be habit, todo, daily, or reward'
|
||||
# expect(res.statusCode).to.be 400
|
||||
# done()
|
||||
#
|
||||
# it.skip 'POST /api/v1/user/task (only type)', (done) ->
|
||||
# request.post("#{baseURL}/user/task")
|
||||
# .send(type: 'habit')
|
||||
# .end (res) ->
|
||||
# query = model.query('users').withIdAndToken(currentUser.id, currentUser.apiToken)
|
||||
# query.fetch (err, user) ->
|
||||
# expect(res.body.err).to.be undefined
|
||||
# expect(res.statusCode).to.be 201
|
||||
# expect(res.body.id).not.to.be.empty()
|
||||
# # Ensure that user owns the newly created object
|
||||
# expect(user.get().tasks[res.body.id]).to.be.an('object')
|
||||
# # Ensure that value gets set to 0 since not otherwise specified
|
||||
# expect(user.get().tasks[res.body.id].value).to.be.equal(0)
|
||||
# done()
|
||||
#
|
||||
# it.skip 'PUT /api/v1/user/task/:id', (done) ->
|
||||
# tid = _.pluck(currentUser.tasks, 'id')[0]
|
||||
# request.put("#{baseURL}/user/task/#{tid}")
|
||||
# .send(text: 'bye')
|
||||
# .end (res) ->
|
||||
# expect(res.body.err).to.be undefined
|
||||
# expect(res.statusCode).to.be 200
|
||||
# currentUser.tasks[tid].text = 'bye'
|
||||
# expectSameValues res.body, currentUser.tasks[tid], ['id','type','text']
|
||||
# #expect(res.body).to.eql currentUser.tasks[tid]
|
||||
# done()
|
||||
#
|
||||
# it.skip 'PUT /api/v1/user/task/:id (shouldnt update type)', (done) ->
|
||||
# tid = _.pluck(currentUser.tasks, 'id')[1]
|
||||
# type = if currentUser.tasks[tid].type is 'habit' then 'daily' else 'habit'
|
||||
# request.put("#{baseURL}/user/task/#{tid}")
|
||||
# .send(type: type, text: 'fishman')
|
||||
# .end (res) ->
|
||||
# expect(res.body.err).to.be undefined
|
||||
# expect(res.statusCode).to.be 200
|
||||
# currentUser.tasks[tid].text = 'fishman'
|
||||
# expect(res.body).to.eql currentUser.tasks[tid]
|
||||
# done()
|
||||
#
|
||||
# it.skip 'PUT /api/v1/user/task/:id (update notes)', (done) ->
|
||||
# tid = _.pluck(currentUser.tasks, 'id')[2]
|
||||
# request.put("#{baseURL}/user/task/#{tid}")
|
||||
# .send(text: 'hi',notes:'foobar matey')
|
||||
# .end (res) ->
|
||||
# expect(res.body.err).to.be undefined
|
||||
# expect(res.statusCode).to.be 200
|
||||
# currentUser.tasks[tid].text = 'hi'
|
||||
# currentUser.tasks[tid].notes = 'foobar matey'
|
||||
# expect(res.body).to.eql currentUser.tasks[tid]
|
||||
# done()
|
||||
#
|
||||
# it.skip 'GET /api/v1/user/tasks', (done) ->
|
||||
# request.get("#{baseURL}/user/tasks")
|
||||
# .end (res) ->
|
||||
# query = model.query('users').withIdAndToken(currentUser.id, currentUser.apiToken)
|
||||
# query.fetch (err, user) ->
|
||||
# expect(res.body.err).to.be undefined
|
||||
# expect(user.get()).to.be.ok()
|
||||
# expect(res.statusCode).to.be 200
|
||||
# model.ref '_user', user
|
||||
# tasks = []
|
||||
# for type in ['habit','todo','daily','reward']
|
||||
# model.refList "_#{type}List", "_user.tasks", "_user.#{type}Ids"
|
||||
# tasks = tasks.concat model.get("_#{type}List")
|
||||
# # Ensure that user owns the tasks
|
||||
# expect(res.body.length).to.equal tasks.length
|
||||
# # Ensure that the two sets are equal
|
||||
# expect(_.difference(_.pluck(res.body,'id'), _.pluck(tasks,'id')).length).to.equal 0
|
||||
# done()
|
||||
#
|
||||
# it.skip 'GET /api/v1/user/tasks (todos)', (done) ->
|
||||
# request.get("#{baseURL}/user/tasks")
|
||||
# .query(type:'todo')
|
||||
# .end (res) ->
|
||||
# query = model.query('users').withIdAndToken(currentUser.id, currentUser.apiToken)
|
||||
# query.fetch (err, user) ->
|
||||
# expect(res.body.err).to.be undefined
|
||||
# expect(res.statusCode).to.be 200
|
||||
# model.ref '_user', user
|
||||
# model.refList "_todoList", "_user.tasks", "_user.todoIds"
|
||||
# tasks = model.get("_todoList")
|
||||
# # Ensure that user owns the tasks
|
||||
# expect(res.body.length).to.equal tasks.length
|
||||
# # Ensure that the two sets are equal
|
||||
# expect(_.difference(_.pluck(res.body,'id'), _.pluck(tasks,'id')).length).to.equal 0
|
||||
# done()
|
||||
#
|
||||
# it.skip 'DELETE /api/v1/user/task/:id', (done) ->
|
||||
# tid = currentUser.habitIds[2]
|
||||
# request.del("#{baseURL}/user/task/#{tid}")
|
||||
# .end (res) ->
|
||||
# expect(res.body.err).to.be undefined
|
||||
# expect(res.statusCode).to.be 204
|
||||
# query = model.query('users').withIdAndToken(currentUser.id, currentUser.apiToken)
|
||||
# query.fetch (err, user) ->
|
||||
# expect(user.get('habitIds').indexOf(tid)).to.be -1
|
||||
# expect(user.get("tasks.#{tid}")).to.be undefined
|
||||
# done()
|
||||
#
|
||||
# it.skip 'DELETE /api/v1/user/task/:id (no task found)', (done) ->
|
||||
# tid = "adsfasdfjunkshouldntbeatask"
|
||||
# request.del("#{baseURL}/user/task/#{tid}")
|
||||
# .end (res) ->
|
||||
# expect(res.statusCode).to.be 400
|
||||
# expect(res.body.err).to.be 'No task found.'
|
||||
# done()
|
||||
#
|
||||
# it.skip 'POST /api/v1/user/task/:id/up (habit)', (done) ->
|
||||
# tid = currentUser.habitIds[0]
|
||||
# request.post("#{baseURL}/user/task/#{tid}/up")
|
||||
# .send({})
|
||||
# .end (res) ->
|
||||
# expect(res.body.err).to.be undefined
|
||||
# expect(res.statusCode).to.be 200
|
||||
# expect(res.body).to.eql { gp: 1, exp: 7.5, lvl: 1, hp: 50, delta: 1 }
|
||||
# done()
|
||||
#
|
||||
# it.skip 'POST /api/v1/user/task/:id/up (daily)', (done) ->
|
||||
# tid = currentUser.dailyIds[0]
|
||||
# request.post("#{baseURL}/user/task/#{tid}/up")
|
||||
# .send({})
|
||||
# .end (res) ->
|
||||
# expect(res.body.err).to.be undefined
|
||||
# expect(res.statusCode).to.be 200
|
||||
# expect(res.body).to.eql { gp: 2, exp: 15, lvl: 1, hp: 50, delta: 1 }
|
||||
# query = model.query('users').withIdAndToken(currentUser.id, currentUser.apiToken)
|
||||
# query.fetch (err, user) ->
|
||||
# expect(user.get("tasks.#{tid}.completed")).to.be true
|
||||
# done()
|
||||
#
|
||||
# it.skip 'POST /api/v1/user/task (array)', (done) ->
|
||||
# habitId = currentUser.habitIds[0]
|
||||
# dailyId = currentUser.dailyIds[0]
|
||||
# arr = [{
|
||||
# id: habitId
|
||||
# text: 'hello'
|
||||
# notes: 'note'
|
||||
# },{
|
||||
# text: 'new task'
|
||||
# notes: 'notes!'
|
||||
# },{
|
||||
# id: dailyId
|
||||
# del: true
|
||||
# }]
|
||||
#
|
||||
# request.post("#{baseURL}/user/tasks")
|
||||
# .send(arr)
|
||||
# .end (res) ->
|
||||
# expect(res.body.err).to.be undefined
|
||||
# expect(res.statusCode).to.be 201
|
||||
#
|
||||
# expectSameValues res.body[0], {id: habitId,text: 'hello',notes: 'note'}, ['id','text','notes']
|
||||
# expect(res.body[1].id).to.be.a 'string'
|
||||
# expect(res.body[1].text).to.be 'new task'
|
||||
# expect(res.body[1].notes).to.be 'notes!'
|
||||
# expect(res.body[2]).to.eql deleted: true
|
||||
#
|
||||
# query = model.query('users').withIdAndToken(currentUser.id, currentUser.apiToken)
|
||||
# query.fetch (err, user) ->
|
||||
# expectSameValues user.get("tasks.#{habitId}"), {id: habitId,text: 'hello',notes: 'note'}, ['id','text','notes']
|
||||
# expect(user.get("tasks.#{dailyId}")).to.be undefined
|
||||
# expectSameValues user.get("tasks.#{res.body[1].id}"), {id: res.body[1].id, text: 'new task', notes: 'notes!'}, ['id','text','notes']
|
||||
# done()
|
||||
#
|
||||
# it.skip 'PUT /api/v1/user (bad path)', (done) ->
|
||||
# # These updates should not save, as per the API changes
|
||||
# userUpdates =
|
||||
# stats: hp: 30
|
||||
# flags: itemsEnabled: true
|
||||
# tasks: [{
|
||||
# text: 'hello2'
|
||||
# notes: 'note2'
|
||||
# }]
|
||||
#
|
||||
# request.put("#{baseURL}/user")
|
||||
# .send(userUpdates)
|
||||
# .end (res) ->
|
||||
# expect(res.body.err).to.be.ok()
|
||||
# expect(res.statusCode).to.be 500
|
||||
# done()
|
||||
#
|
||||
# it.skip 'PUT /api/v1/user', (done) ->
|
||||
# userBefore = {}
|
||||
# query = model.query('users').withIdAndToken(currentUser.id, currentUser.apiToken)
|
||||
# query.fetch (err, user) ->
|
||||
# userBefore = user.get()
|
||||
#
|
||||
# habitId = currentUser.habitIds[0]
|
||||
# dailyId = currentUser.dailyIds[0]
|
||||
# updates = {}
|
||||
# updates['stats.hp'] = 30
|
||||
# updates['flags.itemsEnabled'] = true
|
||||
# updates["tasks.#{habitId}.text"] = 'hello2'
|
||||
# updates["tasks.#{habitId}.notes"] = 'note2'
|
||||
#
|
||||
# request.put("#{baseURL}/user")
|
||||
# .send(updates)
|
||||
# .end (res) ->
|
||||
# expect(res.body.err).to.be undefined
|
||||
# expect(res.statusCode).to.be 200
|
||||
# changesWereMade = (obj) ->
|
||||
# expect(obj.stats.hp).to.be 30
|
||||
# expect(obj.flags.itemsEnabled).to.be true
|
||||
# expectSameValues _.find(obj.tasks,{id:habitId}), {id: habitId,text: 'hello2',notes: 'note2'}, ['id','text','notes']
|
||||
# changesWereMade res.body
|
||||
# query.fetch (err, user) ->
|
||||
# changesWereMade user.get()
|
||||
# done()
|
||||
#
|
||||
# it.skip 'POST /api/v1/user/auth/local', (done) ->
|
||||
# userAuth = {username, password}
|
||||
# request.post("#{baseURL}/user/auth/local")
|
||||
# .set('Accept', 'application/json')
|
||||
# .send(userAuth)
|
||||
# .end (res) ->
|
||||
# expect(res.body.err).to.be undefined
|
||||
# expect(res.statusCode).to.be 200
|
||||
# expect(res.body.id).to.be currentUser.id
|
||||
# expect(res.body.token).to.be currentUser.apiToken
|
||||
# done()
|
||||
#
|
||||
# it.skip 'POST /api/v1/user/auth/facebook', (done) ->
|
||||
# id = shared.uuid()
|
||||
# userAuth = facebook_id: 12345, name: 'Tyler Renelle', email: 'x@y.com'
|
||||
# newUser = helpers.newUser(true)
|
||||
# newUser.id = id
|
||||
# newUser.auth = facebook:
|
||||
# id: userAuth.facebook_id
|
||||
# name: userAuth.name
|
||||
# email: userAuth.email
|
||||
# model.set "users.#{id}", newUser, ->
|
||||
#
|
||||
# request.post("#{baseURL}/user/auth/facebook")
|
||||
# .set('Accept', 'application/json')
|
||||
# .send(userAuth)
|
||||
# .end (res) ->
|
||||
# expect(res.body.err).to.be undefined
|
||||
# expect(res.statusCode).to.be 200
|
||||
# expect(res.body.id).to.be newUser.id
|
||||
# #expect(res.body.token).to.be newUser.apiToken
|
||||
# done()
|
||||
#
|
||||
#
|
||||
@@ -1,45 +0,0 @@
|
||||
helpers = new require('./test/casper/helpers')()
|
||||
casper = helpers.casper
|
||||
utils = helpers.utils
|
||||
url = helpers.playUrl
|
||||
|
||||
casper.start url
|
||||
|
||||
# ---------- Daily ------------
|
||||
casper.then ->
|
||||
helpers.reset()
|
||||
helpers.addTasks(['daily'])
|
||||
|
||||
# Gained exp on +daily
|
||||
casper.then ->
|
||||
helpers.modelBeforeAfter (-> casper.click '.dailys input[type="checkbox"]'), (model) ->
|
||||
casper.test.assertEquals model.before._user.stats.hp, model.after._user.stats.hp, '+daily =hp'
|
||||
casper.test.assert model.before._user.stats.exp < model.after._user.stats.exp, '+daily +exp'
|
||||
casper.test.assert model.before._user.stats.gp < model.after._user.stats.gp, '+daily +gp'
|
||||
|
||||
# -daily acts as undo
|
||||
casper.then ->
|
||||
helpers.modelBeforeAfter (-> casper.click '.dailys input[type="checkbox"]'), (model) ->
|
||||
casper.test.assertEquals model.before._user.stats.hp, model.after._user.stats.hp, '-daily =hp'
|
||||
casper.test.assert model.before._user.stats.exp > model.after._user.stats.exp, '-daily -exp'
|
||||
casper.test.assert model.before._user.stats.gp > model.after._user.stats.gp, '-daily -gp'
|
||||
|
||||
# ---------- Cron ------------
|
||||
casper.then ->
|
||||
helpers.reset()
|
||||
helpers.addTasks(['daily'])
|
||||
|
||||
casper.then ->
|
||||
helpers.cronBeforeAfter (model) ->
|
||||
casper.then ->
|
||||
casper.test.assert model.before._user.stats.hp > model.after._user.stats.hp, 'daily:cron:hp lost value'
|
||||
|
||||
# Go through all the dailys, all of them are uncompleted, so should all get a negative value
|
||||
casper.echo "Testing all uncompleted dailys after cron"
|
||||
for id in model.before._user.dailyIds
|
||||
casper.test.assertEquals model.before._user.tasks[id].value, 0, "daily:cron:daily value before was 0"
|
||||
casper.test.assert model.after._user.tasks[id].value < 0, "daily:cron:daily value after is negative"
|
||||
|
||||
# ---------- Run ------------
|
||||
casper.run ->
|
||||
casper.test.renderResults true
|
||||
@@ -1,38 +0,0 @@
|
||||
helpers = new require('./test/casper/helpers')()
|
||||
casper = helpers.casper
|
||||
utils = helpers.utils
|
||||
url = helpers.playUrl
|
||||
|
||||
# ---------- Basic Reset Test ------------
|
||||
|
||||
casper.start url, ->
|
||||
casper.test.assertTitle 'HabitRPG | Gamify Your Life', 'Page Title'
|
||||
|
||||
# Gain some GP and lose some HP
|
||||
casper.then ->
|
||||
casper.repeat 5, -> casper.click '.habits a[data-direction="down"]'
|
||||
casper.repeat 5, -> casper.click '.habits a[data-direction="up"]'
|
||||
|
||||
# Reset
|
||||
casper.then ->
|
||||
helpers.reset()
|
||||
|
||||
# Test that reset worked
|
||||
casper.then ->
|
||||
model = helpers.getModelDelayed (model) ->
|
||||
casper.echo 'testing user after reset'
|
||||
casper.test.assertEqual model._user.tasks, {}, 'no tasks'
|
||||
casper.test.assertEqual model._user.stats, {hp:50, gp:0, exp:0, lvl:1}, 'stats'
|
||||
|
||||
|
||||
# ---------- Misc Pages ------------
|
||||
|
||||
casper.thenOpen "#{helpers.baseUrl}/terms", ->
|
||||
casper.test.assertTitle "Terms Of Use", "terms page works"
|
||||
|
||||
casper.thenOpen "#{helpers.baseUrl}/privacy", ->
|
||||
casper.test.assertTitle "Privacy Policy", "privacy page works"
|
||||
|
||||
# ---------- Run ------------
|
||||
casper.run ->
|
||||
casper.test.renderResults true
|
||||
@@ -1,40 +0,0 @@
|
||||
helpers = new require('./test/casper/helpers')()
|
||||
casper = helpers.casper
|
||||
utils = helpers.utils
|
||||
url = helpers.playUrl
|
||||
|
||||
casper.start url
|
||||
|
||||
# # ---------- Register ------------
|
||||
# casper.then -> helpers.register()
|
||||
# casper.then -> user = helpers.getUser()
|
||||
|
||||
# ---------- Habits ------------
|
||||
casper.then ->
|
||||
helpers.reset()
|
||||
helpers.addTasks(['habit'])
|
||||
|
||||
casper.then ->
|
||||
helpers.modelBeforeAfter (-> casper.click '.habits a[data-direction="down"]'), (model) ->
|
||||
casper.test.assert model.before._user.stats.hp > model.after._user.stats.hp, '-habit -hp'
|
||||
casper.test.assertEquals model.before._user.stats.exp, model.after._user.stats.exp, '-habit =exp'
|
||||
casper.test.assertEquals model.before._user.stats.gp, model.after._user.stats.gp, '-habit =gp'
|
||||
|
||||
casper.then ->
|
||||
helpers.modelBeforeAfter (-> casper.click '.habits a[data-direction="up"]'), (model) ->
|
||||
casper.test.assert model.before._user.stats.exp < model.after._user.stats.exp, '+habit +exp'
|
||||
casper.test.assert model.before._user.stats.gp < model.after._user.stats.gp, '+habit +gp'
|
||||
casper.test.assertEquals model.before._user.stats.hp, model.after._user.stats.hp, '+habit =hp'
|
||||
|
||||
# Test Death
|
||||
casper.then ->
|
||||
casper.repeat 50, (-> casper.click '.habits a[data-direction="down"]')
|
||||
casper.then ->
|
||||
helpers.getModelDelayed (model) ->
|
||||
casper.test.assertEquals model._user.stats.hp, 0, 'hp==0 (death by habits)'
|
||||
casper.test.assertEquals model._user.stats.lvl, 0, 'lvl==0 (death by habits)'
|
||||
casper.test.assertVisible '#dead-modal', 'Revive Modal Visible'
|
||||
|
||||
# ---------- Run ------------
|
||||
casper.run ->
|
||||
casper.test.renderResults true
|
||||
@@ -1,106 +0,0 @@
|
||||
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"
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
helpers = new require('./test/casper/helpers')()
|
||||
casper = helpers.casper
|
||||
utils = helpers.utils
|
||||
url = helpers.playUrl
|
||||
|
||||
casper.start url
|
||||
|
||||
# ---------- Items (in-game rewards) ------------
|
||||
casper.then ->
|
||||
helpers.reset()
|
||||
helpers.addTasks(['habit'], 1)
|
||||
|
||||
casper.then -> casper.test.assertDoesntExist 'ul.items', 'no items after reset'
|
||||
casper.then -> casper.repeat 70, ->
|
||||
casper.click '.habits a[data-direction="up"]'
|
||||
casper.then ->
|
||||
casper.test.assertVisible '.item-store-popover', 'store popover visible'
|
||||
casper.test.assertExists 'ul.items', 'items appear after lvl up'
|
||||
|
||||
# ---------- Run ------------
|
||||
casper.run ->
|
||||
casper.test.renderResults true
|
||||
@@ -1,12 +0,0 @@
|
||||
helpers = new require('./test/casper/helpers')()
|
||||
casper = helpers.casper
|
||||
utils = helpers.utils
|
||||
url = helpers.playUrl
|
||||
|
||||
casper.start url
|
||||
|
||||
casper.repeat 100, ->
|
||||
casper.reload()
|
||||
|
||||
casper.run ->
|
||||
casper.test.renderResults true
|
||||
@@ -1,35 +0,0 @@
|
||||
helpers = new require('./test/casper/helpers')()
|
||||
casper = helpers.casper
|
||||
utils = helpers.utils
|
||||
url = helpers.playUrl
|
||||
|
||||
casper.start url
|
||||
|
||||
# ---------- Register ------------
|
||||
registeredUser = undefined
|
||||
casper.then -> helpers.register()
|
||||
casper.then ->
|
||||
helpers.getModelDelayed (model) ->
|
||||
registeredUser = model
|
||||
|
||||
casper.then -> casper.reload()
|
||||
casper.then ->
|
||||
helpers.getModelDelayed (nowModel) ->
|
||||
casper.test.assertEqual registeredUser._userId, nowModel._userId, 'user registered and maintained session'
|
||||
|
||||
# ---------- Log Out ------------
|
||||
casper.thenOpen helpers.baseUrl + '/logout'
|
||||
casper.thenOpen helpers.playUrl
|
||||
casper.then ->
|
||||
helpers.getModelDelayed (nowModel) ->
|
||||
casper.test.assertNotEquals registeredUser._userId, nowModel._userId, 'user logged out'
|
||||
|
||||
# ---------- Login ------------
|
||||
casper.then -> helpers.login()
|
||||
casper.then ->
|
||||
helpers.getModelDelayed (nowModel) ->
|
||||
casper.test.assertEqual registeredUser._userId, nowModel._userId, 'user logged out'
|
||||
|
||||
# ---------- Run ------------
|
||||
casper.run ->
|
||||
casper.test.renderResults true
|
||||
@@ -1,74 +0,0 @@
|
||||
url = 'http://localhost:3000'
|
||||
utils = require('utils')
|
||||
casper = require("casper").create()
|
||||
|
||||
user1 = {}
|
||||
user2 = {}
|
||||
|
||||
# ---------- Main Stuff ------------
|
||||
|
||||
casper.start "#{url}/?play=1", ->
|
||||
user1 = casper.evaluate -> window.DERBY.app.model.get("_user")
|
||||
@fill 'form#derby-auth-register',
|
||||
username: user1.id
|
||||
email: "{user1.id}@gmail.com"
|
||||
password: 'habitrpg123'
|
||||
'password-confirmation': "habitrpg123"
|
||||
, true
|
||||
casper.thenOpen "#{url}/logout"
|
||||
casper.thenOpen "#{url}/?play=1", ->
|
||||
user2 = @evaluate -> window.DERBY.app.model.get("_user")
|
||||
casper.then -> @test.assertNotEquals user1.id, user2.id, '2 new users created'
|
||||
|
||||
|
||||
# ---------- REST API ------------
|
||||
|
||||
# casper.thenOpen "#{url}/users/#{user.id}"
|
||||
# casper.thenOpen "#{url}/users/#{user.id}/tasks"
|
||||
# casper.thenOpen "#{url}/users/#{user.id}/tasks/{taskId}"
|
||||
|
||||
taskId = 'productivity'
|
||||
pomodoro = {
|
||||
'title': 'Stay Focused',
|
||||
'service': 'pomodoro',
|
||||
'icon': 'http://www.veryicon.com/icon/16/Food%20%26%20Drinks/Paradise%20Fruits/Tomato.png'
|
||||
}
|
||||
|
||||
# ---------- v1 ------------
|
||||
|
||||
@thenOpen "#{url}/users/#{user2.id}/tasks/#{taskId}/up", {
|
||||
method: 'post',
|
||||
data: pomodoro
|
||||
}, ->
|
||||
result = JSON.parse @getPageContent()
|
||||
@test.assertEqual user2.stats.hp, result.hp, 'REST +habit =hp'
|
||||
@test.assert user2.stats.exp < result.exp, 'REST +habit +exp'
|
||||
@test.assert user2.stats.money < result.money, 'REST +habit +money'
|
||||
utils.dump result
|
||||
|
||||
@thenOpen "#{url}/users/#{user1.id}/tasks/#{taskId}/down", {
|
||||
method: 'post',
|
||||
data: pomodoro
|
||||
}, ->
|
||||
result = JSON.parse @getPageContent()
|
||||
@test.assert user1.stats.hp > result.hp, 'REST -habit -hp'
|
||||
@test.assertEqual user1.stats.exp, result.exp, 'REST -habit =exp'
|
||||
@test.assertEqual user1.stats.money, result.money, 'REST -habit =money'
|
||||
utils.dump result
|
||||
|
||||
casper.thenOpen "#{url}/?play=1", ->
|
||||
# User2 is logged in by now. Make sure we don't get logged in as user1 since that was the last REST call
|
||||
current = casper.evaluate -> window.DERBY.app.model.get('_user')
|
||||
casper.then -> casper.test.assertEqual current.id, user2.id, "session remains user2's"
|
||||
|
||||
# ---------- v2 ------------
|
||||
|
||||
# @thenOpen "#{url}/v2/users/#{uid}/tasks/#{taskId}/down", {
|
||||
# method: 'post',
|
||||
# data: pomodoro
|
||||
# }
|
||||
|
||||
# ---------- Run ------------
|
||||
|
||||
casper.run ->
|
||||
@test.renderResults true
|
||||
@@ -1,59 +0,0 @@
|
||||
helpers = new require('./test/casper/helpers')()
|
||||
casper = helpers.casper
|
||||
utils = helpers.utils
|
||||
url = helpers.playUrl
|
||||
|
||||
casper.start url
|
||||
|
||||
# ---------- Todos ------------
|
||||
casper.then ->
|
||||
helpers.reset()
|
||||
helpers.addTasks(['todo'])
|
||||
|
||||
# Completing todo gives exp and gp
|
||||
casper.then ->
|
||||
helpers.modelBeforeAfter (-> casper.click '.todos .uncompleted input[type="checkbox"]'), (model) ->
|
||||
casper.test.assertEquals model.before._user.stats.hp, 50, 'todo:hp starts at 50'
|
||||
casper.test.assertEquals model.before._user.stats.hp, model.after._user.stats.hp, '+todo =hp'
|
||||
casper.test.assertEquals model.after._user.stats.exp, 1, '+todo exp=1'
|
||||
casper.test.assertEquals model.after._user.stats.gp, 1, '+todo gp=1'
|
||||
|
||||
casper.test.assert model.before._user.stats.exp < model.after._user.stats.exp, '+todo +exp'
|
||||
casper.test.assert model.before._user.stats.gp < model.after._user.stats.gp, '+todo +gp'
|
||||
|
||||
# Can delete completed
|
||||
casper.then -> helpers.deleteOne('todo', '.todos .completed')
|
||||
|
||||
# Can delete uncompleted
|
||||
casper.then -> helpers.deleteOne('todo', '.todos .uncompleted')
|
||||
|
||||
# Uncompleting subtracts exp and gp
|
||||
casper.then ->
|
||||
casper.click '.todos .uncompleted input[type="checkbox"]'
|
||||
helpers.modelBeforeAfter (-> casper.click '.todos .completed input[type="checkbox"]'), (model) ->
|
||||
casper.test.assertEquals model.before._user.stats.hp, model.after._user.stats.hp, '-todo =hp'
|
||||
casper.test.assert model.before._user.stats.exp > model.after._user.stats.exp, '-todo -exp'
|
||||
casper.test.assert model.before._user.stats.gp > model.after._user.stats.gp, '-todo -gp'
|
||||
|
||||
|
||||
|
||||
# ---------- Cron ------------
|
||||
casper.then ->
|
||||
helpers.reset()
|
||||
helpers.addTasks(['todo'])
|
||||
|
||||
casper.then ->
|
||||
helpers.cronBeforeAfter (model) ->
|
||||
casper.then ->
|
||||
casper.test.assertEqual model.before._user.stats.hp, model.after._user.stats.hp, 'todo:cron:hp no change'
|
||||
|
||||
# Go through all the todos, all of them are uncompleted, so should all get a negative value
|
||||
casper.echo "Testing all uncompleted todos after cron"
|
||||
for id in model.before._user.todoIds
|
||||
casper.test.assertEquals model.before._user.tasks[id].value, 0, "todo:cron:todo value before was 0"
|
||||
casper.test.assert model.after._user.tasks[id].value < 0, "todo:cron:todo value after is negative"
|
||||
|
||||
|
||||
# ---------- Run ------------
|
||||
casper.run ->
|
||||
casper.test.renderResults true
|
||||
@@ -1,40 +0,0 @@
|
||||
helpers = casper.helpers
|
||||
uid = helpers.uid
|
||||
# test creation of Todos, Rewards, Habits, etc
|
||||
|
||||
casper.start helpers.playUrl, ->
|
||||
casper.test.assert(true,'true==true')
|
||||
# helpers.getModel (err, model) ->
|
||||
# tasksCount=0
|
||||
# for own key,value of model.user.tasks
|
||||
# tasksCount++
|
||||
# utils.dump model.user.tasks
|
||||
# casper.fill "form[data-task-type='habit']", {
|
||||
# 'new-task': 'Habit' + uid
|
||||
# }, true
|
||||
# helpers.getModel (err, model) ->
|
||||
# newTasksCount=0
|
||||
# for own key,value of model.user.tasks
|
||||
# newTasksCount++
|
||||
# casper.echo "Tasks new: " + tasksCount
|
||||
# casper.test.assert(newTasksCount>tasksCount,"Task list increases in length after new habit form submitted")
|
||||
#
|
||||
#
|
||||
##casper.then ->
|
||||
## helpers.getModel (err, model) ->
|
||||
## casper.test.assertEquals(typeof model.user.stats.exp, "number", 'XP is number')
|
||||
## casper.test.assertEquals(model.user.stats.exp, 0, 'XP == 0')
|
||||
## casper.click '.habits a[data-direction="up"]'
|
||||
## helpers.getModel (err, newModel) ->
|
||||
## casper.test.assert(newModel.user.stats.exp > model.user.stats.exp, 'XP has increased after clicking habits "+"')
|
||||
## casper.test.assert(newModel.user.stats.gp > model.user.stats.gp, 'GP has increased after clicking habits "+"')
|
||||
|
||||
|
||||
# ---------- finish tests ------------
|
||||
casper.then ->
|
||||
casper.test.done()
|
||||
|
||||
|
||||
# ---------- Run ------------
|
||||
casper.run ->
|
||||
casper.test.renderResults true
|
||||
@@ -1,103 +0,0 @@
|
||||
#helpers = new require('./lib/helpers')()
|
||||
#casper = helpers.casper
|
||||
helpers = casper.helpers
|
||||
eTest = helpers.evalTest
|
||||
getModel = helpers.getModel
|
||||
# ---------- Checks if clicking on the buttons changes stats and in right direction ------------
|
||||
|
||||
|
||||
casper.start helpers.playUrl, ->
|
||||
test = 'EXP and GP increasing after clicking habits "+"'
|
||||
getModel (err, model) ->
|
||||
casper.test.assertEquals(typeof model.user.stats.exp, "number", 'XP is number')
|
||||
casper.test.assertEquals(model.user.stats.exp, 0, 'XP == 0')
|
||||
casper.click '.habits a[data-direction="up"]'
|
||||
eTest(
|
||||
(oldStats)->
|
||||
stats = window.DERBY.app.model.get '_user.stats'
|
||||
console.log "Was:" + oldStats.exp + "Is: " + stats.exp
|
||||
console.log "Was:" + oldStats.gp + "Is: " + stats.gp
|
||||
(stats.exp > oldStats.exp && stats.gp > oldStats.gp)
|
||||
test
|
||||
model.user.stats
|
||||
)
|
||||
|
||||
|
||||
casper.then ->
|
||||
test = 'HP decreasing after clicking habits "-"'
|
||||
getModel (err, model) ->
|
||||
casper.click '.habits a[data-direction="down"]'
|
||||
eTest(
|
||||
(oldStats)->
|
||||
stats = window.DERBY.app.model.get '_user.stats'
|
||||
console.log "Was:" + oldStats.hp + "Is: " + stats.hp
|
||||
(stats.hp < oldStats.hp)
|
||||
test
|
||||
model.user.stats
|
||||
)
|
||||
|
||||
casper.then ->
|
||||
test = 'EXP and GP increasing after clicking .todo.uncompleted'
|
||||
getModel (err, model) ->
|
||||
casper.click '.task.todo.uncompleted input[type=checkbox]'
|
||||
eTest(
|
||||
(oldStats)->
|
||||
stats = window.DERBY.app.model.get '_user.stats'
|
||||
console.log "Was:" + oldStats.exp + "Is: " + stats.exp
|
||||
console.log "Was:" + oldStats.gp + "Is: " + stats.gp
|
||||
(stats.exp > oldStats.exp && stats.gp > oldStats.gp)
|
||||
test
|
||||
model.user.stats
|
||||
)
|
||||
|
||||
casper.then ->
|
||||
test = 'EXP and GP decreasing after clicking .todo.completed'
|
||||
getModel (err, model) ->
|
||||
casper.click '.task.todo.completed input[type=checkbox]'
|
||||
eTest(
|
||||
(oldStats)->
|
||||
stats = window.DERBY.app.model.get '_user.stats'
|
||||
console.log "Was:" + oldStats.exp + "Is: " + stats.exp
|
||||
console.log "Was:" + oldStats.gp + "Is: " + stats.gp
|
||||
(stats.exp < oldStats.exp && stats.gp < oldStats.gp)
|
||||
test
|
||||
model.user.stats
|
||||
)
|
||||
|
||||
casper.then ->
|
||||
test = 'EXP and GP increasing after clicking .daily.uncompleted'
|
||||
getModel (err, model) ->
|
||||
casper.click '.task.daily.uncompleted input[type=checkbox]'
|
||||
eTest(
|
||||
(oldStats)->
|
||||
stats = window.DERBY.app.model.get '_user.stats'
|
||||
console.log "Was:" + oldStats.exp + "Is: " + stats.exp
|
||||
console.log "Was:" + oldStats.gp + "Is: " + stats.gp
|
||||
(stats.exp > oldStats.exp && stats.gp > oldStats.gp)
|
||||
test
|
||||
model.user.stats
|
||||
)
|
||||
|
||||
casper.then ->
|
||||
test = 'EXP and GP decreasing after clicking .daily.completed'
|
||||
getModel (err, model) ->
|
||||
casper.click '.task.daily.completed input[type=checkbox]'
|
||||
eTest(
|
||||
(oldStats)->
|
||||
stats = window.DERBY.app.model.get '_user.stats'
|
||||
console.log "Was:" + oldStats.exp + "Is: " + stats.exp
|
||||
console.log "Was:" + oldStats.gp + "Is: " + stats.gp
|
||||
(stats.exp < oldStats.exp && stats.gp < oldStats.gp)
|
||||
test
|
||||
model.user.stats
|
||||
)
|
||||
|
||||
|
||||
# ---------- finish tests ------------
|
||||
casper.then ->
|
||||
casper.test.done()
|
||||
|
||||
|
||||
# ---------- Run ------------
|
||||
casper.run ->
|
||||
casper.test.renderResults true
|
||||
@@ -1,9 +0,0 @@
|
||||
1) It is a bit verbose
|
||||
2) It needs to be refactored using "async" library. Somehow casper.then() is introducing bugs so I'm not going to use it until I figure out why exactly. Leave it as it is, I'll refactor as it grows.
|
||||
3) It does not use any timeouts along the way, which is a good thing.
|
||||
4) It runs consistently on my side (i.e. always passes).
|
||||
5) So far phantomJS is given new userID every time so app.reset,app.revive is not necessary. I'll add it later.
|
||||
|
||||
To run the tests run from terminal:
|
||||
cd test/test2
|
||||
casperjs test ./casper/ --includes=./lib/helpers.coffee
|
||||
Reference in New Issue
Block a user