return pathname from DocumentController.getDoc

This commit is contained in:
Hayden Faulds 2017-09-28 15:01:45 +01:00
parent 13628f82ec
commit bf1c24f6f9
4 changed files with 88 additions and 56 deletions

View file

@ -7,7 +7,7 @@ module.exports =
doc_id = req.params.doc_id doc_id = req.params.doc_id
plain = req?.query?.plain == 'true' plain = req?.query?.plain == 'true'
logger.log doc_id:doc_id, project_id:project_id, "receiving get document request from api (docupdater)" logger.log doc_id:doc_id, project_id:project_id, "receiving get document request from api (docupdater)"
ProjectEntityHandler.getDoc project_id, doc_id, (error, lines, rev, version, ranges) -> ProjectEntityHandler.getDoc project_id, doc_id, {pathname: true}, (error, lines, rev, version, ranges, pathname) ->
if error? if error?
logger.err err:error, doc_id:doc_id, project_id:project_id, "error finding element for getDocument" logger.err err:error, doc_id:doc_id, project_id:project_id, "error finding element for getDocument"
return next(error) return next(error)
@ -20,6 +20,7 @@ module.exports =
lines: lines lines: lines
version: version version: version
ranges: ranges ranges: ranges
pathname: pathname
} }
setDocument: (req, res, next = (error) ->) -> setDocument: (req, res, next = (error) ->) ->
@ -33,6 +34,3 @@ module.exports =
return next(error) return next(error)
logger.log doc_id:doc_id, project_id:project_id, "finished receiving set document request from api (docupdater)" logger.log doc_id:doc_id, project_id:project_id, "finished receiving set document request from api (docupdater)"
res.sendStatus 200 res.sendStatus 200

View file

@ -140,8 +140,15 @@ module.exports = ProjectEntityHandler =
if typeof(options) == "function" if typeof(options) == "function"
callback = options callback = options
options = {} options = {}
DocstoreManager.getDoc project_id, doc_id, options, callback
if options["pathname"]
delete options["pathname"]
projectLocator.findElement {project_id: project_id, element_id: doc_id, type: 'doc'}, (error, doc, path) =>
return callback(error) if error?
DocstoreManager.getDoc project_id, doc_id, options, (error, lines, rev, version, ranges) =>
callback(error, lines, rev, version, ranges, path.fileSystem)
else
DocstoreManager.getDoc project_id, doc_id, options, callback
addDoc: (project_id, folder_id, docName, docLines, callback = (error, doc, folder_id) ->)=> addDoc: (project_id, folder_id, docName, docLines, callback = (error, doc, folder_id) ->)=>
ProjectGetter.getProjectWithOnlyFolders project_id, (err, project) -> ProjectGetter.getProjectWithOnlyFolders project_id, (err, project) ->

View file

@ -24,6 +24,7 @@ describe "DocumentController", ->
@doc_lines = ["one", "two", "three"] @doc_lines = ["one", "two", "three"]
@version = 42 @version = 42
@ranges = {"mock": "ranges"} @ranges = {"mock": "ranges"}
@pathname = '/a/b/c/file.tex'
@rev = 5 @rev = 5
describe "getDocument", -> describe "getDocument", ->
@ -34,12 +35,12 @@ describe "DocumentController", ->
describe "when the document exists", -> describe "when the document exists", ->
beforeEach -> beforeEach ->
@ProjectEntityHandler.getDoc = sinon.stub().callsArgWith(2, null, @doc_lines, @rev, @version, @ranges) @ProjectEntityHandler.getDoc = sinon.stub().callsArgWith(3, null, @doc_lines, @rev, @version, @ranges, @pathname)
@DocumentController.getDocument(@req, @res, @next) @DocumentController.getDocument(@req, @res, @next)
it "should get the document from Mongo", -> it "should get the document from Mongo", ->
@ProjectEntityHandler.getDoc @ProjectEntityHandler.getDoc
.calledWith(@project_id, @doc_id) .calledWith(@project_id, @doc_id, pathname: true)
.should.equal true .should.equal true
it "should return the document data to the client as JSON", -> it "should return the document data to the client as JSON", ->
@ -48,10 +49,11 @@ describe "DocumentController", ->
lines: @doc_lines lines: @doc_lines
version: @version version: @version
ranges: @ranges ranges: @ranges
pathname: @pathname
describe "when the document doesn't exist", -> describe "when the document doesn't exist", ->
beforeEach -> beforeEach ->
@ProjectEntityHandler.getDoc = sinon.stub().callsArgWith(2, new Errors.NotFoundError("not found"), null) @ProjectEntityHandler.getDoc = sinon.stub().callsArgWith(3, new Errors.NotFoundError("not found"), null)
@DocumentController.getDocument(@req, @res, @next) @DocumentController.getDocument(@req, @res, @next)
it "should call next with the NotFoundError", -> it "should call next with the NotFoundError", ->

View file

@ -385,7 +385,11 @@ describe 'ProjectEntityHandler', ->
@rev = 5 @rev = 5
@version = 42 @version = 42
@ranges = {"mock": "ranges"} @ranges = {"mock": "ranges"}
@DocstoreManager.getDoc = sinon.stub().callsArgWith(3, null, @lines, @rev, @version, @ranges) @DocstoreManager.getDoc = sinon.stub().callsArgWith(3, null, @lines, @rev, @version, @ranges)
describe 'without pathname option', ->
beforeEach ->
@ProjectEntityHandler.getDoc project_id, doc_id, @callback @ProjectEntityHandler.getDoc project_id, doc_id, @callback
it "should call the docstore", -> it "should call the docstore", ->
@ -396,6 +400,27 @@ describe 'ProjectEntityHandler', ->
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 pathname option', ->
beforeEach ->
@project = 'a project'
@path = mongo: "mongo.path", fileSystem: "/file/system/path"
@projectLocator.findElement = sinon.stub().callsArgWith(1, null, {}, @path)
@ProjectEntityHandler.getDoc project_id, doc_id, {pathname: true}, @callback
it "should call the project locator", ->
@projectLocator.findElement
.calledWith({project_id: project_id, element_id: doc_id, type: 'doc'})
.should.equal true
it "should call the docstore", ->
@DocstoreManager.getDoc
.calledWith(project_id, doc_id)
.should.equal true
it "should return the pathname if option given", ->
@callback.calledWith(null, @lines, @rev, @version, @ranges, @path.fileSystem).should.equal true
describe 'addDoc', -> describe 'addDoc', ->
beforeEach -> beforeEach ->
@name = "some new doc" @name = "some new doc"