2020-02-16 09:03:02 -05:00
|
|
|
/*
|
|
|
|
* 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");
|
2014-04-29 11:36:10 -04:00
|
|
|
|
2020-02-16 09:03:02 -05:00
|
|
|
const DocstoreClient = require("./helpers/DocstoreClient");
|
2014-04-29 11:36:10 -04:00
|
|
|
|
2020-02-16 09:03:02 -05:00
|
|
|
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();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
2014-04-29 11:36:10 -04:00
|
|
|
|
2020-02-16 09:03:02 -05:00
|
|
|
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();
|
|
|
|
});
|
|
|
|
});
|
2014-04-29 11:36:10 -04:00
|
|
|
|
2020-02-16 09:03:02 -05:00
|
|
|
afterEach(function(done) {
|
|
|
|
return db.docs.remove({_id: this.doc_id}, done);
|
|
|
|
});
|
2014-04-29 11:36:10 -04:00
|
|
|
|
2020-02-16 09:03:02 -05:00
|
|
|
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();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
2014-04-29 11:36:10 -04:00
|
|
|
|
2020-02-16 09:03:02 -05:00
|
|
|
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();
|
|
|
|
});
|
|
|
|
}));
|
|
|
|
});
|
2014-04-29 11:36:10 -04:00
|
|
|
|
2020-02-16 09:03:02 -05:00
|
|
|
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);
|
|
|
|
});
|
|
|
|
});
|
2019-07-02 07:45:54 -04:00
|
|
|
|
2020-02-16 09:03:02 -05:00
|
|
|
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();
|
|
|
|
});
|
|
|
|
});
|
2019-07-02 07:45:54 -04:00
|
|
|
|
2020-02-16 09:03:02 -05:00
|
|
|
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();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
2019-07-02 07:45:54 -04:00
|
|
|
|
2020-02-16 09:03:02 -05:00
|
|
|
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);
|
|
|
|
});
|
|
|
|
});
|
2019-07-02 07:45:54 -04:00
|
|
|
|
2020-02-16 09:03:02 -05:00
|
|
|
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();
|
|
|
|
});
|
|
|
|
});
|
2019-07-02 07:45:54 -04:00
|
|
|
|
2020-02-16 09:03:02 -05:00
|
|
|
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();
|
|
|
|
});
|
|
|
|
});
|
2019-07-02 07:45:54 -04:00
|
|
|
|
2020-02-16 09:03:02 -05:00
|
|
|
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();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|