Просмотр исходного кода

Merge pull request #1431 from sharelatex/mm-pubmodal-show-errors

Show export creation errors to the user

GitOrigin-RevId: fc116cfcfc2ca49d19188f01ef7b3460e4619503
Chrystal Maria Griffiths 7 лет назад
Родитель
Сommit
e73a7dbe9c

+ 6 - 1
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

+ 3 - 3
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 {

+ 8 - 0
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,

+ 21 - 4
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) ->