PageRenderTime 54ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/test/archive/api.mocha.coffee

https://github.com/ewingd/habitrpg
CoffeeScript | 656 lines | 241 code | 47 blank | 368 comment | 2 complexity | 1619cb439e45fa9cab13ea627171cd7c MD5 | raw file
Possible License(s): CC-BY-SA-4.0
  1. _ = require 'lodash'
  2. expect = require 'expect.js'
  3. require 'coffee-script'
  4. async = require 'async'
  5. superagentDefaults = require 'superagent-defaults'
  6. request = superagentDefaults()
  7. conf = require("nconf")
  8. conf.argv().env().file({file: __dirname + '../config.json'}).defaults
  9. conf.set('port','1337')
  10. # Override normal ENV values with nconf ENV values (ENV values are used the same way without nconf)
  11. #FIXME can't get nconf file above to load...
  12. process.env.BASE_URL = conf.get("BASE_URL")
  13. process.env.FACEBOOK_KEY = conf.get("FACEBOOK_KEY")
  14. process.env.FACEBOOK_SECRET = conf.get("FACEBOOK_SECRET")
  15. process.env.NODE_DB_URI = 'mongodb://localhost/habitrpg'
  16. User = require('../../src/models/user').model
  17. Group = require('../../src/models/group').model
  18. Challenge = require('../../src/models/challenge').model
  19. app = require '../../src/server'
  20. ## monkey-patch expect.js for better diffs on mocha
  21. ## see: https://github.com/LearnBoost/expect.js/pull/34
  22. #origBe = expect.Assertion::be
  23. #expect.Assertion::be = expect.Assertion::equal = (obj) ->
  24. # @_expected = obj
  25. # origBe.call this, obj
  26. # Custom modules
  27. shared = require 'habitrpg-shared'
  28. ###### Helpers & Variables ######
  29. model = null
  30. uuid = null
  31. taskPath = null
  32. baseURL = 'http://localhost:3000/api/v2'
  33. ###
  34. expect().eql expects object keys to be in the correct order, this sorts that out
  35. ###
  36. expectUserEqual = (u1, u2) ->
  37. [u1, u2] = _.map [u1, u2], (obj) ->
  38. 'update__ stats.toNextLevel stats.maxHealth __v'.split(' ').forEach (path) ->
  39. helpers.dotSet path, null, obj
  40. sorted = {}
  41. _.each _.keys(obj).sort(), (k) -> sorted[k] = obj[k]
  42. sorted.tasks = _.sortBy sorted.tasks, 'id'
  43. sorted
  44. # console.log {u1, u2}
  45. expect(u1).to.eql(u2)
  46. expectSameValues = (obj1, obj2, paths) ->
  47. _.each paths, (k) ->
  48. expect(helpers.dotGet(k,obj1)).to.eql helpers.dotGet(k,obj2)
  49. expectCode = (res, code) ->
  50. expect(res.body.err).to.be undefined if code is 200
  51. expect(res.statusCode).to.be code
  52. ###### Specs ######
  53. describe 'API', ->
  54. user = null
  55. _id = null
  56. apiToken = null
  57. username = null
  58. password = null
  59. registerNewUser = (cb, main=true)->
  60. randomID = shared.uuid()
  61. [username,password] = [randomID,randomID] if main
  62. request.post("#{baseURL}/register")
  63. .set('Accept', 'application/json')
  64. .send({
  65. username: randomID
  66. password: randomID
  67. confirmPassword: randomID
  68. email: "#{randomID}@gmail.com"
  69. })
  70. .end (res) ->
  71. return cb(null,res.body) unless main
  72. {_id,apiToken} = res.body
  73. console.log {_id,apiToken}
  74. User.findOne {_id, apiToken}, (err, _user) ->
  75. expect(err).to.not.be.ok
  76. user = _user
  77. request
  78. .set('Accept', 'application/json')
  79. .set('X-API-User', _id)
  80. .set('X-API-Key', apiToken)
  81. cb null, res.body
  82. before (done)->
  83. require '../../src/server' #start the server
  84. # then wait for it to do it's thing. TODO make a cb-compatible export of server
  85. setTimeout done, 2000
  86. describe 'Without token or user id', ->
  87. it '/api/v2/status', (done) ->
  88. request.get("#{baseURL}/status")
  89. .set('Accept', 'application/json')
  90. .end (res) ->
  91. expect(res.statusCode).to.be 200
  92. expect(res.body.status).to.be 'up'
  93. done()
  94. it '/api/v2/user', (done) ->
  95. request.get("#{baseURL}/user")
  96. .set('Accept', 'application/json')
  97. .end (res) ->
  98. expect(res.statusCode).to.be 401
  99. expect(res.body.err).to.be 'You must include a token and uid (user id) in your request'
  100. done()
  101. describe 'With token and user id', ->
  102. currentUser = null
  103. before (done) ->
  104. registerNewUser(done,true)
  105. beforeEach (done) ->
  106. User.findById _id, (err,_user) ->
  107. currentUser = _user
  108. done()
  109. ############
  110. # Groups
  111. ############
  112. describe 'Groups', ->
  113. group = undefined
  114. before (done) ->
  115. request.post("#{baseURL}/groups")
  116. .send({name:"TestGroup", type:"party"})
  117. .end (res) ->
  118. expectCode res, 200
  119. group = res.body
  120. expect(group.members.length).to.be 1
  121. expect(group.leader).to.be user._id
  122. done()
  123. describe 'Challenges', ->
  124. challenge = undefined
  125. updateTodo = undefined
  126. it 'Creates a challenge', (done) ->
  127. request.post("#{baseURL}/challenges")
  128. .send({
  129. group:group._id
  130. dailys: [{type:'daily',text:'Challenge Daily'}]
  131. todos: [{type:'todo', text:'Challenge Todo', notes:'Challenge Notes'}]
  132. rewards: []
  133. habits: []
  134. official: true
  135. })
  136. .end (res) ->
  137. expectCode res, 200
  138. async.parallel [
  139. (cb) -> User.findById _id, cb
  140. (cb) -> Challenge.findById res.body._id, cb
  141. ], (err, results) ->
  142. [_user,challenge] = [results[0],results[1]]
  143. expect(_user.dailys[_user.dailys.length-1].text).to.be('Challenge Daily')
  144. updateTodo = _user.todos[_user.todos.length-1]
  145. expect(updateTodo.text).to.be('Challenge Todo')
  146. expect(challenge.official).to.be false
  147. done()
  148. it 'User updates challenge notes', (done) ->
  149. updateTodo.notes = "User overriden notes"
  150. request.put("#{baseURL}/user/tasks/#{updateTodo.id}")
  151. .send(updateTodo)
  152. .end (res) ->
  153. done() #we'll do the check down below
  154. it 'Change challenge daily', (done) ->
  155. challenge.dailys[0].text = 'Updated Daily'
  156. challenge.todos[0].notes = 'Challenge Updated Todo Notes'
  157. request.post("#{baseURL}/challenges/#{challenge._id}")
  158. .send(challenge)
  159. .end (res) ->
  160. setTimeout ->
  161. User.findById _id, (err,_user) ->
  162. expectCode res, 200
  163. expect(_user.dailys[_user.dailys.length-1].text).to.be('Updated Daily')
  164. expect(res.body.todos[0].notes).to.be('Challenge Updated Todo Notes')
  165. expect(_user.todos[_user.todos.length-1].notes).to.be('User overriden notes')
  166. currentUser = _user
  167. done()
  168. , 500 # we have to wait a while for users' tasks to be updated, called async on server
  169. it 'Shows user notes on challenge page', (done) ->
  170. request.get("#{baseURL}/challenges/#{challenge._id}/member/#{_id}")
  171. .end (res) ->
  172. expect(res.body.todos[res.body.todos.length-1].notes).to.be('User overriden notes')
  173. done()
  174. it 'Complete To-Dos', (done) ->
  175. u = currentUser
  176. request.post("#{baseURL}/user/tasks/#{u.todos[0].id}/up").end (res) ->
  177. request.post("#{baseURL}/user/tasks/#{u.todos[1].id}/up").end (res) ->
  178. request.post("#{baseURL}/user/tasks/").send({type:'todo'}).end (res) ->
  179. request.post("#{baseURL}/user/tasks/clear-completed").end (res) ->
  180. expect(_.size res.body).to.be 2
  181. done()
  182. it 'Admin creates a challenge', (done) ->
  183. User.findByIdAndUpdate _id, {$set:{'contributor.admin':true}}, (err,_user) ->
  184. expect(err).to.not.be.ok
  185. async.parallel [
  186. (cb)->
  187. request.post("#{baseURL}/challenges")
  188. .send({group:group._id, dailys: [], todos: [], rewards: [], habits: [], official: false}).end (res) ->
  189. expect(res.body.official).to.be false
  190. cb()
  191. (cb)->
  192. request.post("#{baseURL}/challenges")
  193. .send({group:group._id, dailys: [], todos: [], rewards: [], habits: [], official: true}).end (res) ->
  194. expect(res.body.official).to.be true
  195. cb()
  196. ], done
  197. describe 'Quests', ->
  198. party = undefined
  199. participating = []
  200. notParticipating = []
  201. it 'Invites some members', (done) ->
  202. async.waterfall [
  203. # Register new users
  204. (cb) ->
  205. async.parallel [
  206. (cb2) -> registerNewUser(cb2,false)
  207. (cb2) -> registerNewUser(cb2,false)
  208. (cb2) -> registerNewUser(cb2,false)
  209. ], cb
  210. # Send them invitations
  211. (_party, cb) ->
  212. party = _party
  213. async.parallel [
  214. (cb2) -> request.post("#{baseURL}/groups/#{group._id}/invite?uuid=#{party[0]._id}").end (-> cb2())
  215. (cb2) -> request.post("#{baseURL}/groups/#{group._id}/invite?uuid=#{party[1]._id}").end (-> cb2())
  216. (cb2) -> request.post("#{baseURL}/groups/#{group._id}/invite?uuid=#{party[2]._id}").end (-> cb2())
  217. ], cb
  218. # Accept / Reject
  219. (results, cb) ->
  220. #series since they'll be modifying the same group record
  221. async.series (_.reduce party, (m,v,i) ->
  222. m.push (cb2) ->
  223. request.post("#{baseURL}/groups/#{group._id}/join")
  224. .set('X-API-User', party[i]._id)
  225. .set('X-API-Key', party[i].apiToken)
  226. .end (res) -> cb2()
  227. m
  228. , []), cb
  229. # Make sure the invites stuck
  230. (whatever, cb) ->
  231. Group.findById group._id, (err, g) ->
  232. expect(g.members.length).to.be 4
  233. cb()
  234. ], (err, results) ->
  235. expect(err).to.be.ok
  236. done()
  237. it 'Starts a quest', (done) ->
  238. async.waterfall [
  239. (cb)->
  240. request.post("#{baseURL}/groups/#{group._id}/questAccept?key=evilsanta")
  241. .end (res) ->
  242. expectCode(res, 401)
  243. User.findByIdAndUpdate _id, {$set:'items.quests.evilsanta':1}, cb
  244. (_user,cb)->
  245. request.post("#{baseURL}/groups/#{group._id}/questAccept?key=evilsanta")
  246. .end (res) ->
  247. expectCode(res, 200)
  248. Group.findById group._id,cb
  249. (_group,cb)->
  250. group = _group #refresh local group
  251. expect(group.quest.key).to.be 'evilsanta'
  252. async.series (_.reduce party, (m,v,i) ->
  253. m.push (cb2) ->
  254. request.post("#{baseURL}/groups/#{group._id}/questAccept")
  255. .set('X-API-User', party[i]._id)
  256. .set('X-API-Key', party[i].apiToken)
  257. .end (res) -> cb2()
  258. m
  259. , []), cb
  260. ], done
  261. it "Doesn't include people who aren't participating"
  262. # ############
  263. # # Batch Update
  264. # ############
  265. #
  266. # describe 'Batch Update', ->
  267. #
  268. # it 'POST /api/v1/batch-update', (done) ->
  269. # userBefore = _.cloneDeep(currentUser)
  270. #
  271. # ops = [
  272. # # Good scores
  273. # op: 'score', params: {id:user.habits[0].id, direction: 'up'}
  274. # op: 'score', params: {id:user.habits[1].id, direction: 'down'}
  275. # op: 'score', params: {id:user.dailys[0].id, direction: 'up'}
  276. # op: 'score', params: {id:user.todos[0].id, direction: 'up'}
  277. # ]
  278. #
  279. # request.post("#{baseURL}/user/batch-update")
  280. # .send(ops)
  281. # .end (res) ->
  282. # expect(res.body.err).to.be undefined
  283. # expect(res.statusCode).to.be 200
  284. # #expectUserEqual(userBefore, res.body)
  285. # done()
  286. #
  287. #
  288. # ############
  289. # # 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)
  290. # ############
  291. #
  292. # it.skip 'POST /api/v2/batch-update (handles corrupt values)', (done) ->
  293. # registerNewUser (_res) ->
  294. # # corrupt the tasks, and let's see how the server handles this
  295. # ids = _res.dailyIds
  296. # _res.tasks[ids[0]].value = NaN
  297. # _res.tasks[ids[1]].value = undefined
  298. # _res.tasks[ids[2]] = {}
  299. # _res.tasks["undefined"] = {}
  300. #
  301. # _res.stats.hp = _res.stats.gp = NaN
  302. #
  303. # _res.lastCron = +new Date('08/13/2013')
  304. #
  305. # ops = [
  306. # op: 'score', task: _res.tasks[ids[0]], dir: 'up'
  307. # ]
  308. #
  309. # model.set "users.#{_res.id}", _res, ->
  310. # request.post("#{baseURL}/user/batch-update")
  311. # .set('Accept', 'application/json')
  312. # .set('X-API-User', _res.id)
  313. # .set('X-API-Key', _res.apiToken)
  314. # .send(ops)
  315. # .end (res) ->
  316. # expect(res.statusCode).to.be 200
  317. # console.log {stats:res.body.stats, tasks:res.body.tasks}
  318. # done()
  319. #
  320. #
  321. # #FIXME figure out how to compare the objects
  322. # it.skip 'GET /api/v1/user', (done) ->
  323. # request.get("#{baseURL}/user")
  324. # .end (res) ->
  325. # expect(res.body.err).to.be undefined
  326. # expect(res.statusCode).to.be 200
  327. # expect(res.body.id).not.to.be.empty()
  328. # self = _.clone(currentUser)
  329. # delete self.apiToken
  330. # self.stats.toNextLevel = 150
  331. # self.stats.maxHealth = 50
  332. #
  333. # expectUserEqual(res.body, self)
  334. # done()
  335. #
  336. # it.skip 'GET /api/v1/user/task/:id', (done) ->
  337. # tid = _.pluck(currentUser.tasks, 'id')[0]
  338. # request.get("#{baseURL}/user/task/#{tid}")
  339. # .end (res) ->
  340. # expect(res.body.err).to.be undefined
  341. # expect(res.statusCode).to.be 200
  342. # expect(res.body).to.eql currentUser.tasks[tid]
  343. # done()
  344. #
  345. # it.skip 'POST /api/v1/user/task', (done) ->
  346. # request.post("#{baseURL}/user/task")
  347. # .send({title: 'Title', text: 'Text', type: 'habit'})
  348. # .end (res) ->
  349. # query = model.query('users').withIdAndToken(currentUser.id, currentUser.apiToken)
  350. # query.fetch (err, user) ->
  351. # expect(res.body.err).to.be undefined
  352. # expect(res.statusCode).to.be 201
  353. # expect(res.body.id).not.to.be.empty()
  354. # # Ensure that user owns the newly created object
  355. # saved = user.get("tasks.#{res.body.id}")
  356. # expect(saved).to.be.an('object')
  357. # done()
  358. #
  359. # it.skip 'POST /api/v1/user/task (without type)', (done) ->
  360. # request.post("#{baseURL}/user/task")
  361. # .send({})
  362. # .end (res) ->
  363. # expect(res.body.err).to.be 'type must be habit, todo, daily, or reward'
  364. # expect(res.statusCode).to.be 400
  365. # done()
  366. #
  367. # it.skip 'POST /api/v1/user/task (only type)', (done) ->
  368. # request.post("#{baseURL}/user/task")
  369. # .send(type: 'habit')
  370. # .end (res) ->
  371. # query = model.query('users').withIdAndToken(currentUser.id, currentUser.apiToken)
  372. # query.fetch (err, user) ->
  373. # expect(res.body.err).to.be undefined
  374. # expect(res.statusCode).to.be 201
  375. # expect(res.body.id).not.to.be.empty()
  376. # # Ensure that user owns the newly created object
  377. # expect(user.get().tasks[res.body.id]).to.be.an('object')
  378. # # Ensure that value gets set to 0 since not otherwise specified
  379. # expect(user.get().tasks[res.body.id].value).to.be.equal(0)
  380. # done()
  381. #
  382. # it.skip 'PUT /api/v1/user/task/:id', (done) ->
  383. # tid = _.pluck(currentUser.tasks, 'id')[0]
  384. # request.put("#{baseURL}/user/task/#{tid}")
  385. # .send(text: 'bye')
  386. # .end (res) ->
  387. # expect(res.body.err).to.be undefined
  388. # expect(res.statusCode).to.be 200
  389. # currentUser.tasks[tid].text = 'bye'
  390. # expectSameValues res.body, currentUser.tasks[tid], ['id','type','text']
  391. # #expect(res.body).to.eql currentUser.tasks[tid]
  392. # done()
  393. #
  394. # it.skip 'PUT /api/v1/user/task/:id (shouldnt update type)', (done) ->
  395. # tid = _.pluck(currentUser.tasks, 'id')[1]
  396. # type = if currentUser.tasks[tid].type is 'habit' then 'daily' else 'habit'
  397. # request.put("#{baseURL}/user/task/#{tid}")
  398. # .send(type: type, text: 'fishman')
  399. # .end (res) ->
  400. # expect(res.body.err).to.be undefined
  401. # expect(res.statusCode).to.be 200
  402. # currentUser.tasks[tid].text = 'fishman'
  403. # expect(res.body).to.eql currentUser.tasks[tid]
  404. # done()
  405. #
  406. # it.skip 'PUT /api/v1/user/task/:id (update notes)', (done) ->
  407. # tid = _.pluck(currentUser.tasks, 'id')[2]
  408. # request.put("#{baseURL}/user/task/#{tid}")
  409. # .send(text: 'hi',notes:'foobar matey')
  410. # .end (res) ->
  411. # expect(res.body.err).to.be undefined
  412. # expect(res.statusCode).to.be 200
  413. # currentUser.tasks[tid].text = 'hi'
  414. # currentUser.tasks[tid].notes = 'foobar matey'
  415. # expect(res.body).to.eql currentUser.tasks[tid]
  416. # done()
  417. #
  418. # it.skip 'GET /api/v1/user/tasks', (done) ->
  419. # request.get("#{baseURL}/user/tasks")
  420. # .end (res) ->
  421. # query = model.query('users').withIdAndToken(currentUser.id, currentUser.apiToken)
  422. # query.fetch (err, user) ->
  423. # expect(res.body.err).to.be undefined
  424. # expect(user.get()).to.be.ok()
  425. # expect(res.statusCode).to.be 200
  426. # model.ref '_user', user
  427. # tasks = []
  428. # for type in ['habit','todo','daily','reward']
  429. # model.refList "_#{type}List", "_user.tasks", "_user.#{type}Ids"
  430. # tasks = tasks.concat model.get("_#{type}List")
  431. # # Ensure that user owns the tasks
  432. # expect(res.body.length).to.equal tasks.length
  433. # # Ensure that the two sets are equal
  434. # expect(_.difference(_.pluck(res.body,'id'), _.pluck(tasks,'id')).length).to.equal 0
  435. # done()
  436. #
  437. # it.skip 'GET /api/v1/user/tasks (todos)', (done) ->
  438. # request.get("#{baseURL}/user/tasks")
  439. # .query(type:'todo')
  440. # .end (res) ->
  441. # query = model.query('users').withIdAndToken(currentUser.id, currentUser.apiToken)
  442. # query.fetch (err, user) ->
  443. # expect(res.body.err).to.be undefined
  444. # expect(res.statusCode).to.be 200
  445. # model.ref '_user', user
  446. # model.refList "_todoList", "_user.tasks", "_user.todoIds"
  447. # tasks = model.get("_todoList")
  448. # # Ensure that user owns the tasks
  449. # expect(res.body.length).to.equal tasks.length
  450. # # Ensure that the two sets are equal
  451. # expect(_.difference(_.pluck(res.body,'id'), _.pluck(tasks,'id')).length).to.equal 0
  452. # done()
  453. #
  454. # it.skip 'DELETE /api/v1/user/task/:id', (done) ->
  455. # tid = currentUser.habitIds[2]
  456. # request.del("#{baseURL}/user/task/#{tid}")
  457. # .end (res) ->
  458. # expect(res.body.err).to.be undefined
  459. # expect(res.statusCode).to.be 204
  460. # query = model.query('users').withIdAndToken(currentUser.id, currentUser.apiToken)
  461. # query.fetch (err, user) ->
  462. # expect(user.get('habitIds').indexOf(tid)).to.be -1
  463. # expect(user.get("tasks.#{tid}")).to.be undefined
  464. # done()
  465. #
  466. # it.skip 'DELETE /api/v1/user/task/:id (no task found)', (done) ->
  467. # tid = "adsfasdfjunkshouldntbeatask"
  468. # request.del("#{baseURL}/user/task/#{tid}")
  469. # .end (res) ->
  470. # expect(res.statusCode).to.be 400
  471. # expect(res.body.err).to.be 'No task found.'
  472. # done()
  473. #
  474. # it.skip 'POST /api/v1/user/task/:id/up (habit)', (done) ->
  475. # tid = currentUser.habitIds[0]
  476. # request.post("#{baseURL}/user/task/#{tid}/up")
  477. # .send({})
  478. # .end (res) ->
  479. # expect(res.body.err).to.be undefined
  480. # expect(res.statusCode).to.be 200
  481. # expect(res.body).to.eql { gp: 1, exp: 7.5, lvl: 1, hp: 50, delta: 1 }
  482. # done()
  483. #
  484. # it.skip 'POST /api/v1/user/task/:id/up (daily)', (done) ->
  485. # tid = currentUser.dailyIds[0]
  486. # request.post("#{baseURL}/user/task/#{tid}/up")
  487. # .send({})
  488. # .end (res) ->
  489. # expect(res.body.err).to.be undefined
  490. # expect(res.statusCode).to.be 200
  491. # expect(res.body).to.eql { gp: 2, exp: 15, lvl: 1, hp: 50, delta: 1 }
  492. # query = model.query('users').withIdAndToken(currentUser.id, currentUser.apiToken)
  493. # query.fetch (err, user) ->
  494. # expect(user.get("tasks.#{tid}.completed")).to.be true
  495. # done()
  496. #
  497. # it.skip 'POST /api/v1/user/task (array)', (done) ->
  498. # habitId = currentUser.habitIds[0]
  499. # dailyId = currentUser.dailyIds[0]
  500. # arr = [{
  501. # id: habitId
  502. # text: 'hello'
  503. # notes: 'note'
  504. # },{
  505. # text: 'new task'
  506. # notes: 'notes!'
  507. # },{
  508. # id: dailyId
  509. # del: true
  510. # }]
  511. #
  512. # request.post("#{baseURL}/user/tasks")
  513. # .send(arr)
  514. # .end (res) ->
  515. # expect(res.body.err).to.be undefined
  516. # expect(res.statusCode).to.be 201
  517. #
  518. # expectSameValues res.body[0], {id: habitId,text: 'hello',notes: 'note'}, ['id','text','notes']
  519. # expect(res.body[1].id).to.be.a 'string'
  520. # expect(res.body[1].text).to.be 'new task'
  521. # expect(res.body[1].notes).to.be 'notes!'
  522. # expect(res.body[2]).to.eql deleted: true
  523. #
  524. # query = model.query('users').withIdAndToken(currentUser.id, currentUser.apiToken)
  525. # query.fetch (err, user) ->
  526. # expectSameValues user.get("tasks.#{habitId}"), {id: habitId,text: 'hello',notes: 'note'}, ['id','text','notes']
  527. # expect(user.get("tasks.#{dailyId}")).to.be undefined
  528. # expectSameValues user.get("tasks.#{res.body[1].id}"), {id: res.body[1].id, text: 'new task', notes: 'notes!'}, ['id','text','notes']
  529. # done()
  530. #
  531. # it.skip 'PUT /api/v1/user (bad path)', (done) ->
  532. # # These updates should not save, as per the API changes
  533. # userUpdates =
  534. # stats: hp: 30
  535. # flags: itemsEnabled: true
  536. # tasks: [{
  537. # text: 'hello2'
  538. # notes: 'note2'
  539. # }]
  540. #
  541. # request.put("#{baseURL}/user")
  542. # .send(userUpdates)
  543. # .end (res) ->
  544. # expect(res.body.err).to.be.ok()
  545. # expect(res.statusCode).to.be 500
  546. # done()
  547. #
  548. # it.skip 'PUT /api/v1/user', (done) ->
  549. # userBefore = {}
  550. # query = model.query('users').withIdAndToken(currentUser.id, currentUser.apiToken)
  551. # query.fetch (err, user) ->
  552. # userBefore = user.get()
  553. #
  554. # habitId = currentUser.habitIds[0]
  555. # dailyId = currentUser.dailyIds[0]
  556. # updates = {}
  557. # updates['stats.hp'] = 30
  558. # updates['flags.itemsEnabled'] = true
  559. # updates["tasks.#{habitId}.text"] = 'hello2'
  560. # updates["tasks.#{habitId}.notes"] = 'note2'
  561. #
  562. # request.put("#{baseURL}/user")
  563. # .send(updates)
  564. # .end (res) ->
  565. # expect(res.body.err).to.be undefined
  566. # expect(res.statusCode).to.be 200
  567. # changesWereMade = (obj) ->
  568. # expect(obj.stats.hp).to.be 30
  569. # expect(obj.flags.itemsEnabled).to.be true
  570. # expectSameValues _.find(obj.tasks,{id:habitId}), {id: habitId,text: 'hello2',notes: 'note2'}, ['id','text','notes']
  571. # changesWereMade res.body
  572. # query.fetch (err, user) ->
  573. # changesWereMade user.get()
  574. # done()
  575. #
  576. # it.skip 'POST /api/v1/user/auth/local', (done) ->
  577. # userAuth = {username, password}
  578. # request.post("#{baseURL}/user/auth/local")
  579. # .set('Accept', 'application/json')
  580. # .send(userAuth)
  581. # .end (res) ->
  582. # expect(res.body.err).to.be undefined
  583. # expect(res.statusCode).to.be 200
  584. # expect(res.body.id).to.be currentUser.id
  585. # expect(res.body.token).to.be currentUser.apiToken
  586. # done()
  587. #
  588. # it.skip 'POST /api/v1/user/auth/facebook', (done) ->
  589. # id = shared.uuid()
  590. # userAuth = facebook_id: 12345, name: 'Tyler Renelle', email: 'x@y.com'
  591. # newUser = helpers.newUser(true)
  592. # newUser.id = id
  593. # newUser.auth = facebook:
  594. # id: userAuth.facebook_id
  595. # name: userAuth.name
  596. # email: userAuth.email
  597. # model.set "users.#{id}", newUser, ->
  598. #
  599. # request.post("#{baseURL}/user/auth/facebook")
  600. # .set('Accept', 'application/json')
  601. # .send(userAuth)
  602. # .end (res) ->
  603. # expect(res.body.err).to.be undefined
  604. # expect(res.statusCode).to.be 200
  605. # expect(res.body.id).to.be newUser.id
  606. # #expect(res.body.token).to.be newUser.apiToken
  607. # done()
  608. #
  609. #