GettingADiffTests.coffee 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. sinon = require "sinon"
  2. chai = require("chai")
  3. chai.should()
  4. expect = chai.expect
  5. mongojs = require "../../../app/js/mongojs"
  6. db = mongojs.db
  7. ObjectId = mongojs.ObjectId
  8. Settings = require "settings-sharelatex"
  9. TrackChangesApp = require "./helpers/TrackChangesApp"
  10. TrackChangesClient = require "./helpers/TrackChangesClient"
  11. MockDocUpdaterApi = require "./helpers/MockDocUpdaterApi"
  12. MockWebApi = require "./helpers/MockWebApi"
  13. describe "Getting a diff", ->
  14. beforeEach (done) ->
  15. sinon.spy MockDocUpdaterApi, "getDoc"
  16. @now = Date.now()
  17. @from = @now - 100000000
  18. @to = @now
  19. @user_id = ObjectId().toString()
  20. @doc_id = ObjectId().toString()
  21. @project_id = ObjectId().toString()
  22. MockWebApi.projects[@project_id] = features: versioning: true
  23. MockWebApi.users[@user_id] = @user =
  24. email: "user@sharelatex.com"
  25. first_name: "Leo"
  26. last_name: "Lion"
  27. id: @user_id
  28. sinon.spy MockWebApi, "getUserInfo"
  29. twoMinutes = 2 * 60 * 1000
  30. @updates = [{
  31. op: [{ i: "one ", p: 0 }]
  32. meta: { ts: @from - twoMinutes, user_id: @user_id }
  33. v: 3
  34. }, {
  35. op: [{ i: "two ", p: 4 }]
  36. meta: { ts: @from + twoMinutes, user_id: @user_id }
  37. v: @fromVersion = 4
  38. }, {
  39. op: [{ i: "three ", p: 8 }]
  40. meta: { ts: @to - twoMinutes, user_id: @user_id }
  41. v: @toVersion = 5
  42. }, {
  43. op: [{ i: "four", p: 14 }]
  44. meta: { ts: @to + twoMinutes, user_id: @user_id }
  45. v: 6
  46. }]
  47. @lines = ["one two three four"]
  48. @expected_diff = [
  49. { u: "one " }
  50. { i: "two three ", meta: { start_ts: @from + twoMinutes, end_ts: @to - twoMinutes, user: @user } }
  51. ]
  52. MockDocUpdaterApi.docs[@doc_id] =
  53. lines: @lines
  54. version: 7
  55. TrackChangesApp.ensureRunning =>
  56. TrackChangesClient.pushRawUpdates @project_id, @doc_id, @updates, (error) =>
  57. throw error if error?
  58. TrackChangesClient.getDiff @project_id, @doc_id, @fromVersion, @toVersion, (error, diff) =>
  59. throw error if error?
  60. @diff = diff.diff
  61. done()
  62. return null
  63. afterEach () ->
  64. MockDocUpdaterApi.getDoc.restore()
  65. MockWebApi.getUserInfo.restore()
  66. return null
  67. it "should return the diff", ->
  68. expect(@diff).to.deep.equal @expected_diff
  69. it "should get the doc from the doc updater", ->
  70. MockDocUpdaterApi.getDoc
  71. .calledWith(@project_id, @doc_id)
  72. .should.equal true
  73. return null