From e73a7dbe9ce3e05813a7f55c92037cc1e760878e Mon Sep 17 00:00:00 2001 From: Chrystal Maria Griffiths Date: Mon, 4 Feb 2019 11:10:36 +0000 Subject: [PATCH] Merge pull request #1431 from sharelatex/mm-pubmodal-show-errors Show export creation errors to the user GitOrigin-RevId: fc116cfcfc2ca49d19188f01ef7b3460e4619503 --- .../Features/Exports/ExportsController.coffee | 7 +++++- .../Features/Exports/ExportsHandler.coffee | 6 ++--- .../Exports/ExportsControllerTests.coffee | 8 ++++++ .../coffee/Exports/ExportsHandlerTests.coffee | 25 ++++++++++++++++--- 4 files changed, 38 insertions(+), 8 deletions(-) diff --git a/services/web/app/coffee/Features/Exports/ExportsController.coffee b/services/web/app/coffee/Features/Exports/ExportsController.coffee index 885180ebd8..e35810a560 100644 --- a/services/web/app/coffee/Features/Exports/ExportsController.coffee +++ b/services/web/app/coffee/Features/Exports/ExportsController.coffee @@ -24,7 +24,12 @@ module.exports = export_params.show_source = req.body.showSource if req.body.showSource? ExportsHandler.exportProject export_params, (err, export_data) -> - return next(err) if err? + if err? + if err.forwardResponse? + logger.log {responseError: err.forwardResponse}, "forwarding response" + return res.send err.forwardResponse + else + return next(err) logger.log user_id:user_id project_id: project_id diff --git a/services/web/app/coffee/Features/Exports/ExportsHandler.coffee b/services/web/app/coffee/Features/Exports/ExportsHandler.coffee index 4569cd4350..69aaf122a1 100644 --- a/services/web/app/coffee/Features/Exports/ExportsHandler.coffee +++ b/services/web/app/coffee/Features/Exports/ExportsHandler.coffee @@ -95,9 +95,9 @@ module.exports = ExportsHandler = self = else if 200 <= res.statusCode < 300 callback null, body.exportId else - err = new Error("v1 export returned a failure status code: #{res.statusCode}") - logger.err err:err, export:export_data, "v1 export returned failure status code: #{res.statusCode}" - callback err + logger.err export:export_data, "v1 export returned failure; forwarding: #{body}" + # pass the v1 error along for the publish modal to handle + callback {forwardResponse: body} _requestVersion: (project_id, callback=(err, export_v1_id) ->) -> request.get { diff --git a/services/web/test/unit/coffee/Exports/ExportsControllerTests.coffee b/services/web/test/unit/coffee/Exports/ExportsControllerTests.coffee index 772ed3dc70..4aba0104c4 100644 --- a/services/web/test/unit/coffee/Exports/ExportsControllerTests.coffee +++ b/services/web/test/unit/coffee/Exports/ExportsControllerTests.coffee @@ -82,6 +82,14 @@ describe 'ExportsController', -> expect(body).to.deep.equal {export_v1_id: 897} done() + describe "with an error return from v1 to forward to the publish modal",-> + it 'should forward the response onward', (done) -> + @error_json = { status: 422, message: 'nope' } + @handler.exportProject = sinon.stub().yields({forwardResponse: @error_json}) + @controller.exportProject @req, send:(body) => + expect(body).to.deep.equal @error_json + done() + it 'should ask the handler to return the status of an export', (done) -> @handler.fetchExport = sinon.stub().yields( null, diff --git a/services/web/test/unit/coffee/Exports/ExportsHandlerTests.coffee b/services/web/test/unit/coffee/Exports/ExportsHandlerTests.coffee index 3145bb8634..2db310cafb 100644 --- a/services/web/test/unit/coffee/Exports/ExportsHandlerTests.coffee +++ b/services/web/test/unit/coffee/Exports/ExportsHandlerTests.coffee @@ -81,6 +81,20 @@ describe 'ExportsHandler', -> (@callback.args[0][0] instanceof Error) .should.equal true + + describe "when export request returns an error to forward to the user", -> + beforeEach (done) -> + @error_json = { status: 422, message: 'nope' } + @ExportsHandler._requestExport = sinon.stub().yields(null, forwardResponse: @error_json) + @ExportsHandler.exportProject @export_params, (error, export_data) => + @callback(error, export_data) + done() + + it "should return success and the response to forward", -> + (@callback.args[0][0] instanceof Error) + .should.equal false + @callback.calledWith(null, {forwardResponse: @error_json}) + describe '_buildExport', -> beforeEach (done) -> @project = @@ -366,16 +380,19 @@ describe 'ExportsHandler', -> (@callback.args[0][0] instanceof Error) .should.equal true - describe "when the request returns an error code", -> + describe "when the request returns an error response to forward", -> beforeEach (done) -> - @stubRequest.post = sinon.stub().yields(null, {statusCode: 401}, { }) + @error_code = 422 + @error_json = { status: @error_code, message: 'nope' } + @stubRequest.post = sinon.stub().yields(null, {statusCode: @error_code}, @error_json) @ExportsHandler._requestExport @export_data, (error, export_v1_id) => @callback(error, export_v1_id) done() - it "should return the error", -> + it "should return success and the response to forward", -> (@callback.args[0][0] instanceof Error) - .should.equal true + .should.equal false + @callback.calledWith(null, {forwardResponse: @error_json}) describe 'fetchExport', -> beforeEach (done) ->