TrackChangesTests.coffee 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. sinon = require "sinon"
  2. chai = require("chai")
  3. chai.should()
  4. async = require "async"
  5. rclient = require("redis").createClient()
  6. MockWebApi = require "./helpers/MockWebApi"
  7. DocUpdaterClient = require "./helpers/DocUpdaterClient"
  8. describe "Track changes", ->
  9. describe "tracking changes", ->
  10. before (done) ->
  11. @project_id = DocUpdaterClient.randomId()
  12. @user_id = DocUpdaterClient.randomId()
  13. @doc = {
  14. id: DocUpdaterClient.randomId()
  15. lines: ["aaa"]
  16. }
  17. @updates = [{
  18. doc: @doc.id
  19. op: [{ i: "123", p: 1 }]
  20. v: 0
  21. meta: { user_id: @user_id }
  22. }, {
  23. doc: @doc.id
  24. op: [{ i: "456", p: 5 }]
  25. v: 1
  26. meta: { user_id: @user_id, tc: 1 }
  27. }, {
  28. doc: @doc.id
  29. op: [{ d: "12", p: 1 }]
  30. v: 2
  31. meta: { user_id: @user_id }
  32. }]
  33. MockWebApi.insertDoc @project_id, @doc.id, {
  34. lines: @doc.lines
  35. version: 0
  36. }
  37. jobs = []
  38. for update in @updates
  39. do (update) =>
  40. jobs.push (callback) => DocUpdaterClient.sendUpdate @project_id, @doc.id, update, callback
  41. DocUpdaterClient.preloadDoc @project_id, @doc.id, (error) =>
  42. throw error if error?
  43. async.series jobs, (error) ->
  44. throw error if error?
  45. setTimeout done, 200
  46. it "should set the updated track changes entries in redis", (done) ->
  47. console.log "TODO: GET ME FROM HTTP REQUEST"
  48. rclient.get "TrackChangesEntries:#{@doc.id}", (error, value) =>
  49. throw error if error?
  50. entries = JSON.parse(value)
  51. change = entries.changes[0]
  52. change.op.should.deep.equal { i: "456", p: 3 }
  53. change.metadata.user_id.should.equal @user_id
  54. done()