diff --git a/app.py b/app.py index 3515974..96a27ef 100644 --- a/app.py +++ b/app.py @@ -68,11 +68,27 @@ class Oas3Handler(tornado.web.RequestHandler, metaclass=ABCMeta): self.finish() -def make_app(_auth_provider=None): +class ValidateHandler(tornado.web.RequestHandler, metaclass=ABCMeta): + def post(self): + self.set_header("Content-Type", "application/json") + + entity = self.request.body.decode() + + # TODO call validator + validation_result = { + "valid": "true" + } + + self.write(validation_result) + self.finish() + + +def make_app(): version_path = r"/v[0-9]" return tornado.web.Application([ (version_path + r"/health", HealthHandler), (version_path + r"/oas3", Oas3Handler), + (version_path + r"/validate", ValidateHandler), ]) @@ -81,7 +97,7 @@ def main(): # Setup - util.run_tornado_server(make_app(auth_provider), + util.run_tornado_server(make_app(), server_port=port) # Teardown diff --git a/test.py b/test.py index 84a6315..ee268d3 100644 --- a/test.py +++ b/test.py @@ -38,5 +38,25 @@ class TestBaseAPI(tornado.testing.AsyncHTTPTestCase): self.assertEqual(response.body.decode(), oas3f.read(), "OAS3 content differs from spec file!") +class TestValidation(tornado.testing.AsyncHTTPTestCase): + """Validation test cases""" + def get_app(self): + return make_app() + + def test_null_validation(self): + entity = {} + + response = self.fetch('/v0/validate', + method='POST', + body=json.dumps(entity)) + + self.assertEqual(200, response.code, "Validation must always return 200") + + validation_result = json.loads(response.body.decode()) + + self.assertIn('valid', validation_result, "Key 'valid' expected in validation result") + self.assertTrue(validation_result['valid'], "Validation result is expected to be valid==true") + + if __name__ == "__main__": unittest.main()