Getting 500 DOMESTIC SERVER ERRORS when merging (with flag) GET API Call

I removed all methods from my vial-supporting API module. Now I want to test the get method, actually making an API call. I expect a 400 error from this test.

My resource class

class Response(Resource): @marshal_with(response_params_get_responses_on_job) def get(self, filter_name=None): try: response = self.process_get_request(filter_name) if not response['users']: raise MyValidationError("No data found") return response except MyValidationError as err: abort(404, message=err) except ValueError as mistake: abort(400, message=mistake) 

My unittest

 # TODO - Failing! @mock.patch('application.resources.response.Response.process_get_request', autospec=True) def test_get_400(self, process_get_request_mock): process_get_request_mock.side_effect = ValueError("some error") app = Flask(__name__) app.debug = True api = Api(app, prefix='/api/v2') api.add_resource(Response, '/user/responses', endpoint='job_responses') api.init_app(app) with app.test_client() as client: resp = client.get('/api/v2/user/responses', environ_base={'HTTP_USER_AGENT': 'Chrome'}, headers={'Content-type': 'application/json'}) self.assertEqual(resp.status_code, 400) 

My test fails because the answer I get is error 500

 AssertionError: 500 != 400 

Stacktrace

 Failure Traceback (most recent call last): File "/home/hussain/workspace/venv/local/lib/python2.7/site-packages/mock.py", line 1201, in patched return func(*args, **keywargs) File "/home/hussain/workspace/my-app/tests/unittests/test_Response.py", line 38, in test_get_400 headers={'Content-type': 'application/json'}) File "/home/hussain/workspace/venv/local/lib/python2.7/site-packages/werkzeug/test.py", line 774, in get return self.open(*args, **kw) File "/home/hussain/workspace/venv/local/lib/python2.7/site-packages/flask/testing.py", line 108, in open follow_redirects=follow_redirects) File "/home/hussain/workspace/venv/local/lib/python2.7/site-packages/werkzeug/test.py", line 742, in open response = self.run_wsgi_app(environ, buffered=buffered) File "/home/hussain/workspace/venv/local/lib/python2.7/site-packages/werkzeug/test.py", line 659, in run_wsgi_app rv = run_wsgi_app(self.application, environ, buffered=buffered) File "/home/hussain/workspace/venv/local/lib/python2.7/site-packages/werkzeug/test.py", line 867, in run_wsgi_app app_rv = app(environ, start_response) File "/home/hussain/workspace/venv/local/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__ return self.wsgi_app(environ, start_response) File "/home/hussain/workspace/venv/local/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app response = self.make_response(self.handle_exception(e)) File "/home/hussain/workspace/venv/local/lib/python2.7/site-packages/flask_cors/extension.py", line 110, in wrapped_function return cors_after_request(app.make_response(f(*args, **kwargs))) File "/home/hussain/workspace/venv/local/lib/python2.7/site-packages/flask_restful/__init__.py", line 270, in error_router return original_handler(e) File "/home/hussain/workspace/venv/local/lib/python2.7/site-packages/flask_restful/__init__.py", line 270, in error_router return original_handler(e) File "/home/hussain/workspace/venv/local/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception reraise(exc_type, exc_value, tb) File "/home/hussain/workspace/venv/local/lib/python2.7/site-packages/flask_restful/__init__.py", line 267, in error_router return self.handle_error(e) File "/home/hussain/workspace/venv/local/lib/python2.7/site-packages/flask_restful/__init__.py", line 267, in error_router return self.handle_error(e) File "/home/hussain/workspace/venv/local/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app response = self.full_dispatch_request() File "/home/hussain/workspace/venv/local/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request rv = self.handle_user_exception(e) File "/home/hussain/workspace/venv/local/lib/python2.7/site-packages/flask_cors/extension.py", line 110, in wrapped_function return cors_after_request(app.make_response(f(*args, **kwargs))) File "/home/hussain/workspace/venv/local/lib/python2.7/site-packages/flask_restful/__init__.py", line 270, in error_router return original_handler(e) File "/home/hussain/workspace/venv/local/lib/python2.7/site-packages/flask_restful/__init__.py", line 270, in error_router return original_handler(e) File "/home/hussain/workspace/venv/local/lib/python2.7/site-packages/flask/app.py", line 1363, in handle_user_exception assert exc_value is e AssertionError 

Having placed the debug point in the get method, I see that execution continues to abort(400, message=mistake) .

Then what happens? Why is my test not working?

+5
source share
1 answer

For all the time, I assumed that the problem was with my unit test. I was wrong!

The problem was in my code. And as Michele said my test found it.

The message kwarg in abort method is expected to be a string, and instead I passed an exception object to it. Therefore, I was getting an exception in the abort line.

So i fixed it

 abort(400, message=mistake.message) 

Alternatively, I can also write

 abort(400, message=str(mistake)) 

Now my test passes.

+3
source

Source: https://habr.com/ru/post/1231996/


All Articles