overleaf/services/document-updater/test/unit/coffee/HistoryRedisManager/HistoryRedisManagerTests.js

82 lines
2.6 KiB
JavaScript

/*
* decaffeinate suggestions:
* DS101: Remove unnecessary use of Array.from
* DS102: Remove unnecessary code created because of implicit returns
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
*/
const sinon = require('sinon');
const chai = require('chai');
const should = chai.should();
const modulePath = "../../../../app/js/HistoryRedisManager.js";
const SandboxedModule = require('sandboxed-module');
const Errors = require("../../../../app/js/Errors");
describe("HistoryRedisManager", function() {
beforeEach(function() {
this.rclient = {
auth() {},
exec: sinon.stub()
};
this.rclient.multi = () => this.rclient;
this.HistoryRedisManager = SandboxedModule.require(modulePath, { requires: {
"redis-sharelatex": { createClient: () => this.rclient
},
"settings-sharelatex": {
redis: {
history: (this.settings = {
key_schema: {
uncompressedHistoryOps({doc_id}) { return `UncompressedHistoryOps:${doc_id}`; },
docsWithHistoryOps({project_id}) { return `DocsWithHistoryOps:${project_id}`; }
}
})
}
},
"logger-sharelatex": { log() {} }
}
});
this.doc_id = "doc-id-123";
this.project_id = "project-id-123";
return this.callback = sinon.stub();
});
return describe("recordDocHasHistoryOps", function() {
beforeEach(function() {
this.ops = [{ op: [{ i: "foo", p: 4 }] },{ op: [{ i: "bar", p: 56 }] }];
return this.rclient.sadd = sinon.stub().yields();
});
describe("with ops", function() {
beforeEach(function(done) {
return this.HistoryRedisManager.recordDocHasHistoryOps(this.project_id, this.doc_id, this.ops, (...args) => {
this.callback(...Array.from(args || []));
return done();
});
});
return it("should add the doc_id to the set of which records the project docs", function() {
return this.rclient.sadd
.calledWith(`DocsWithHistoryOps:${this.project_id}`, this.doc_id)
.should.equal(true);
});
});
return describe("with no ops", function() {
beforeEach(function(done) {
return this.HistoryRedisManager.recordDocHasHistoryOps(this.project_id, this.doc_id, [], (...args) => {
this.callback(...Array.from(args || []));
return done();
});
});
it("should not add the doc_id to the set of which records the project docs", function() {
return this.rclient.sadd
.called
.should.equal(false);
});
return it("should call the callback with an error", function() {
return this.callback.calledWith(new Error("cannot push no ops")).should.equal(true);
});
});
});
});