def test_call_on_each_endpoint__too_many_produces(self): yaml_str = """ swagger: '2.0' host: pnt-login.elasticbeanstalk.com schemes: - http - https paths: /v1/auth/login: post: parameters: - in: query name: whatever description: User login credentials. required: true type: string produces: - foo/bar - bar/baz x-bind-server: pnt_login.handlers.do_login """ swagger_dict = yaml.load(yaml_str) spec = ApiSpec(swagger_dict) with self.assertRaisesRegexp(Exception, "Expecting only one type"): spec.call_on_each_endpoint(self.foo)
def test_call_on_each_endpoint__invalid_produces(self): yaml_str = """ swagger: '2.0' host: pnt-login.elasticbeanstalk.com schemes: - http - https paths: /v1/auth/login: post: parameters: - in: query name: whatever description: User login credentials. required: true type: string produces: - foo/bar x-bind-server: pnt_login.handlers.do_login """ swagger_dict = yaml.load(yaml_str) spec = ApiSpec(swagger_dict) with self.assertRaisesRegexp(Exception, "Only 'application/json' or 'text/html' are supported."): spec.call_on_each_endpoint(self.foo)
def test_call_on_each_endpoint(self): yaml_str = """ swagger: '2.0' info: title: test version: '0.0.1' description: Just a test host: pnt-login.elasticbeanstalk.com schemes: - http basePath: /v1 produces: - application/json paths: /v1/auth/login: post: summary: blabla description: blabla parameters: - in: body name: whatever description: User login credentials. required: true schema: $ref: '#/definitions/Credentials' produces: - application/json x-bind-server: pnt_login.handlers.do_login x-bind-client: login x-auth-required: false responses: 200: description: A session token schema: $ref: '#/definitions/SessionToken' /v1/auth/logout: get: summary: blabla description: blabla parameters: - in: query name: baboom description: foooo required: true type: string produces: - application/json x-bind-server: pnt_login.babar x-decorate-request: foo.bar.baz responses: 200: description: A session token schema: $ref: '#/definitions/SessionToken' /v1/version: get: summary: blabla description: blabla produces: - application/json x-bind-server: do_version x-decorate-server: foo.bar.baz responses: 200: description: A session token schema: $ref: '#/definitions/SessionToken' /v1/versionhtml: get: summary: blabla description: blabla produces: - text/html x-bind-server: do_version_html x-decorate-server: foo.bar.baz responses: 200: description: A session token schema: $ref: '#/definitions/SessionToken' /v1/hybrid/{foo}: get: summary: blabla description: blabla produces: - application/json parameters: - in: body name: whatever description: User login credentials. required: true schema: $ref: '#/definitions/Credentials' - in: path name: foo description: foooo required: true type: string x-bind-server: do_version x-decorate-server: foo.bar.baz responses: 200: description: A session token schema: $ref: '#/definitions/SessionToken' /v1/ignoreme: get: summary: blabla description: blabla produces: - application/json x-no-bind-server: true responses: 200: description: A session token schema: $ref: '#/definitions/SessionToken' definitions: SessionToken: type: object description: An authenticated user''s session token properties: token: type: string description: Session token. Credentials: type: object description: A user''s login credentials. properties: email: type: string description: User''s email. password_hash: type: string description: MD5 of user''s password, truncated to 16 first hexadecimal characters. """ Tests.call_count = 0 swagger_dict = yaml.load(yaml_str) spec = ApiSpec(swagger_dict) def test_callback(data): print("Looking at %s %s" % (data.method, data.path)) Tests.call_count = Tests.call_count + 1 self.assertEqual(type(data.operation).__name__, 'Operation') if data.path == '/v1/auth/logout/': self.assertEqual(data.method, 'GET') self.assertEqual(data.handler_server, 'pnt_login.babar') self.assertIsNone(data.handler_client) self.assertIsNone(data.decorate_server) self.assertEqual(data.decorate_request, 'foo.bar.baz') self.assertFalse(data.param_in_body) self.assertTrue(data.param_in_query) self.assertFalse(data.no_params) self.assertTrue(data.produces_json) self.assertFalse(data.produces_html) elif data.path == '/v1/auth/login': self.assertEqual(data.method, 'POST') self.assertEqual(data.handler_server, 'pnt_login.handlers.do_login') self.assertEqual(data.handler_client, 'login') self.assertIsNone(data.decorate_server) self.assertIsNone(data.decorate_request) self.assertTrue(data.param_in_body) self.assertFalse(data.param_in_query) self.assertFalse(data.param_in_path) self.assertFalse(data.no_params) self.assertTrue(data.produces_json) self.assertFalse(data.produces_html) elif data.path == '/v1/version': self.assertEqual(data.method, 'GET') self.assertEqual(data.handler_server, 'do_version') self.assertIsNone(data.handler_client) self.assertIsNone(data.decorate_request) self.assertEqual(data.decorate_server, 'foo.bar.baz') self.assertFalse(data.param_in_body) self.assertFalse(data.param_in_query) self.assertFalse(data.param_in_path) self.assertTrue(data.no_params) self.assertTrue(data.produces_json) self.assertFalse(data.produces_html) elif data.path == '/v1/versionhtml': self.assertEqual(data.method, 'GET') self.assertEqual(data.handler_server, 'do_version_html') self.assertIsNone(data.handler_client) self.assertIsNone(data.decorate_request) self.assertEqual(data.decorate_server, 'foo.bar.baz') self.assertFalse(data.param_in_body) self.assertFalse(data.param_in_query) self.assertFalse(data.param_in_path) self.assertTrue(data.no_params) self.assertFalse(data.produces_json) self.assertTrue(data.produces_html) elif data.path == '/v1/hybrib': self.assertEqual(data.method, 'GET') self.assertEqual(data.handler_server, 'do_version') self.assertIsNone(data.handler_client) self.assertIsNone(data.decorate_request) self.assertEqual(data.decorate_server, 'foo.bar.baz') self.assertTrue(data.param_in_body) self.assertFalse(data.param_in_query) self.assertTrue(data.param_in_path) self.assertTrue(data.no_params) self.assertTrue(data.produces_json) self.assertFalse(data.produces_html) spec.call_on_each_endpoint(test_callback) self.assertEqual(Tests.call_count, 5)