def test_error_bad_error(self): @action(spec='''\ action my_action errors MyError ''') def my_action(unused_app, unused_req): raise ActionError('MyBadError') app = Application() app.add_request(my_action) environ = {'wsgi.errors': StringIO()} status, headers, response = app.request('POST', '/my_action', wsgi_input=b'{}') self.assertEqual(status, '500 Internal Server Error') self.assertEqual(sorted(headers), [('Content-Type', 'application/json')]) self.assertEqual(response.decode('utf-8'), '{"error":"InvalidOutput","member":"error","message":"Invalid value \'MyBadError\' (type \'str\') ' 'for member \'error\', expected type \'my_action_error\'"}') self.assertEqual(environ['wsgi.errors'].getvalue(), '') app.validate_output = False environ = {'wsgi.errors': StringIO()} status, headers, response = app.request('POST', '/my_action', wsgi_input=b'{}') self.assertEqual(status, '400 Bad Request') self.assertEqual(sorted(headers), [('Content-Type', 'application/json')]) self.assertEqual(response.decode('utf-8'), '{"error":"MyBadError"}') self.assertEqual(environ['wsgi.errors'].getvalue(), '')
def test_error_json(self): class MyClass: pass @action(spec='''\ action my_action output float a ''') def my_action(unused_app, unused_req): return {'a': MyClass()} app = Application() app.add_request(my_action) app.validate_output = False status, headers, response = app.request('POST', '/my_action', wsgi_input=b'{}') self.assertEqual(status, '500 Internal Server Error') self.assertEqual(sorted(headers), [('Content-Type', 'text/plain')]) self.assertEqual(response, b'Internal Server Error')
def test_get_no_validate_output(self): @action(method='GET', spec='''\ action my_action input int a int b output int c ''') def my_action(unused_app, req): return {'c': req['a'] + req['b']} app = Application() app.add_request(my_action) app.validate_output = False status, headers, response = app.request('GET', '/my_action', query_string='a=7&b=8') self.assertEqual(status, '200 OK') self.assertEqual(sorted(headers), [('Content-Type', 'application/json')]) self.assertEqual(response.decode('utf-8'), '{"c":15}')
def test_error_json(self): class MyClass(object): pass @action(spec='''\ action my_action output float a ''') def my_action(dummy_app, dummy_req): return {'a': MyClass()} app = Application() app.add_request(my_action) app.validate_output = False status, headers, response = app.request('POST', '/my_action', wsgi_input=b'{}') self.assertEqual(status, '500 Internal Server Error') self.assertEqual(sorted(headers), [('Content-Length', '16'), ('Content-Type', 'text/plain')]) self.assertEqual(response.decode('utf-8'), 'Unexpected Error')