overleaf/services/document-updater/test/acceptance/js/GettingProjectDocsTests.js

115 lines
4.1 KiB
JavaScript

/* 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:
* DS101: Remove unnecessary use of Array.from
* 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 MockWebApi = require("./helpers/MockWebApi");
const DocUpdaterClient = require("./helpers/DocUpdaterClient");
const DocUpdaterApp = require("./helpers/DocUpdaterApp");
describe("Getting documents for project", function() {
before(function(done) {
this.lines = ["one", "two", "three"];
this.version = 42;
return DocUpdaterApp.ensureRunning(done);
});
describe("when project state hash does not match", function() {
before(function(done) {
this.projectStateHash = DocUpdaterClient.randomId();
[this.project_id, this.doc_id] = Array.from([DocUpdaterClient.randomId(), DocUpdaterClient.randomId()]);
MockWebApi.insertDoc(this.project_id, this.doc_id, {lines: this.lines, version: this.version});
return DocUpdaterClient.preloadDoc(this.project_id, this.doc_id, error => {
if (error != null) { throw error; }
return DocUpdaterClient.getProjectDocs(this.project_id, this.projectStateHash, (error, res, returnedDocs) => {
this.res = res;
this.returnedDocs = returnedDocs;
return done();
});
});
});
return it("should return a 409 Conflict response", function() {
return this.res.statusCode.should.equal(409);
});
});
describe("when project state hash matches", function() {
before(function(done) {
this.projectStateHash = DocUpdaterClient.randomId();
[this.project_id, this.doc_id] = Array.from([DocUpdaterClient.randomId(), DocUpdaterClient.randomId()]);
MockWebApi.insertDoc(this.project_id, this.doc_id, {lines: this.lines, version: this.version});
return DocUpdaterClient.preloadDoc(this.project_id, this.doc_id, error => {
if (error != null) { throw error; }
return DocUpdaterClient.getProjectDocs(this.project_id, this.projectStateHash, (error, res0, returnedDocs0) => {
// set the hash
this.res0 = res0;
this.returnedDocs0 = returnedDocs0;
return DocUpdaterClient.getProjectDocs(this.project_id, this.projectStateHash, (error, res, returnedDocs) => {
// the hash should now match
this.res = res;
this.returnedDocs = returnedDocs;
return done();
});
});
});
});
it("should return a 200 response", function() {
return this.res.statusCode.should.equal(200);
});
return it("should return the documents", function() {
return this.returnedDocs.should.deep.equal([ {_id: this.doc_id, lines: this.lines, v: this.version} ]);
});
});
return describe("when the doc has been removed", function() {
before(function(done) {
this.projectStateHash = DocUpdaterClient.randomId();
[this.project_id, this.doc_id] = Array.from([DocUpdaterClient.randomId(), DocUpdaterClient.randomId()]);
MockWebApi.insertDoc(this.project_id, this.doc_id, {lines: this.lines, version: this.version});
return DocUpdaterClient.preloadDoc(this.project_id, this.doc_id, error => {
if (error != null) { throw error; }
return DocUpdaterClient.getProjectDocs(this.project_id, this.projectStateHash, (error, res0, returnedDocs0) => {
// set the hash
this.res0 = res0;
this.returnedDocs0 = returnedDocs0;
return DocUpdaterClient.deleteDoc(this.project_id, this.doc_id, (error, res, body) => {
// delete the doc
return DocUpdaterClient.getProjectDocs(this.project_id, this.projectStateHash, (error, res1, returnedDocs) => {
// the hash would match, but the doc has been deleted
this.res = res1;
this.returnedDocs = returnedDocs;
return done();
});
});
});
});
});
return it("should return a 409 Conflict response", function() {
return this.res.statusCode.should.equal(409);
});
});
});