FlushingUpdatesTests.coffee 4.1 KB

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