diff --git a/test/scoring.mocha.coffee b/test/scoring.mocha.coffee index b50eb62f96..e90de82722 100644 --- a/test/scoring.mocha.coffee +++ b/test/scoring.mocha.coffee @@ -13,7 +13,7 @@ describe 'Scoring', -> beforeEach -> model = new Model model.set '_user', schema.newUserObject() - scoring.setUser model.at('_user') + scoring.setModel model it 'should set user defaults correctly', -> user = model.get '_user' @@ -26,18 +26,61 @@ describe 'Scoring', -> expect(_.size(user.todoIds)).to.eql 1 expect(_.size(user.completedIds)).to.eql 0 expect(_.size(user.rewardIds)).to.eql 2 + + ##### Habits ##### + describe 'Habits', -> + uuid = null + taskPath = null - it 'should modify damage based on lvl & armor', -> - user = model.at('_user') - [lvl,armor] = [user.get('stats.lvl'), user.get('items.armor')] - expect(lvl).to.eql 1 - expect(armor).to.eql 0 + beforeEach -> + # create a test task + user = model.get('_user') + uuid = derby.uuid() + taskPath = "_user.tasks.#{uuid}" + model.refList "_habitList", "_user.tasks", "_user.habitIds" + model.at('_habitList').push {type: 'habit', text: 'Habit', value: 0, up: true, down: true, id: uuid} - uuid = derby.uuid() - model.at('_user.tasks').push {type: 'habit', text: 'Habit', value: 0, up: true, down: true, id: uuid} - task = model.get("_user.tasks") - console.log task - # modified = scoring.score + it 'should have created the habit', -> + task = model.get(taskPath) + expect(task.text).to.eql 'Habit' + expect(task.value).to.eql 0 + + it 'should make proper modifications when down-scored', -> + # Down-score the habit + [userBefore, taskBefore] = [model.get('_user'), model.get(taskPath)] + scoring.score(uuid, 'down') + [userAfter, taskAfter] = [model.get('_user'), model.get(taskPath)] + + # User should have lost HP + expect(userAfter.stats.hp).to.be.lessThan userBefore.stats.hp + # Exp, GP should stay the same + expect(userAfter.stats.money).to.eql userBefore.stats.money + expect(userAfter.stats.exp).to.eql userBefore.stats.exp + # Task should have gained in value + expect(taskAfter.value).to.be.greaterThan taskBefore.value + + it 'should make proper modifications when up-scored', -> + # Up-score the habit + [userBefore, taskBefore] = [model.get('_user'), model.get(taskPath)] + scoring.score(uuid, 'up') + [userAfter, taskAfter] = [model.get('_user'), model.get(taskPath)] + + # User should have gained Exp, GP + expect(userAfter.stats.exp).to.be.greaterThan userBefore.stats.exp + expect(userAfter.stats.money).to.be.greaterThan userBefore.stats.money + # HP should not change + expect(userAfter.stats.hp).to.eql userBefore.stats.hp + # Task should have lost value + expect(taskAfter.value).to.be.lessThan taskBefore.value + + + it 'should not modify certain attributes given certain conditions' + # non up+down habits + # what else? + + it 'should modify damage based on lvl & armor' it 'should always decrease hp with damage, regardless of stats/items' it 'should always increase exp/gp with gain, regardless of stats/items' + it 'should calculate cron based on difference between start-of-days, and not run in the middle of the day' + it 'should show "undo" notification if user unchecks completed daily'