/tests/test_request_handlers.py

https://github.com/siddhantgoel/tornado-sqlalchemy · Python · 94 lines · 65 code · 29 blank · 0 comment · 4 complexity · 3bb89a6ac5c5220ab98899e1ee01f605 MD5 · raw file

  1. from http import HTTPStatus
  2. from tornado.gen import coroutine
  3. from tornado.testing import AsyncHTTPTestCase
  4. from tornado.web import Application, RequestHandler
  5. from tornado_sqlalchemy import SessionMixin, as_future
  6. from ._common import BaseTestCase, User, mysql_url, db
  7. class RequestHandlersTestCase(AsyncHTTPTestCase, BaseTestCase):
  8. def __init__(self, *args, **kwargs):
  9. super(RequestHandlersTestCase, self).__init__(*args, **kwargs)
  10. class WithoutMixinRequestHandler(RequestHandler):
  11. def get(h_self):
  12. with h_self.make_session() as session:
  13. count = session.query(User).count()
  14. h_self.write(str(count))
  15. class WithMixinRequestHandler(SessionMixin, RequestHandler):
  16. def get(h_self):
  17. with h_self.make_session() as session:
  18. session.add(User('hunter2'))
  19. session.flush()
  20. count = session.query(User).count()
  21. h_self.write(str(count))
  22. class GenCoroutinesRequestHandler(SessionMixin, RequestHandler):
  23. @coroutine
  24. def get(h_self):
  25. with h_self.make_session() as session:
  26. count = yield as_future(session.query(User).count)
  27. h_self.write(str(count))
  28. class NativeCoroutinesRequestHandler(SessionMixin, RequestHandler):
  29. async def get(h_self):
  30. with h_self.make_session() as session:
  31. count = await as_future(session.query(User).count)
  32. h_self.write(str(count))
  33. class UsesSelfSessionRequestHandler(SessionMixin, RequestHandler):
  34. def get(h_self):
  35. h_self.write(str(h_self.session.query(User).count()))
  36. handlers = (
  37. (r'/gen-coroutines', GenCoroutinesRequestHandler),
  38. (r'/native-coroutines', NativeCoroutinesRequestHandler),
  39. (r'/uses-self-session', UsesSelfSessionRequestHandler),
  40. (r'/with-mixin', WithMixinRequestHandler),
  41. (r'/without-mixin', WithoutMixinRequestHandler),
  42. )
  43. db.configure(url=mysql_url)
  44. self._application = Application(handlers, db=db)
  45. def get_app(self):
  46. return self._application
  47. def test_gen_coroutines(self):
  48. response = self.fetch('/gen-coroutines', method='GET')
  49. self.assertEqual(response.code, HTTPStatus.OK.value)
  50. self.assertEqual(response.body.decode('utf-8'), '0')
  51. def test_native_coroutines(self):
  52. response = self.fetch('/native-coroutines', method='GET')
  53. self.assertEqual(response.code, HTTPStatus.OK.value)
  54. self.assertEqual(response.body.decode('utf-8'), '0')
  55. def test_with_mixin(self):
  56. response = self.fetch('/with-mixin', method='GET')
  57. self.assertEqual(response.code, HTTPStatus.OK.value)
  58. self.assertEqual(response.body.decode('utf-8'), '1')
  59. def test_without_mixin(self):
  60. response = self.fetch('/without-mixin', method='GET')
  61. self.assertEqual(response.code, HTTPStatus.INTERNAL_SERVER_ERROR.value)
  62. def test_uses_self_session(self):
  63. response = self.fetch('/uses-self-session', method='GET')
  64. self.assertEqual(response.code, HTTPStatus.OK.value)
  65. self.assertEqual(response.body.decode('utf-8'), '0')