/* eslint-disable handle-callback-err, no-unused-vars, */ // TODO: This file was created by bulk-decaffeinate. // Fix any style issues and re-enable lint. /* * decaffeinate suggestions: * DS102: Remove unnecessary code created because of implicit returns * DS207: Consider shorter variations of null checks * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md */ const sinon = require("sinon"); const chai = require("chai"); chai.should(); const { expect } = chai; const mongojs = require("../../../app/js/mongojs"); const { ObjectId } = mongojs; const Settings = require("settings-sharelatex"); const request = require("request"); const rclient = require("redis").createClient(Settings.redis.history); // Only works locally for now const TrackChangesApp = require("./helpers/TrackChangesApp"); const TrackChangesClient = require("./helpers/TrackChangesClient"); const MockWebApi = require("./helpers/MockWebApi"); describe("Flushing updates", function() { before(function(done) { return TrackChangesApp.ensureRunning(done); }); describe("flushing a doc's updates", function() { before(function(done) { this.project_id = ObjectId().toString(); this.doc_id = ObjectId().toString(); this.user_id = ObjectId().toString(); MockWebApi.projects[this.project_id] = {features: {versioning: true}}; TrackChangesClient.pushRawUpdates(this.project_id, this.doc_id, [{ op: [{ i: "f", p: 3 }], meta: { ts: Date.now(), user_id: this.user_id }, v: 3 }], error => { if (error != null) { throw error; } return TrackChangesClient.flushDoc(this.project_id, this.doc_id, (error) => { if (error != null) { throw error; } return done(); }); }); return null; }); return it("should flush the op into mongo", function(done) { TrackChangesClient.getCompressedUpdates(this.doc_id, (error, updates) => { expect(updates[0].pack[0].op).to.deep.equal([{ p: 3, i: "f" }]); return done(); }); return null; }); }); return describe("flushing a project's updates", function() { describe("with versioning enabled", function() { before(function(done) { this.project_id = ObjectId().toString(); this.doc_id = ObjectId().toString(); this.user_id = ObjectId().toString(); this.weeks = 7 * 24 * 60 * 60 * 1000; MockWebApi.projects[this.project_id] = { features: { versioning: true } }; TrackChangesClient.pushRawUpdates(this.project_id, this.doc_id, [{ op: [{ i: "g", p: 2 }], meta: { ts: Date.now() - (2 * this.weeks), user_id: this.user_id }, v: 2 }, { op: [{ i: "f", p: 3 }], meta: { ts: Date.now(), user_id: this.user_id }, v: 3 }], error => { if (error != null) { throw error; } return TrackChangesClient.flushProject(this.project_id, (error) => { if (error != null) { throw error; } return done(); }); }); return null; }); it("should not mark the updates for deletion", function(done) { TrackChangesClient.getCompressedUpdates(this.doc_id, (error, updates) => { expect(updates[0].expiresAt).to.not.exist; return done(); }); return null; }); return it("should preserve history forever", function(done) { TrackChangesClient.getProjectMetaData(this.project_id, (error, project) => { expect(project.preserveHistory).to.equal(true); return done(); }); return null; }); }); describe("without versioning enabled", function() { before(function(done) { this.project_id = ObjectId().toString(); this.doc_id = ObjectId().toString(); this.user_id = ObjectId().toString(); this.weeks = 7 * 24 * 60 * 60 * 1000; MockWebApi.projects[this.project_id] = { features: { versioning: false } }; TrackChangesClient.pushRawUpdates(this.project_id, this.doc_id, [{ op: [{ i: "g", p: 2 }], meta: { ts: Date.now() - (2 * this.weeks), user_id: this.user_id }, v: 2 }, { op: [{ i: "f", p: 3 }], meta: { ts: Date.now(), user_id: this.user_id }, v: 3 }], error => { if (error != null) { throw error; } return TrackChangesClient.flushProject(this.project_id, (error) => { if (error != null) { throw error; } return done(); }); }); return null; }); return it("should mark the updates for deletion", function(done) { TrackChangesClient.getCompressedUpdates(this.doc_id, (error, updates) => { expect(updates[0].expiresAt).to.exist; return done(); }); return null; }); }); return describe("without versioning enabled but with preserveHistory set to true", function() { before(function(done) { this.project_id = ObjectId().toString(); this.doc_id = ObjectId().toString(); this.user_id = ObjectId().toString(); this.weeks = 7 * 24 * 60 * 60 * 1000; MockWebApi.projects[this.project_id] = { features: { versioning: false } }; TrackChangesClient.setPreserveHistoryForProject(this.project_id, error => { if (error != null) { throw error; } return TrackChangesClient.pushRawUpdates(this.project_id, this.doc_id, [{ op: [{ i: "g", p: 2 }], meta: { ts: Date.now() - (2 * this.weeks), user_id: this.user_id }, v: 2 }, { op: [{ i: "f", p: 3 }], meta: { ts: Date.now(), user_id: this.user_id }, v: 3 }], error => { if (error != null) { throw error; } return TrackChangesClient.flushProject(this.project_id, (error) => { if (error != null) { throw error; } return done(); }); }); }); return null; }); return it("should not mark the updates for deletion", function(done) { TrackChangesClient.getCompressedUpdates(this.doc_id, (error, updates) => { expect(updates[0].expiresAt).to.not.exist; return done(); }); return null; }); }); }); });