Merge pull request #488 from sharelatex/bg-404-for-missing-doc

return 404 for api request on missing doc
This commit is contained in:
Brian Gough 2017-05-02 15:29:29 +01:00 committed by GitHub
commit de76008197
2 changed files with 44 additions and 0 deletions

View file

@ -1,6 +1,7 @@
request = require("request").defaults(jar: false) request = require("request").defaults(jar: false)
logger = require "logger-sharelatex" logger = require "logger-sharelatex"
settings = require "settings-sharelatex" settings = require "settings-sharelatex"
Errors = require "../Errors/Errors"
module.exports = DocstoreManager = module.exports = DocstoreManager =
deleteDoc: (project_id, doc_id, callback = (error) ->) -> deleteDoc: (project_id, doc_id, callback = (error) ->) ->
@ -10,6 +11,10 @@ module.exports = DocstoreManager =
return callback(error) if error? return callback(error) if error?
if 200 <= res.statusCode < 300 if 200 <= res.statusCode < 300
callback(null) callback(null)
else if res.statusCode is 404
error = new Errors.NotFoundError("tried to delete doc not in docstore")
logger.error err: error, project_id: project_id, doc_id: doc_id, "tried to delete doc not in docstore"
callback(error) # maybe suppress the error when delete doc which is not present?
else else
error = new Error("docstore api responded with non-success code: #{res.statusCode}") error = new Error("docstore api responded with non-success code: #{res.statusCode}")
logger.error err: error, project_id: project_id, doc_id: doc_id, "error deleting doc in docstore" logger.error err: error, project_id: project_id, doc_id: doc_id, "error deleting doc in docstore"
@ -61,6 +66,10 @@ module.exports = DocstoreManager =
if 200 <= res.statusCode < 300 if 200 <= res.statusCode < 300
logger.log doc_id: doc_id, project_id: project_id, version: doc.version, rev: doc.rev, "got doc from docstore api" logger.log doc_id: doc_id, project_id: project_id, version: doc.version, rev: doc.rev, "got doc from docstore api"
callback(null, doc.lines, doc.rev, doc.version, doc.ranges) callback(null, doc.lines, doc.rev, doc.version, doc.ranges)
else if res.statusCode is 404
error = new Errors.NotFoundError("doc not found in docstore")
logger.error err: error, project_id: project_id, doc_id: doc_id, "doc not found in docstore"
callback(error)
else else
error = new Error("docstore api responded with non-success code: #{res.statusCode}") error = new Error("docstore api responded with non-success code: #{res.statusCode}")
logger.error err: error, project_id: project_id, doc_id: doc_id, "error getting doc from docstore" logger.error err: error, project_id: project_id, doc_id: doc_id, "error getting doc from docstore"

View file

@ -3,6 +3,7 @@ chai.should()
sinon = require("sinon") sinon = require("sinon")
modulePath = "../../../../app/js/Features/Docstore/DocstoreManager" modulePath = "../../../../app/js/Features/Docstore/DocstoreManager"
SandboxedModule = require('sandboxed-module') SandboxedModule = require('sandboxed-module')
Errors = require "../../../../app/js/Features/Errors/Errors.js"
describe "DocstoreManager", -> describe "DocstoreManager", ->
beforeEach -> beforeEach ->
@ -52,6 +53,23 @@ describe "DocstoreManager", ->
}, "error deleting doc in docstore") }, "error deleting doc in docstore")
.should.equal true .should.equal true
describe "with a missing (404) response code", ->
beforeEach ->
@request.del = sinon.stub().callsArgWith(1, null, statusCode: 404, "")
@DocstoreManager.deleteDoc @project_id, @doc_id, @callback
it "should call the callback with an error", ->
@callback.calledWith(new Errors.NotFoundError("tried to delete doc not in docstore")).should.equal true
it "should log the error", ->
@logger.error
.calledWith({
err: new Errors.NotFoundError("tried to delete doc not in docstore")
project_id: @project_id
doc_id: @doc_id
}, "tried to delete doc not in docstore")
.should.equal true
describe "updateDoc", -> describe "updateDoc", ->
beforeEach -> beforeEach ->
@lines = ["mock", "doc", "lines"] @lines = ["mock", "doc", "lines"]
@ -153,6 +171,23 @@ describe "DocstoreManager", ->
it "should call the callback with the lines, version and rev", -> it "should call the callback with the lines, version and rev", ->
@callback.calledWith(null, @lines, @rev, @version, @ranges).should.equal true @callback.calledWith(null, @lines, @rev, @version, @ranges).should.equal true
describe "with a missing (404) response code", ->
beforeEach ->
@request.get = sinon.stub().callsArgWith(1, null, statusCode: 404, "")
@DocstoreManager.getDoc @project_id, @doc_id, @callback
it "should call the callback with an error", ->
@callback.calledWith(new Errors.NotFoundError("doc not found in docstore")).should.equal true
it "should log the error", ->
@logger.error
.calledWith({
err: new Errors.NotFoundError("doc not found in docstore")
project_id: @project_id
doc_id: @doc_id
}, "doc not found in docstore")
.should.equal true
describe "getAllDocs", -> describe "getAllDocs", ->
describe "with a successful response code", -> describe "with a successful response code", ->
beforeEach -> beforeEach ->