FlushingUpdatesTests.coffee 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. sinon = require "sinon"
  2. chai = require("chai")
  3. chai.should()
  4. expect = chai.expect
  5. mongojs = require "../../../app/js/mongojs"
  6. ObjectId = mongojs.ObjectId
  7. Settings = require "settings-sharelatex"
  8. request = require "request"
  9. rclient = require("redis").createClient(Settings.redis.history) # Only works locally for now
  10. TrackChangesApp = require "./helpers/TrackChangesApp"
  11. TrackChangesClient = require "./helpers/TrackChangesClient"
  12. MockWebApi = require "./helpers/MockWebApi"
  13. describe "Flushing updates", ->
  14. before (done)->
  15. TrackChangesApp.ensureRunning done
  16. describe "flushing a doc's updates", ->
  17. before (done) ->
  18. @project_id = ObjectId().toString()
  19. @doc_id = ObjectId().toString()
  20. @user_id = ObjectId().toString()
  21. MockWebApi.projects[@project_id] = features: versioning: true
  22. TrackChangesClient.pushRawUpdates @project_id, @doc_id, [{
  23. op: [{ i: "f", p: 3 }]
  24. meta: { ts: Date.now(), user_id: @user_id }
  25. v: 3
  26. }], (error) =>
  27. throw error if error?
  28. TrackChangesClient.flushDoc @project_id, @doc_id, (error) ->
  29. throw error if error?
  30. done()
  31. return null
  32. it "should flush the op into mongo", (done) ->
  33. TrackChangesClient.getCompressedUpdates @doc_id, (error, updates) ->
  34. expect(updates[0].pack[0].op).to.deep.equal [{
  35. p: 3, i: "f"
  36. }]
  37. done()
  38. return null
  39. describe "flushing a project's updates", ->
  40. describe "with versioning enabled", ->
  41. before (done) ->
  42. @project_id = ObjectId().toString()
  43. @doc_id = ObjectId().toString()
  44. @user_id = ObjectId().toString()
  45. @weeks = 7 * 24 * 60 * 60 * 1000
  46. MockWebApi.projects[@project_id] =
  47. features:
  48. versioning: true
  49. TrackChangesClient.pushRawUpdates @project_id, @doc_id, [{
  50. op: [{ i: "g", p: 2 }]
  51. meta: { ts: Date.now() - 2 * @weeks, user_id: @user_id }
  52. v: 2
  53. }, {
  54. op: [{ i: "f", p: 3 }]
  55. meta: { ts: Date.now(), user_id: @user_id }
  56. v: 3
  57. }], (error) =>
  58. throw error if error?
  59. TrackChangesClient.flushProject @project_id, (error) ->
  60. throw error if error?
  61. done()
  62. return null
  63. it "should not mark the updates for deletion", (done) ->
  64. TrackChangesClient.getCompressedUpdates @doc_id, (error, updates) ->
  65. expect(updates[0].expiresAt).to.not.exist
  66. done()
  67. return null
  68. it "should preserve history forever", (done) ->
  69. TrackChangesClient.getProjectMetaData @project_id, (error, project) ->
  70. expect(project.preserveHistory).to.equal true
  71. done()
  72. return null
  73. describe "without versioning enabled", ->
  74. before (done) ->
  75. @project_id = ObjectId().toString()
  76. @doc_id = ObjectId().toString()
  77. @user_id = ObjectId().toString()
  78. @weeks = 7 * 24 * 60 * 60 * 1000
  79. MockWebApi.projects[@project_id] =
  80. features:
  81. versioning: false
  82. TrackChangesClient.pushRawUpdates @project_id, @doc_id, [{
  83. op: [{ i: "g", p: 2 }]
  84. meta: { ts: Date.now() - 2 * @weeks, user_id: @user_id }
  85. v: 2
  86. }, {
  87. op: [{ i: "f", p: 3 }]
  88. meta: { ts: Date.now(), user_id: @user_id }
  89. v: 3
  90. }], (error) =>
  91. throw error if error?
  92. TrackChangesClient.flushProject @project_id, (error) ->
  93. throw error if error?
  94. done()
  95. return null
  96. it "should mark the updates for deletion", (done) ->
  97. TrackChangesClient.getCompressedUpdates @doc_id, (error, updates) ->
  98. expect(updates[0].expiresAt).to.exist
  99. done()
  100. return null
  101. describe "without versioning enabled but with preserveHistory set to true", ->
  102. before (done) ->
  103. @project_id = ObjectId().toString()
  104. @doc_id = ObjectId().toString()
  105. @user_id = ObjectId().toString()
  106. @weeks = 7 * 24 * 60 * 60 * 1000
  107. MockWebApi.projects[@project_id] =
  108. features:
  109. versioning: false
  110. TrackChangesClient.setPreserveHistoryForProject @project_id, (error) =>
  111. throw error if error?
  112. TrackChangesClient.pushRawUpdates @project_id, @doc_id, [{
  113. op: [{ i: "g", p: 2 }]
  114. meta: { ts: Date.now() - 2 * @weeks, user_id: @user_id }
  115. v: 2
  116. }, {
  117. op: [{ i: "f", p: 3 }]
  118. meta: { ts: Date.now(), user_id: @user_id }
  119. v: 3
  120. }], (error) =>
  121. throw error if error?
  122. TrackChangesClient.flushProject @project_id, (error) ->
  123. throw error if error?
  124. done()
  125. return null
  126. it "should not mark the updates for deletion", (done) ->
  127. TrackChangesClient.getCompressedUpdates @doc_id, (error, updates) ->
  128. expect(updates[0].expiresAt).to.not.exist
  129. done()
  130. return null