Merge branch 'master' into preen-users

This commit is contained in:
Tyler Renelle 2013-01-28 20:14:39 -05:00
commit 77ac68ecc0
10 changed files with 246 additions and 147 deletions

View file

@ -17,6 +17,12 @@ html,body,p,h1,ul,li,table,tr,th,td
box-shadow: inset 0 1px #f7f7f7, 0 1px #888, 0 2px #e7e7e7
padding: 12px 16px
white-space: nowrap
position:fixed
width: 100%;
#head .pull-right
margin-right: 2%
margin-left: 1%
.color-worst pre
background-color: rgb(230, 184, 175)
@ -176,7 +182,6 @@ li:hover .task-meta-controls .hover-show
/* Bootstrap website boilerplate */
.footer {
padding: 70px 0;
margin-top: 70px;
border-top: 1px solid #e5e5e5;
background-color: #f5f5f5;
}
@ -194,7 +199,7 @@ li:hover .task-meta-controls .hover-show
/* Customizations to make footer sticky */
/*html, body {height: 100%;}*/
#wrap {min-height: 100%;}
#wrap {min-height: 100%; margin-top:130px; z-index:-1}
#main
/*overflow:auto;*/
padding-bottom: 250px; /* don't know why this works, sticky footers are weird */

View file

@ -89,6 +89,7 @@
.hidden-phone {
display: none !important;
}
}
@media (min-width: 1200px) {

View file

@ -1,5 +1,5 @@
.connection {
position: absolute;
position: fixed;
text-align: center;
top: 0;
left: 0;

View file

@ -1,65 +1,45 @@
helpers = require('./helpers')
casper = helpers.casper
utils = helpers.utils
url = helpers.url
helper = new require('./test/casper/helpers')()
casper = helper.casper
utils = helper.utils
url = helper.url
casper.start url + '/?play=1'
# ---------- Daily ------------
casper.then ->
reset()
addTasks()
helper.reset()
helper.addTasks()
# Gained exp on +daily
casper.then ->
user = userBeforeAfter (-> casper.click '.dailys input[type="checkbox"]')
user = helper.userBeforeAfter (-> casper.click '.dailys input[type="checkbox"]')
@test.assertEquals user.before.stats.hp, user.after.stats.hp, '+daily =hp'
@test.assert user.before.stats.exp < user.after.stats.exp, '+daily +exp'
@test.assert user.before.stats.money < user.after.stats.money, '+daily +money'
# -daily acts as undo
casper.then ->
user = userBeforeAfter (-> casper.click '.dailys input[type="checkbox"]')
user = helper.userBeforeAfter (-> casper.click '.dailys input[type="checkbox"]')
@test.assertEquals user.before.stats.hp, user.after.stats.hp, '-daily =hp'
@test.assert user.before.stats.exp > user.after.stats.exp, '-daily -exp'
@test.assert user.before.stats.money > user.after.stats.money, '-daily -money'
# ---------- Cron ------------
casper.then ->
reset()
addTasks()
helper.reset()
helper.addTasks()
casper.then ->
user = {before:getUser()}
tasks =
before:
daily: @evaluate -> window.DERBY.app.model.get('_dailyList')
todo: @evaluate -> window.DERBY.app.model.get('_todoList')
runCron()
@then ->
@wait 1050, -> # user's hp is updated after 1s for animation
user.after = getUser()
@test.assertEqual user.before.id, user.after.id, 'user id equal after cron'
tasks.after =
daily: @evaluate -> window.DERBY.app.model.get('_dailyList')
todo: @evaluate -> window.DERBY.app.model.get('_todoList')
@test.assertEqual user.before.tasks.length, user.after.tasks.length, "Didn't lose anything on cron"
#TODO make sure true for all dailies
dailyId = tasks.before.daily[0].id
utils.dump tasks.before.daily
utils.dump
dailyBefore:user.before.tasks[dailyId].value
dailyAfter:user.before.tasks[dailyId].value
@test.assert user.before.tasks[dailyId].value < user.before.tasks[dailyId].value, "todo gained value on cron"
@test.assert user.before.stats.hp < user.after.stats.hp, 'user lost HP on cron'
#TODO make sure true for all todos
todoId = tasks.before.todo[0].id
@test.assert user.before.tasks[todoId].value < user.before.tasks[todoId].value, "todo gained value on cron"
helper.cronBeforeAfter (beforeAfter) ->
casper.then ->
#TODO make sure true for all dailies
dailyId = beforeAfter.before.tasks.daily[0].id
# utils.dump
# dailyBefore:user.before.tasks[dailyId].value
# dailyAfter:user.before.tasks[dailyId].value
casper.test.assert beforeAfter.before.user.tasks[dailyId].value < beforeAfter.after.user.tasks[dailyId].value, "daily:cron:daily gained value"
casper.test.assert beforeAfter.before.user.stats.hp < beforeAfter.after.user.stats.hp, 'daily:cron:hp lost value'
# ---------- Run ------------

View file

@ -1,30 +1,37 @@
helpers = require('./helpers')
casper = helpers.casper
utils = helpers.utils
url = helpers.url
helper = new require('./test/casper/helpers')()
casper = helper.casper
utils = helper.utils
url = helper.url
casper.start url + '/?play=1'
# ---------- Register ------------
user = undefined
casper.then -> helper.register()
casper.then -> user = helper.getUser()
# ---------- Habits ------------
casper.then ->
reset()
addTasks()
helper.reset()
helper.addTasks()
casper.then ->
user = userBeforeAfter (-> casper.click '.habits a[data-direction="down"]')
@test.assert user.before.stats.hp > user.after.stats.hp, '-habit -hp'
@test.assert user.before.stats.exp == user.after.stats.exp, '-habit =exp'
u = helper.userBeforeAfter (-> casper.click '.habits a[data-direction="down"]')
casper.test.assert u.before.stats.hp > u.after.stats.hp, '-habit -hp'
casper.test.assert u.before.stats.exp == u.after.stats.exp, '-habit =exp'
@then ->
user = userBeforeAfter (-> casper.click '.habits a[data-direction="up"]')
@test.assert user.before.stats.exp < user.after.stats.exp, '+habit +exp'
@test.assertEquals user.before.stats.hp, user.after.stats.hp, '+habit =hp'
casper.then ->
u = helper.userBeforeAfter (-> casper.click '.habits a[data-direction="up"]')
casper.test.assert u.before.stats.exp < u.after.stats.exp, '+habit +exp'
casper.test.assertEquals u.before.stats.hp, u.after.stats.hp, '+habit =hp'
# Test Death
casper.then ->
@repeat 50, (-> casper.click '.habits a[data-direction="down"]')
@then ->
user = getUser()
@test.assertEquals user.stats.hp, 0, 'hp==0 (death by habits)'
@test.assertEquals user.stats.lvl, 0, 'lvl==0 (death by habits)'
casper.then ->
u = helper.getUser()
@test.assertEquals u.stats.hp, 0, 'hp==0 (death by habits)'
@test.assertEquals u.stats.lvl, 0, 'lvl==0 (death by habits)'
@test.assert(@visible('#dead-modal'), 'Revive Modal Visible')
# ---------- Run ------------

View file

@ -1,39 +1,86 @@
utils = require('utils')
module.exports = ->
url: 'http://localhost:3000/?play=1'
random = Math.random().toString(36).substring(7)
casper: require("casper").create
casper = require("casper").create
clientScripts: 'test/includes/lodash.min.js'
utils: require('utils')
{
casper: casper
getUser: -> casper.evaluate -> window.DERBY.app.model.get('_user')
url: 'http://localhost:3000'
addTasks: ->
['habit', 'daily', 'todo', 'reward'].forEach (type) ->
# Add 15 of each task type
num = 0
casper.repeat 15, ->
casper.fill "form#new-#{type}", {'new-task': "#{type}-#{num}"} # why can't I use true here?
casper.click "form#new-#{type} input[type=submit]"
utils: utils
reset: -> casper.evaluate -> window.DERBY.app.reset()
getUser: ->
casper.evaluate -> window.DERBY.app.model.get('_user')
userBeforeAfter: (callback) ->
user = {}
user.before = getUser()
callback()
user.after = getUser()
user
addTasks: ->
['habit', 'daily', 'todo', 'reward'].forEach (type) ->
# Add 15 of each task type
num = 0
casper.repeat 15, ->
casper.fill "form#new-#{type}", {'new-task': "#{type}-#{num}"} # why can't I use true here?
casper.click "form#new-#{type} input[type=submit]"
runCron: ->
casper.evaluate -> window.DERBY.model.set('_user.lastCron', new Date('01/10/2013'))
casper.reload()
reset: ->
casper.evaluate -> window.DERBY.app.reset()
register: ->
casper.fill 'form#derby-auth-register',
username: 'lefnire'
email: 'x@x.com'
'email-confirmation': 'x@x.com'
password: 'habitrpg123'
, true
userBeforeAfter: (callback) ->
user = {}
user.before = @getUser()
callback()
user.after = @getUser()
user
runCron: ->
casper.evaluate -> window.DERBY.model.set('_user.lastCron', new Date('01/25/2013'))
casper.reload()
cronBeforeAfter: (cb) ->
that = @
getLists = ->
{
habit: casper.evaluate -> window.DERBY.app.model.get('_habitList')
daily: casper.evaluate -> window.DERBY.app.model.get('_dailyList')
todo: casper.evaluate -> window.DERBY.app.model.get('_todoList')
reward: casper.evaluate -> window.DERBY.app.model.get('_rewardList')
}
beforeAfter =
before:
user: that.getUser()
tasks: getLists()
casper.then -> that.runCron()
casper.then ->
casper.wait 1050, -> # user's hp is updated after 1s for animation
beforeAfter.after =
user: that.getUser()
tasks: getLists()
casper.then ->
casper.test.assertEqual beforeAfter.before.user.id, beforeAfter.after.user.id, 'user id equal after cron'
casper.test.assertEqual beforeAfter.before.user.tasks.length, beforeAfter.after.user.tasks.length, "Didn't lose anything on cron"
cb(beforeAfter)
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
}

View file

@ -1,23 +1,35 @@
helpers = require('./helpers')
casper = helpers.casper
utils = helpers.utils
url = helpers.url
helper = new require('./test/casper/helpers')()
casper = helper.casper
utils = helper.utils
url = helper.url
casper.start url + '/?play=1'
# ---------- Register ------------
user = undefined
casper.then -> helper.register()
casper.then -> user = helper.getUser()
casper.then -> casper.reload()
casper.then ->
helpers.register()
casper.then -> user = helpers.getUser()
casper.then -> reload()
casper.then ->
nowUser = getUser()
nowUser = helper.getUser()
casper.then ->
casper.test.assertEqual user.id, nowUser.id, 'user registered and maintained session'
# ---------- Log Out ------------
casper.thenOpen helper.url + '/logout'
casper.thenOpen helper.url + '/?play=1'
casper.then ->
nowUser = helper.getUser()
casper.then ->
casper.test.assertNotEquals user.id, nowUser.id, 'user logged out'
# ---------- Login ------------
#TODO logout
#TODO login
#TODO make sure same id
casper.then -> helper.login()
casper.then -> utils.dump casper.debugHTML '#derby-auth-login'
casper.then ->
nowUser = helper.getUser()
casper.then ->
casper.test.assertEqual user.id, nowUser.id, 'user logged in'
# ---------- Run ------------
casper.run ->

View file

@ -0,0 +1,19 @@
helper = new require('./test/casper/helpers')()
casper = helper.casper
utils = helper.utils
url = helper.url
casper.start url + '/?play=1'
# ---------- Rewardsj1 ------------
casper.then ->
helper.reset()
helper.addTasks()
casper.then -> @test.assertDoesntExist('ul.items')
casper.then -> @repeat 50, -> casper.click('.habits a[data-direction="up"]')
casper.then -> @test.assertExists('ul.items')
# ---------- Run ------------
casper.run ->
casper.test.renderResults true

View file

@ -1,18 +1,46 @@
helper = new require('./test/casper/helpers')()
casper = helper.casper
utils = helper.utils
url = helper.url
casper.start url + '/?play=1'
# ---------- Todos ------------
casper.then ->
reset()
addTasks()
helper.reset()
helper.addTasks()
# Gained exp on +daily
casper.then ->
user = userBeforeAfter (-> casper.click '.todos input[type="checkbox"]')
@test.assertEquals user.before.stats.hp, user.after.stats.hp, '+daily =hp'
@test.assert user.before.stats.exp < user.after.stats.exp, '+daily +exp'
@test.assert user.before.stats.money < user.after.stats.money, '+daily +money'
user = helper.userBeforeAfter (-> casper.click '.todos input[type="checkbox"]')
@test.assertEquals user.before.stats.hp, user.after.stats.hp, '+todo =hp'
@test.assert user.before.stats.exp < user.after.stats.exp, '+todo +exp'
@test.assert user.before.stats.money < user.after.stats.money, '+todo +money'
# -daily acts as undo
casper.then ->
user = userBeforeAfter (-> casper.click '.todos input[type="checkbox"]')
@test.assertEquals user.before.stats.hp, user.after.stats.hp, '-daily =hp'
@test.assert user.before.stats.exp > user.after.stats.exp, '-daily -exp'
@test.assert user.before.stats.money > user.after.stats.money, '-daily -money'
user = helper.userBeforeAfter (-> casper.click '.todos input[type="checkbox"]')
@test.assertEquals user.before.stats.hp, user.after.stats.hp, '-todo =hp'
@test.assert user.before.stats.exp > user.after.stats.exp, '-todo -exp'
@test.assert user.before.stats.money > user.after.stats.money, '-todo -money'
# ---------- Cron ------------
casper.then ->
helper.reset()
helper.addTasks()
casper.then ->
helper.cronBeforeAfter (beforeAfter) ->
casper.then ->
#TODO make sure true for all todos
todoId = beforeAfter.before.tasks.todo[0].id
# utils.dump
# dailyBefore:user.before.tasks[dailyId].value
# dailyAfter:user.before.tasks[dailyId].value
casper.test.assert beforeAfter.before.user.tasks[todoId].value < beforeAfter.after.user.tasks[todoId].value, "todo:cron:todo gained value"
casper.test.assertEqual beforeAfter.before.user.stats.hp, beforeAfter.after.user.stats.hp, 'todo:cron:hp no change'
# ---------- Run ------------
casper.run ->
casper.test.renderResults true

View file

@ -78,42 +78,43 @@
</@footer>
</app:myModal>
<alerts:>
{#if equal(_user.notifications.kickstarter,'show')}
<div class='alert alert-success'>
<a x-bind="click:closeKickstarterNofitication" class='pull-right'>Dismiss</a>
Help Habit by backing the <strong><a href="http://kck.st/XoA3Yg">Kickstarter</a></strong>! Funds iPhone & Android apps, <a href="https://github.com/lefnire/habitrpg/issues?labels=critical&page=1&state=open">bug fixes</a>, and the <a href="https://github.com/lefnire/habitrpg/issues/58">Groups feature</a>.
</div>
{/}
<!-- change to equal(_user.flags.aws_migrating,'show') when you're ready -->
{#if false}
<div class='alert'>
<div id="mc_embed_signup">
<form action="http://habitrpg.us6.list-manage.com/subscribe/post?u=274fbd56713d1968df2e18e18&amp;id=7d09ec341f" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate>
Tyler Here. You're awesome. I'm working on scaling the site as fast as I can. Add your email if you want to be reminded. Thank you for understanding.
<div class="indicates-required"></div>
<div class="mc-field-group">
<label for="mce-EMAIL">Email Address <span class="asterisk">*</span></label>
<input type="email" value="" name="EMAIL" class="required email" id="mce-EMAIL">
</div>
<div id="mce-responses" class="clear">
<div class="response" id="mce-error-response" style="display:none"></div>
<div class="response" id="mce-success-response" style="display:none"></div>
</div>
<div class="clear">
<input type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" class="button">
</div>
<div class='clear-both'></div>
</form>
</div>
</div>
{/if}
<Header:>
<app:modalDialogs />
<ui:connectionAlert>
<div id="head">
{#if equal(_user.notifications.kickstarter,'show')}
<div class='alert alert-success'>
<a x-bind="click:closeKickstarterNofitication" class='pull-right'>Dismiss</a>
Help Habit by backing the <strong><a href="http://kck.st/XoA3Yg">Kickstarter</a></strong>! Funds iPhone & Android apps, <a href="https://github.com/lefnire/habitrpg/issues?labels=critical&page=1&state=open">bug fixes</a>, and the <a href="https://github.com/lefnire/habitrpg/issues/58">Groups feature</a>.
</div>
{/}
<!-- change to equal(_user.flags.aws_migrating,'show') when you're ready -->
{#if false}
<div class='alert'>
<div id="mc_embed_signup">
<form action="http://habitrpg.us6.list-manage.com/subscribe/post?u=274fbd56713d1968df2e18e18&amp;id=7d09ec341f" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate>
Tyler Here. You're awesome. I'm working on scaling the site as fast as I can. Add your email if you want to be reminded. Thank you for understanding.
<div class="indicates-required"></div>
<div class="mc-field-group">
<label for="mce-EMAIL">Email Address <span class="asterisk">*</span></label>
<input type="email" value="" name="EMAIL" class="required email" id="mce-EMAIL">
</div>
<div id="mce-responses" class="clear">
<div class="response" id="mce-error-response" style="display:none"></div>
<div class="response" id="mce-success-response" style="display:none"></div>
</div>
<div class="clear">
<input type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" class="button">
</div>
<div class='clear-both'></div>
</form>
</div>
</div>
{/if}
<div class='pull-right'>
{#unless _loggedIn}
<a class="btn btn-small btn-info" href="#login-modal" data-toggle="modal">Login / Register</a>
@ -178,6 +179,9 @@
<Body:>
<br/>
<div id=wrap class=container-fluid>
<app:alerts />
<div id=main class=row-fluid>
<!-- would rather have one component: <app:taskList>, which handles taskList, task, and newTask. However,
can't pass references as paramters. so <app:taskList newModel={_newHabit} list={_habitList}> doesn't work
@ -354,11 +358,7 @@
</div>
{#if :task.notes}
{#if equal(:task.type,'reward')}
<span rel="popover" data-trigger="hover" data-placement="left" data-content="{:task.notes}" data-original-title="{:task.text}" class='task-notes'><i class="icon-comment"></i></span>
{else}
<span rel="popover" data-trigger="hover" data-content="{:task.notes}" data-original-title="{:task.text}" class='task-notes'><i class="icon-comment"></i></span>
{/}
<span rel="popover" data-trigger="hover" data-placement="left" data-content="{:task.notes}" data-original-title="{:task.text}" class='task-notes'><i class="icon-comment"></i></span>
{/}
</div>
@ -455,4 +455,4 @@
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
{/}
{/}