diff --git a/services/track-changes/app/coffee/HistoryManager.coffee b/services/track-changes/app/coffee/HistoryManager.coffee index 32b3ddf758..9d332a6f79 100644 --- a/services/track-changes/app/coffee/HistoryManager.coffee +++ b/services/track-changes/app/coffee/HistoryManager.coffee @@ -14,7 +14,7 @@ module.exports = HistoryManager = return callback null, compressedUpdates[0] or null deleteCompressedUpdate: (id, callback = (error) ->) -> - db.docHistory.delete({ _id: ObjectId(id.toString()) }, callback) + db.docHistory.remove({ _id: ObjectId(id.toString()) }, callback) popLastCompressedUpdate: (doc_id, callback = (error, update) ->) -> HistoryManager.getLastCompressedUpdate doc_id, (error, update) -> diff --git a/services/track-changes/test/acceptance/coffee/AppendingUpdatesTests.coffee b/services/track-changes/test/acceptance/coffee/AppendingUpdatesTests.coffee index c901917ac1..1b6f335914 100644 --- a/services/track-changes/test/acceptance/coffee/AppendingUpdatesTests.coffee +++ b/services/track-changes/test/acceptance/coffee/AppendingUpdatesTests.coffee @@ -12,7 +12,7 @@ describe "Appending doc ops to the history", -> before (done) -> @doc_id = ObjectId().toString() @user_id = ObjectId().toString() - @updates = [{ + updates = [{ op: [{ i: "f", p: 3 }] meta: { ts: Date.now(), user_id: @user_id } }, { @@ -28,7 +28,7 @@ describe "Appending doc ops to the history", -> url: "http://localhost:#{Settings.port}/doc/#{@doc_id}/history" json: version: @version - docOps: @updates + docOps: updates }, (@error, @response, @body) => done() @@ -36,3 +36,80 @@ describe "Appending doc ops to the history", -> @response.statusCode.should.equal 204 + describe "when the history has already been started", -> + beforeEach (done) -> + @doc_id = ObjectId().toString() + @user_id = ObjectId().toString() + updates = [{ + op: [{ i: "f", p: 3 }] + meta: { ts: Date.now(), user_id: @user_id } + }, { + op: [{ i: "o", p: 4 }] + meta: { ts: Date.now(), user_id: @user_id } + }, { + op: [{ i: "o", p: 5 }] + meta: { ts: Date.now(), user_id: @user_id } + }] + @version = 3 + + request.post { + url: "http://localhost:#{Settings.port}/doc/#{@doc_id}/history" + json: + version: @version + docOps: updates + }, (@error, @response, @body) => + done() + + describe "when the updates are recent and from the same user", -> + beforeEach (done) -> + updates = [{ + op: [{ i: "b", p: 6 }] + meta: { ts: Date.now(), user_id: @user_id } + }, { + op: [{ i: "a", p: 7 }] + meta: { ts: Date.now(), user_id: @user_id } + }, { + op: [{ i: "r", p: 8 }] + meta: { ts: Date.now(), user_id: @user_id } + }] + @version = 6 + + request.post { + url: "http://localhost:#{Settings.port}/doc/#{@doc_id}/history" + json: + version: @version + docOps: updates + }, (@error, @response, @body) => + done() + + it "should return a successful response", -> + @response.statusCode.should.equal 204 + + + describe "when the updates are far apart", -> + beforeEach (done) -> + oneDay = 24 * 60 * 60 * 1000 + updates = [{ + op: [{ i: "b", p: 6 }] + meta: { ts: Date.now() + oneDay, user_id: @user_id } + }, { + op: [{ i: "a", p: 7 }] + meta: { ts: Date.now() + oneDay, user_id: @user_id } + }, { + op: [{ i: "r", p: 8 }] + meta: { ts: Date.now() + oneDay, user_id: @user_id } + }] + @version = 6 + + request.post { + url: "http://localhost:#{Settings.port}/doc/#{@doc_id}/history" + json: + version: @version + docOps: updates + }, (@error, @response, @body) => + done() + + it "should return a successful response", -> + @response.statusCode.should.equal 204 + +