diff --git a/app/v2/errors.py b/app/v2/errors.py index 0fa6bddac..bbec6d5e0 100644 --- a/app/v2/errors.py +++ b/app/v2/errors.py @@ -7,6 +7,22 @@ from app.authentication.auth import AuthError from app.errors import InvalidRequest +class JobIncompleteError(Exception): + def __init__(self, message): + self.message = message + + def to_dict_v2(self): + return { + 'status_code': 500, + "errors": [ + { + "error": 'JobIncompleteError', + "message": self.message + } + ] + } + + class TooManyRequestsError(InvalidRequest): status_code = 429 message_template = 'Exceeded send limits ({}) for today' @@ -49,6 +65,10 @@ def register_errors(blueprint): current_app.logger.exception(error) return jsonify(json.loads(error.message)), 400 + @blueprint.errorhandler(JobIncompleteError) + def job_incomplete_error(error): + return jsonify(error.to_dict_v2()), 500 + @blueprint.errorhandler(NoResultFound) @blueprint.errorhandler(DataError) def no_result_found(e): diff --git a/tests/app/v2/test_errors.py b/tests/app/v2/test_errors.py index 8345faacc..f08367f81 100644 --- a/tests/app/v2/test_errors.py +++ b/tests/app/v2/test_errors.py @@ -9,7 +9,7 @@ def app_for_test(mocker): import flask from flask import Blueprint from app.authentication.auth import AuthError - from app.v2.errors import BadRequestError, TooManyRequestsError + from app.v2.errors import BadRequestError, TooManyRequestsError, JobIncompleteError app = flask.Flask(__name__) app.config['TESTING'] = True @@ -39,6 +39,10 @@ def app_for_test(mocker): def raising_data_error(): raise DataError("There was a db problem", "params", "orig") + @blue.route("raise_job_incomplete_error", methods=["GET"]) + def raising_job_incomplete_error(): + raise JobIncompleteError("Raising job incomplete error") + @blue.route("raise_exception", methods=["GET"]) def raising_exception(): raise AssertionError("Raising any old exception") @@ -107,6 +111,16 @@ def test_data_errors(app_for_test): "errors": [{"error": "DataError", "message": "No result found"}]} +def test_job_incomplete_errors(app_for_test): + with app_for_test.test_request_context(): + with app_for_test.test_client() as client: + response = client.get(url_for('v2_under_test.raising_job_incomplete_error')) + assert response.status_code == 500 + error = json.loads(response.get_data(as_text=True)) + assert error == {"status_code": 500, + "errors": [{"error": "JobIncompleteError", "message": "Raising job incomplete error"}]} + + def test_internal_server_error_handler(app_for_test): with app_for_test.test_request_context(): with app_for_test.test_client() as client: