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. TrackChangesClient.pushRawUpdates @project_id, @doc_id, [{
  19. op: [{ i: "f", p: 3 }]
  20. meta: { ts: Date.now(), user_id: @user_id }
  21. v: 3
  22. }], (error) =>
  23. throw error if error?
  24. TrackChangesClient.flushDoc @project_id, @doc_id, (error) ->
  25. throw error if error?
  26. done()
  27. it "should flush the op into mongo", (done) ->
  28. TrackChangesClient.getCompressedUpdates @doc_id, (error, updates) ->
  29. expect(updates[0].op).to.deep.equal [{
  30. p: 3, i: "f"
  31. }]
  32. done()
  33. describe "flushing a project's updates", ->
  34. describe "with versioning enabled", ->
  35. before (done) ->
  36. @project_id = ObjectId().toString()
  37. @doc_id = ObjectId().toString()
  38. @user_id = ObjectId().toString()
  39. @weeks = 7 * 24 * 60 * 60 * 1000
  40. MockWebApi.projects[@project_id] =
  41. features:
  42. versioning: true
  43. TrackChangesClient.pushRawUpdates @project_id, @doc_id, [{
  44. op: [{ i: "g", p: 2 }]
  45. meta: { ts: Date.now() - 2 * @weeks, user_id: @user_id }
  46. v: 2
  47. }, {
  48. op: [{ i: "f", p: 3 }]
  49. meta: { ts: Date.now(), user_id: @user_id }
  50. v: 3
  51. }], (error) =>
  52. throw error if error?
  53. TrackChangesClient.flushProject @project_id, (error) ->
  54. throw error if error?
  55. done()
  56. it "should not delete the old updates", (done) ->
  57. TrackChangesClient.getCompressedUpdates @doc_id, (error, updates) ->
  58. expect(updates.length).to.equal 2
  59. done()
  60. it "should preserve history forever", (done) ->
  61. TrackChangesClient.getProjectMetaData @project_id, (error, project) ->
  62. expect(project.preserveHistory).to.equal true
  63. done()
  64. describe "without versioning enabled", ->
  65. before (done) ->
  66. @project_id = ObjectId().toString()
  67. @doc_id = ObjectId().toString()
  68. @user_id = ObjectId().toString()
  69. @weeks = 7 * 24 * 60 * 60 * 1000
  70. MockWebApi.projects[@project_id] =
  71. features:
  72. versioning: false
  73. TrackChangesClient.pushRawUpdates @project_id, @doc_id, [{
  74. op: [{ i: "g", p: 2 }]
  75. meta: { ts: Date.now() - 2 * @weeks, user_id: @user_id }
  76. v: 2
  77. }, {
  78. op: [{ i: "f", p: 3 }]
  79. meta: { ts: Date.now(), user_id: @user_id }
  80. v: 3
  81. }], (error) =>
  82. throw error if error?
  83. TrackChangesClient.flushProject @project_id, (error) ->
  84. throw error if error?
  85. done()
  86. it "should delete the older update, but the newer update", (done) ->
  87. TrackChangesClient.getCompressedUpdates @doc_id, (error, updates) ->
  88. expect(updates.length).to.equal 1
  89. expect(updates[0].op).to.deep.equal [{ i: "f", p: 3 }]
  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 delete the old updates", (done) ->
  116. TrackChangesClient.getCompressedUpdates @doc_id, (error, updates) ->
  117. expect(updates.length).to.equal 2
  118. done()