From 1a68f00fb2d9be14204349e9397113701614b099 Mon Sep 17 00:00:00 2001 From: Tyler Renelle Date: Sun, 23 Sep 2012 15:19:29 -0400 Subject: [PATCH] moving some schema stuff around --- lib/app/schema.js | 31 +++++++++++++++++++++++++++++-- lib/server/auth.js | 24 ++---------------------- src/app/schema.coffee | 16 +++++++++++++++- src/server/auth.coffee | 17 +++-------------- test/mocha.opts | 1 + test/scoring.mocha.coffee | 36 +++++++++++++++++++----------------- 6 files changed, 69 insertions(+), 56 deletions(-) diff --git a/lib/app/schema.js b/lib/app/schema.js index c198b6851f..e0a00b36cb 100644 --- a/lib/app/schema.js +++ b/lib/app/schema.js @@ -1,7 +1,9 @@ // Generated by CoffeeScript 1.3.3 -var userSchema; +var content, userSchema; -module.exports.userSchema = userSchema = { +content = require('./content'); + +userSchema = { balance: 2, stats: { money: 0, @@ -23,6 +25,31 @@ module.exports.userSchema = userSchema = { rewardIds: [] }; +module.exports.newUserObject = function() { + var guid, newUser, task, _i, _len, _ref; + newUser = require('node.extend')(true, {}, userSchema); + _ref = content.defaultTasks; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + task = _ref[_i]; + guid = task.id = require('derby/node_modules/racer').uuid(); + newUser.tasks[guid] = task; + switch (task.type) { + case 'habit': + newUser.habitIds.push(guid); + break; + case 'daily': + newUser.dailyIds.push(guid); + break; + case 'todo': + newUser.todoIds.push(guid); + break; + case 'reward': + newUser.rewardIds.push(guid); + } + } + return newUser; +}; + module.exports.updateSchema = function(model) { return; return model.fetch('users', function(err, users) { diff --git a/lib/server/auth.js b/lib/server/auth.js index be27412ac7..23a8bcb932 100644 --- a/lib/server/auth.js +++ b/lib/server/auth.js @@ -14,33 +14,13 @@ module.exports.setRequest = function(r) { }; module.exports.newUserAndPurl = function() { - var acceptableUid, guid, model, newUser, sess, task, uidParam, _i, _len, _ref; + var acceptableUid, model, sess, uidParam; model = req.getModel(); sess = model.session; uidParam = req.url.split('/')[1]; if (!sess.userId) { sess.userId = derby.uuid(); - newUser = require('node.extend')(true, {}, schema.userSchema); - _ref = content.defaultTasks; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - task = _ref[_i]; - guid = task.id = require('derby/node_modules/racer').uuid(); - newUser.tasks[guid] = task; - switch (task.type) { - case 'habit': - newUser.habitIds.push(guid); - break; - case 'daily': - newUser.dailyIds.push(guid); - break; - case 'todo': - newUser.todoIds.push(guid); - break; - case 'reward': - newUser.rewardIds.push(guid); - } - } - model.set("users." + sess.userId, newUser); + model.set("users." + sess.userId, schema.newUserObject()); } acceptableUid = require('guid').isGuid(uidParam) || (uidParam === '3'); if (acceptableUid && sess.userId !== uidParam && !(sess.habitRpgAuth && sess.habitRpgAuth.facebook)) { diff --git a/src/app/schema.coffee b/src/app/schema.coffee index abb11d21a2..0df6a9aad0 100644 --- a/src/app/schema.coffee +++ b/src/app/schema.coffee @@ -1,5 +1,6 @@ +content = require './content' -module.exports.userSchema = userSchema = { +userSchema = { balance: 2 stats: { money: 0, exp: 0, lvl: 1, hp: 50 } items: { itemsEnabled: false, armor: 0, weapon: 0, rerollsRemaining: 5 } @@ -10,6 +11,19 @@ module.exports.userSchema = userSchema = { completedIds: [] rewardIds: [] } + +module.exports.newUserObject = -> + # deep clone, else further new users get duplicate objects + newUser = require('node.extend')(true, {}, userSchema) + for task in content.defaultTasks + guid = task.id = require('derby/node_modules/racer').uuid() + newUser.tasks[guid] = task + switch task.type + when 'habit' then newUser.habitIds.push guid + when 'daily' then newUser.dailyIds.push guid + when 'todo' then newUser.todoIds.push guid + when 'reward' then newUser.rewardIds.push guid + return newUser module.exports.updateSchema = (model) -> return # not using, will revisit this later diff --git a/src/server/auth.coffee b/src/server/auth.coffee index 6caa7b6c6f..03a9ef1555 100644 --- a/src/server/auth.coffee +++ b/src/server/auth.coffee @@ -6,8 +6,8 @@ content = require('../app/content') req = undefined module.exports.setRequest = (r) -> req = r - -module.exports.newUserAndPurl = () -> + +module.exports.newUserAndPurl = -> model = req.getModel() sess = model.session uidParam = req.url.split('/')[1] @@ -16,17 +16,7 @@ module.exports.newUserAndPurl = () -> # They get to play around before creating a new account. unless sess.userId sess.userId = derby.uuid() - # deep clone, else further new users get duplicate objects - newUser = require('node.extend')(true, {}, schema.userSchema) - for task in content.defaultTasks - guid = task.id = require('derby/node_modules/racer').uuid() - newUser.tasks[guid] = task - switch task.type - when 'habit' then newUser.habitIds.push guid - when 'daily' then newUser.dailyIds.push guid - when 'todo' then newUser.todoIds.push guid - when 'reward' then newUser.rewardIds.push guid - model.set "users.#{sess.userId}", newUser + model.set "users.#{sess.userId}", schema.newUserObject() ## -------- (2) PURL -------- # eg, http://localhost/{guid}), legacy - will be removed eventually @@ -37,7 +27,6 @@ module.exports.newUserAndPurl = () -> sess.userId = uidParam module.exports.setupEveryauth = (everyauth) -> - everyauth.debug = true everyauth.everymodule.findUserById (id, callback) -> diff --git a/test/mocha.opts b/test/mocha.opts index 29033a8af6..d6ef947989 100644 --- a/test/mocha.opts +++ b/test/mocha.opts @@ -4,3 +4,4 @@ --growl --debug --compilers coffee:coffee-script +--globals io \ No newline at end of file diff --git a/test/scoring.mocha.coffee b/test/scoring.mocha.coffee index aa1b4bf8ad..19e9fd0515 100644 --- a/test/scoring.mocha.coffee +++ b/test/scoring.mocha.coffee @@ -1,23 +1,25 @@ -{expect, calls} = require 'derby/node_modules/racer/test/util' #TODO what is this? -{DetachedModel: Model, ResMock} = require 'derby/test/mocks' +{expect} = require 'derby/node_modules/racer/test/util' +{BrowserModel: Model} = require 'derby/node_modules/racer/test/util/model' +scoring = require '../src/app/scoring' +schema = require '../src/app/schema' +_ = require '../public/js/underscore-min' -## mock model -#model = { -# data: {} -# set: (path, val) -> -# @data[path] = val -# get: (path) -> -# @data[path] -# } describe 'Scoring', -> - user = null model = null - - it 'should save initial user correctly', (done) -> - console.log 'teest' + + beforeEach -> model = new Model - model.set '_user', {hp:50} + model.set '_user', schema.newUserObject() + + it 'should set user defaults correctly', -> user = model.get '_user' - expect user.get('hp').to.eql 5 - done() + expect(user.stats).to.eql { money: 0, exp: 0, lvl: 1, hp: 50 } + expect(user.items).to.eql { itemsEnabled: false, armor: 0, weapon: 0, rerollsRemaining: 5 } + expect(user.balance).to.eql 2 + expect(_.size(user.tasks)).to.eql 9 + expect(_.size(user.habitIds)).to.eql 3 + expect(_.size(user.dailyIds)).to.eql 3 + expect(_.size(user.todoIds)).to.eql 1 + expect(_.size(user.completedIds)).to.eql 0 + expect(_.size(user.rewardIds)).to.eql 2