Remove coffee from files

This commit is contained in:
Blade Barringer
2015-11-11 20:40:26 -06:00
parent 3a13a5ee2c
commit 7559f14f4d
19 changed files with 2 additions and 1257 deletions

View File

@@ -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',

View File

@@ -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",

View File

@@ -1,7 +0,0 @@
if(process.env.COVERAGE) {
require('coffee-coverage').register({
path: 'abbr',
basePath: __dirname + '/common/script',
initAll: true,
});
}

View File

@@ -1,5 +1,3 @@
import 'coffee-script';
import mongoose from 'mongoose';
import autoinc from 'mongoose-id-autoinc';
import logging from '../website/src/libs/logging';

View File

@@ -2,7 +2,7 @@ import gulp from 'gulp';
import eslint from 'gulp-eslint';
import _ from 'lodash';
// TODO remove once we upgrade to lodash 3
// TODO remove once we upgrade to lodash 3
const defaultsDeep = _.partialRight(_.merge, _.defaults);
const shared = {
@@ -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: {
@@ -42,4 +40,4 @@ gulp.task('lint:server', () => {
.pipe(eslint.failAfterError());
});
gulp.task('lint', ['lint:server', 'lint:client']);
gulp.task('lint', ['lint:server', 'lint:client']);

View File

@@ -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.

View File

@@ -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()
#
#

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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"
}

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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