overleaf/services/docstore/test/acceptance/coffee/DeletingDocsTests.js

122 lines
3.7 KiB
JavaScript

/*
* 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 {db, ObjectId} = require("../../../app/js/mongojs");
const {
expect
} = chai;
const DocstoreApp = require("./helpers/DocstoreApp");
const DocstoreClient = require("./helpers/DocstoreClient");
describe("Deleting a doc", function() {
beforeEach(function(done) {
this.project_id = ObjectId();
this.doc_id = ObjectId();
this.lines = ["original", "lines"];
this.version = 42;
this.ranges = [];
return DocstoreApp.ensureRunning(() => {
return DocstoreClient.createDoc(this.project_id, this.doc_id, this.lines, this.version, this.ranges, error => {
if (error != null) { throw error; }
return done();
});
});
});
describe("when the doc exists", function() {
beforeEach(function(done) {
return DocstoreClient.deleteDoc(this.project_id, this.doc_id, (error, res, doc) => {
this.res = res;
return done();
});
});
afterEach(function(done) {
return db.docs.remove({_id: this.doc_id}, done);
});
return it("should insert a deleted doc into the docs collection", function(done) {
return db.docs.find({_id: this.doc_id}, (error, docs) => {
docs[0]._id.should.deep.equal(this.doc_id);
docs[0].lines.should.deep.equal(this.lines);
docs[0].deleted.should.equal(true);
return done();
});
});
});
return describe("when the doc does not exist", () => it("should return a 404", function(done) {
const missing_doc_id = ObjectId();
return DocstoreClient.deleteDoc(this.project_id, missing_doc_id, function(error, res, doc) {
res.statusCode.should.equal(404);
return done();
});
}));
});
describe("Destroying a project's documents", function() {
describe("when the doc exists", function() {
beforeEach(function(done) {
return db.docOps.insert({doc_id: ObjectId(this.doc_id), version: 1}, function(err) {
if (err != null) { return done(err); }
return DocstoreClient.destroyAllDoc(this.project_id, done);
});
});
it("should remove the doc from the docs collection", function(done) {
return db.docs.find({_id: this.doc_id}, function(err, docs) {
expect(err).not.to.exist;
expect(docs).to.deep.equal([]);
return done();
});
});
return it("should remove the docOps from the docOps collection", function(done) {
return db.docOps.find({doc_id: this.doc_id}, function(err, docOps) {
expect(err).not.to.exist;
expect(docOps).to.deep.equal([]);
return done();
});
});
});
return describe("when the doc is archived", function() {
beforeEach(function(done) {
return DocstoreClient.archiveAllDoc(this.project_id, function(err) {
if (err != null) { return done(err); }
return DocstoreClient.destroyAllDoc(this.project_id, done);
});
});
it("should remove the doc from the docs collection", function(done) {
return db.docs.find({_id: this.doc_id}, function(err, docs) {
expect(err).not.to.exist;
expect(docs).to.deep.equal([]);
return done();
});
});
it("should remove the docOps from the docOps collection", function(done) {
return db.docOps.find({doc_id: this.doc_id}, function(err, docOps) {
expect(err).not.to.exist;
expect(docOps).to.deep.equal([]);
return done();
});
});
return it("should remove the doc contents from s3", function(done) {
return DocstoreClient.getS3Doc(this.project_id, this.doc_id, (error, res, s3_doc) => {
if (error != null) { throw error; }
expect(res.statusCode).to.equal(404);
return done();
});
});
});
});