/* * 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 MockTrackChangesApi = require("./helpers/MockTrackChangesApi"); const MockProjectHistoryApi = require("./helpers/MockProjectHistoryApi"); const MockWebApi = require("./helpers/MockWebApi"); const DocUpdaterClient = require("./helpers/DocUpdaterClient"); const DocUpdaterApp = require("./helpers/DocUpdaterApp"); describe("Deleting a document", function() { before(function(done) { this.lines = ["one", "two", "three"]; this.version = 42; this.update = { doc: this.doc_id, op: [{ i: "one and a half\n", p: 4 }], v: this.version }; this.result = ["one", "one and a half", "two", "three"]; sinon.spy(MockTrackChangesApi, "flushDoc"); sinon.spy(MockProjectHistoryApi, "flushProject"); return DocUpdaterApp.ensureRunning(done); }); after(function() { MockTrackChangesApi.flushDoc.restore(); return MockProjectHistoryApi.flushProject.restore(); }); describe("when the updated doc exists in the doc updater", function() { before(function(done) { [this.project_id, this.doc_id] = Array.from([DocUpdaterClient.randomId(), DocUpdaterClient.randomId()]); sinon.spy(MockWebApi, "setDocument"); sinon.spy(MockWebApi, "getDocument"); 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.sendUpdate(this.project_id, this.doc_id, this.update, error => { if (error != null) { throw error; } return setTimeout(() => { return DocUpdaterClient.deleteDoc(this.project_id, this.doc_id, (error, res, body) => { this.statusCode = res.statusCode; return setTimeout(done, 200); }); } , 200); }); }); }); after(function() { MockWebApi.setDocument.restore(); return MockWebApi.getDocument.restore(); }); it("should return a 204 status code", function() { return this.statusCode.should.equal(204); }); it("should send the updated document and version to the web api", function() { return MockWebApi.setDocument .calledWith(this.project_id, this.doc_id, this.result, this.version + 1) .should.equal(true); }); it("should need to reload the doc if read again", function(done) { MockWebApi.getDocument.called.should.equal.false; return DocUpdaterClient.getDoc(this.project_id, this.doc_id, (error, res, doc) => { MockWebApi.getDocument .calledWith(this.project_id, this.doc_id) .should.equal(true); return done(); }); }); it("should flush track changes", function() { return MockTrackChangesApi.flushDoc.calledWith(this.doc_id).should.equal(true); }); return it("should flush project history", function() { return MockProjectHistoryApi.flushProject.calledWith(this.project_id).should.equal(true); }); }); return describe("when the doc is not in the doc updater", function() { before(function(done) { [this.project_id, this.doc_id] = Array.from([DocUpdaterClient.randomId(), DocUpdaterClient.randomId()]); MockWebApi.insertDoc(this.project_id, this.doc_id, { lines: this.lines }); sinon.spy(MockWebApi, "setDocument"); sinon.spy(MockWebApi, "getDocument"); return DocUpdaterClient.deleteDoc(this.project_id, this.doc_id, (error, res, body) => { this.statusCode = res.statusCode; return setTimeout(done, 200); }); }); after(function() { MockWebApi.setDocument.restore(); return MockWebApi.getDocument.restore(); }); it("should return a 204 status code", function() { return this.statusCode.should.equal(204); }); it("should not need to send the updated document to the web api", () => MockWebApi.setDocument.called.should.equal(false)); it("should need to reload the doc if read again", function(done) { MockWebApi.getDocument.called.should.equal.false; return DocUpdaterClient.getDoc(this.project_id, this.doc_id, (error, res, doc) => { MockWebApi.getDocument .calledWith(this.project_id, this.doc_id) .should.equal(true); return done(); }); }); it("should flush track changes", function() { return MockTrackChangesApi.flushDoc.calledWith(this.doc_id).should.equal(true); }); return it("should flush project history", function() { return MockProjectHistoryApi.flushProject.calledWith(this.project_id).should.equal(true); }); }); });