overleaf/services/track-changes/test/acceptance/coffee/FlushingUpdatesTests.coffee
2019-06-21 16:12:40 +01:00

151 lines
4.4 KiB
CoffeeScript

sinon = require "sinon"
chai = require("chai")
chai.should()
expect = chai.expect
mongojs = require "../../../app/js/mongojs"
ObjectId = mongojs.ObjectId
Settings = require "settings-sharelatex"
request = require "request"
rclient = require("redis").createClient(Settings.redis.history) # Only works locally for now
TrackChangesApp = require "./helpers/TrackChangesApp"
TrackChangesClient = require "./helpers/TrackChangesClient"
MockWebApi = require "./helpers/MockWebApi"
describe "Flushing updates", ->
before (done)->
TrackChangesApp.ensureRunning done
describe "flushing a doc's updates", ->
before (done) ->
@project_id = ObjectId().toString()
@doc_id = ObjectId().toString()
@user_id = ObjectId().toString()
MockWebApi.projects[@project_id] = features: versioning: true
TrackChangesClient.pushRawUpdates @project_id, @doc_id, [{
op: [{ i: "f", p: 3 }]
meta: { ts: Date.now(), user_id: @user_id }
v: 3
}], (error) =>
throw error if error?
TrackChangesClient.flushDoc @project_id, @doc_id, (error) ->
throw error if error?
done()
return null
it "should flush the op into mongo", (done) ->
TrackChangesClient.getCompressedUpdates @doc_id, (error, updates) ->
expect(updates[0].pack[0].op).to.deep.equal [{
p: 3, i: "f"
}]
done()
return null
describe "flushing a project's updates", ->
describe "with versioning enabled", ->
before (done) ->
@project_id = ObjectId().toString()
@doc_id = ObjectId().toString()
@user_id = ObjectId().toString()
@weeks = 7 * 24 * 60 * 60 * 1000
MockWebApi.projects[@project_id] =
features:
versioning: true
TrackChangesClient.pushRawUpdates @project_id, @doc_id, [{
op: [{ i: "g", p: 2 }]
meta: { ts: Date.now() - 2 * @weeks, user_id: @user_id }
v: 2
}, {
op: [{ i: "f", p: 3 }]
meta: { ts: Date.now(), user_id: @user_id }
v: 3
}], (error) =>
throw error if error?
TrackChangesClient.flushProject @project_id, (error) ->
throw error if error?
done()
return null
it "should not mark the updates for deletion", (done) ->
TrackChangesClient.getCompressedUpdates @doc_id, (error, updates) ->
expect(updates[0].expiresAt).to.not.exist
done()
return null
it "should preserve history forever", (done) ->
TrackChangesClient.getProjectMetaData @project_id, (error, project) ->
expect(project.preserveHistory).to.equal true
done()
return null
describe "without versioning enabled", ->
before (done) ->
@project_id = ObjectId().toString()
@doc_id = ObjectId().toString()
@user_id = ObjectId().toString()
@weeks = 7 * 24 * 60 * 60 * 1000
MockWebApi.projects[@project_id] =
features:
versioning: false
TrackChangesClient.pushRawUpdates @project_id, @doc_id, [{
op: [{ i: "g", p: 2 }]
meta: { ts: Date.now() - 2 * @weeks, user_id: @user_id }
v: 2
}, {
op: [{ i: "f", p: 3 }]
meta: { ts: Date.now(), user_id: @user_id }
v: 3
}], (error) =>
throw error if error?
TrackChangesClient.flushProject @project_id, (error) ->
throw error if error?
done()
return null
it "should mark the updates for deletion", (done) ->
TrackChangesClient.getCompressedUpdates @doc_id, (error, updates) ->
expect(updates[0].expiresAt).to.exist
done()
return null
describe "without versioning enabled but with preserveHistory set to true", ->
before (done) ->
@project_id = ObjectId().toString()
@doc_id = ObjectId().toString()
@user_id = ObjectId().toString()
@weeks = 7 * 24 * 60 * 60 * 1000
MockWebApi.projects[@project_id] =
features:
versioning: false
TrackChangesClient.setPreserveHistoryForProject @project_id, (error) =>
throw error if error?
TrackChangesClient.pushRawUpdates @project_id, @doc_id, [{
op: [{ i: "g", p: 2 }]
meta: { ts: Date.now() - 2 * @weeks, user_id: @user_id }
v: 2
}, {
op: [{ i: "f", p: 3 }]
meta: { ts: Date.now(), user_id: @user_id }
v: 3
}], (error) =>
throw error if error?
TrackChangesClient.flushProject @project_id, (error) ->
throw error if error?
done()
return null
it "should not mark the updates for deletion", (done) ->
TrackChangesClient.getCompressedUpdates @doc_id, (error, updates) ->
expect(updates[0].expiresAt).to.not.exist
done()
return null