async def test_base_model_obj(): app = Pint('test', title='App Test', contact='foo', contact_email='*****@*****.**', description='Sample Desc', base_model_schema=TEST_BASE_MODEL_SCHEMA) @app.route('/testque') @app.param('test_que', ref='#/components/parameters/test_query') class TestQue(Resource): async def get(self): return request.args['moo'] test_que_ref = app.create_ref_validator('test_query', 'parameters') @app.route('/testref') @app.param('test_que_ref', ref=test_que_ref) class TestRef(Resource): async def get(self): return request.args['moo'] @app.route('/testquename') @app.param('test_que_name', ref='test_query') class TestQueName(Resource): async def get(self): return request.args['moo'] swag = app.__schema__ assert swag['components']['parameters']['test_query']['name'] == 'moo' swag_testque = swag['paths']['/testque']['get'] swag_testref = swag['paths']['/testref']['get'] swag_testquename = swag['paths']['/testquename']['get'] assert swag_testque['parameters'] == swag_testref['parameters'] assert swag_testque['parameters'] == swag_testquename['parameters'] client = app.test_client() rv = await client.get('/testque?moo=foo') assert rv.status_code == HTTPStatus.OK assert await rv.get_data() == b'foo' rv = await client.get('/testref?moo=bar') assert rv.status_code == HTTPStatus.OK assert await rv.get_data() == b'bar' rv = await client.get('/testquename?moo=baz') assert rv.status_code == HTTPStatus.OK assert await rv.get_data() == b'baz'
async def test_required_query(): app = Pint('test', title='App Test', contact='foo', contact_email='*****@*****.**', description='Sample Desc', base_model_schema=TEST_BASE_MODEL_SCHEMA) test_que_ref = app.create_ref_validator('test_query', 'parameters') @app.param('test_que_ref', _in='query', schema=test_que_ref) @app.route('/testref') def testref(): return request.args['moo'] client = app.test_client() rv = await client.get('/testref') # will add validation in the future for required query args assert rv.status_code == HTTPStatus.BAD_REQUEST
async def test_post_validation(): app = Pint('test', base_model_schema=TEST_BASE_MODEL_SCHEMA) test_ref = app.create_ref_validator('User', 'schemas') @app.route('/testroute') class TestReq(Resource): @app.expect(test_ref) async def post(self): return jsonify(await request.get_json()) client = app.test_client() # fail validation, missing required props rv = await client.post('/testroute', json={}) assert rv.status_code == HTTPStatus.BAD_REQUEST assert rv.headers['content-type'] == 'application/json' data = await rv.get_json() assert data['message'] == 'Request Body failed validation' assert 'msg' in data['error'] and data['error']['msg'] assert 'value' in data['error'] assert 'schema' in data['error'] # fail validation, have required props, but age is wrong type rv = await client.post('/testroute', json={'name': 'foobar', 'age': 'baz'}) assert rv.status_code == HTTPStatus.BAD_REQUEST assert rv.headers['content-type'] == 'application/json' data = await rv.get_json() assert data['message'] == 'Request Body failed validation' assert 'msg' in data['error'] and data['error']['msg'] assert 'value' in data['error'] assert 'schema' in data['error'] # succeed validation rv = await client.post('/testroute', json={'name': 'foobar', 'age': 10}) assert rv.status_code == HTTPStatus.OK