PageRenderTime 34ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/pyramid_debugtoolbar/tests/test_views.py

https://bitbucket.org/biideal/pyramid_debugtoolbar
Python | 170 lines | 146 code | 24 blank | 0 comment | 1 complexity | 575f8005f4cc8b2e5184342a350b14e2 MD5 | raw file
  1. import unittest
  2. from pyramid_debugtoolbar.compat import text_
  3. from pyramid_debugtoolbar.compat import bytes_
  4. from pyramid import testing
  5. class TestExceptionDebugView(unittest.TestCase):
  6. def setUp(self):
  7. self.config = testing.setUp()
  8. self.config.registry.settings['mako.directories'] = []
  9. from pyramid.mako_templating import renderer_factory
  10. self.config.add_renderer('.dbtmako', renderer_factory)
  11. def tearDown(self):
  12. testing.tearDown()
  13. def _makeOne(self, request):
  14. from pyramid_debugtoolbar.views import ExceptionDebugView
  15. return ExceptionDebugView(request)
  16. def _makeRequest(self):
  17. request = testing.DummyRequest()
  18. request.secret = 'abc';
  19. request.params['token'] = 'token'
  20. request.exc_history = self._makeExceptionHistory()
  21. return request
  22. def _makeExceptionHistory(self, frames=None):
  23. if frames is None:
  24. frm = DummyFrame()
  25. frames = {0:frm}
  26. exc_history = DummyExceptionHistory(frames)
  27. exc_history.eval_exc = True
  28. return exc_history
  29. def test_no_exc_history(self):
  30. from pyramid.httpexceptions import HTTPBadRequest
  31. request = self._makeRequest()
  32. request.static_url = lambda *arg, **kw: 'http://static'
  33. request.params['frm'] = '0'
  34. request.exc_history = None
  35. self.assertRaises(HTTPBadRequest, self._makeOne, request)
  36. def test_without_token_in_request(self):
  37. from pyramid.httpexceptions import HTTPBadRequest
  38. request = self._makeRequest()
  39. del request.params['token']
  40. self.assertRaises(HTTPBadRequest, self._makeOne, request)
  41. def test_with_bad_token_in_request(self):
  42. from pyramid.httpexceptions import HTTPBadRequest
  43. request = self._makeRequest()
  44. request.params['token'] = 'wrong'
  45. self.assertRaises(HTTPBadRequest, self._makeOne, request)
  46. def test_source(self):
  47. request = self._makeRequest()
  48. request.params['frm'] = '0'
  49. view = self._makeOne(request)
  50. response = view.source()
  51. self.assertEqual(response.body, bytes_('source'))
  52. self.assertEqual(response.content_type, 'text/html')
  53. def test_source_no_frame(self):
  54. request = self._makeRequest()
  55. view = self._makeOne(request)
  56. response = view.source()
  57. self.assertEqual(response.status_int, 400)
  58. def test_source_frame_not_found(self):
  59. request = self._makeRequest()
  60. request.params['frm'] = '1'
  61. view = self._makeOne(request)
  62. response = view.source()
  63. self.assertEqual(response.status_int, 400)
  64. def test_execute(self):
  65. request = self._makeRequest()
  66. request.params['frm'] = '0'
  67. request.params['cmd'] = 'doit'
  68. view = self._makeOne(request)
  69. response = view.execute()
  70. self.assertEqual(response.body, bytes_('evaled'))
  71. self.assertEqual(response.content_type, 'text/html')
  72. def test_execute_frame_is_None(self):
  73. request = self._makeRequest()
  74. request.params['cmd'] = 'doit'
  75. view = self._makeOne(request)
  76. response = view.execute()
  77. self.assertEqual(response.status_int, 400)
  78. def test_execute_cmd_is_None(self):
  79. request = self._makeRequest()
  80. request.params['frm'] = '0'
  81. view = self._makeOne(request)
  82. response = view.execute()
  83. self.assertEqual(response.status_int, 400)
  84. def test_execute_nosuchframe(self):
  85. request = self._makeRequest()
  86. request.params['frm'] = '1'
  87. request.params['cmd'] = 'doit'
  88. view = self._makeOne(request)
  89. response = view.execute()
  90. self.assertEqual(response.status_int, 400)
  91. def test_console(self):
  92. request = self._makeRequest()
  93. request.static_url = lambda *arg, **kw: 'http://static'
  94. request.route_url = lambda *arg, **kw: 'http://root'
  95. request.params['frm'] = '0'
  96. view = self._makeOne(request)
  97. result = view.console()
  98. self.assertEqual(result,
  99. {'console': 'true',
  100. 'title': 'Console',
  101. 'evalex': 'true',
  102. 'traceback_id': -1,
  103. 'token': 'token',
  104. 'static_path': 'http://static',
  105. 'root_path':'http://root',
  106. }
  107. )
  108. def test_console_no_initial_history_frame(self):
  109. request = self._makeRequest()
  110. request.static_url = lambda *arg, **kw: 'http://static'
  111. request.route_url = lambda *arg, **kw: 'http://root'
  112. request.params['frm'] = '0'
  113. request.exc_history.frames = {}
  114. view = self._makeOne(request)
  115. view.console()
  116. self.assertEqual(len(request.exc_history.frames), 1)
  117. def test_exception_summary(self):
  118. from pyramid.renderers import render
  119. request = self._makeRequest()
  120. request.static_url = lambda *arg, **kw: 'http://static'
  121. vars = {
  122. 'classes': text_('classfoo class&bar'),
  123. 'title': text_('<h3>TEH TITLE</h3>'),
  124. 'frames': text_('<pre>Frame1</pre><pre>Frame2</pre>'),
  125. }
  126. html = render(
  127. 'pyramid_debugtoolbar:templates/exception_summary.dbtmako',
  128. vars, request=request)
  129. self.assertTrue(
  130. text_('<div class="classfoo class&amp;bar">') in html,html)
  131. self.assertTrue(
  132. text_('<h3>TEH TITLE</h3>') in html, html)
  133. self.assertTrue(
  134. text_('<pre>Frame1</pre><pre>Frame2</pre>') in html, html)
  135. class DummyExceptionHistory(object):
  136. def __init__(self, frames):
  137. self.token = 'token'
  138. self.frames = frames
  139. class DummyConsole(object):
  140. def eval(self, cmd):
  141. return 'evaled'
  142. class DummyFrame(object):
  143. def __init__(self):
  144. self.console = DummyConsole()
  145. def render_source(self):
  146. return 'source'