PageRenderTime 46ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/pyramid/tests/test_scripts/test_prequest.py

https://gitlab.com/goolic/pyramid
Python | 235 lines | 228 code | 7 blank | 0 comment | 2 complexity | 4b459e1618100735312dbd7256fd48f1 MD5 | raw file
  1. import unittest
  2. class TestPRequestCommand(unittest.TestCase):
  3. def _getTargetClass(self):
  4. from pyramid.scripts.prequest import PRequestCommand
  5. return PRequestCommand
  6. def _makeOne(self, argv, headers=None):
  7. cmd = self._getTargetClass()(argv)
  8. cmd.get_app = self.get_app
  9. self._headers = headers or []
  10. self._out = []
  11. cmd.out = self.out
  12. return cmd
  13. def get_app(self, spec, app_name=None, options=None):
  14. self._spec = spec
  15. self._app_name = app_name
  16. self._options = options or {}
  17. def helloworld(environ, start_request):
  18. self._environ = environ
  19. self._path_info = environ['PATH_INFO']
  20. start_request('200 OK', self._headers)
  21. return [b'abc']
  22. return helloworld
  23. def out(self, msg):
  24. self._out.append(msg)
  25. def test_command_not_enough_args(self):
  26. command = self._makeOne([])
  27. command.run()
  28. self.assertEqual(self._out, ['You must provide at least two arguments'])
  29. def test_command_two_args(self):
  30. command = self._makeOne(['', 'development.ini', '/'])
  31. command.run()
  32. self.assertEqual(self._path_info, '/')
  33. self.assertEqual(self._spec, 'development.ini')
  34. self.assertEqual(self._app_name, None)
  35. self.assertEqual(self._out, ['abc'])
  36. def test_command_path_doesnt_start_with_slash(self):
  37. command = self._makeOne(['', 'development.ini', 'abc'])
  38. command.run()
  39. self.assertEqual(self._path_info, '/abc')
  40. self.assertEqual(self._spec, 'development.ini')
  41. self.assertEqual(self._app_name, None)
  42. self.assertEqual(self._out, ['abc'])
  43. def test_command_has_bad_config_header(self):
  44. command = self._makeOne(
  45. ['', '--header=name','development.ini', '/'])
  46. command.run()
  47. self.assertEqual(
  48. self._out[0],
  49. ("Bad --header=name option, value must be in the form "
  50. "'name:value'"))
  51. def test_command_has_good_header_var(self):
  52. command = self._makeOne(
  53. ['', '--header=name:value','development.ini', '/'])
  54. command.run()
  55. self.assertEqual(self._environ['HTTP_NAME'], 'value')
  56. self.assertEqual(self._path_info, '/')
  57. self.assertEqual(self._spec, 'development.ini')
  58. self.assertEqual(self._app_name, None)
  59. self.assertEqual(self._out, ['abc'])
  60. def test_command_w_basic_auth(self):
  61. command = self._makeOne(
  62. ['', '--login=user:password',
  63. '--header=name:value','development.ini', '/'])
  64. command.run()
  65. self.assertEqual(self._environ['HTTP_NAME'], 'value')
  66. self.assertEqual(self._environ['HTTP_AUTHORIZATION'],
  67. 'Basic dXNlcjpwYXNzd29yZA==')
  68. self.assertEqual(self._path_info, '/')
  69. self.assertEqual(self._spec, 'development.ini')
  70. self.assertEqual(self._app_name, None)
  71. self.assertEqual(self._out, ['abc'])
  72. def test_command_has_content_type_header_var(self):
  73. command = self._makeOne(
  74. ['', '--header=content-type:app/foo','development.ini', '/'])
  75. command.run()
  76. self.assertEqual(self._environ['CONTENT_TYPE'], 'app/foo')
  77. self.assertEqual(self._path_info, '/')
  78. self.assertEqual(self._spec, 'development.ini')
  79. self.assertEqual(self._app_name, None)
  80. self.assertEqual(self._out, ['abc'])
  81. def test_command_has_multiple_header_vars(self):
  82. command = self._makeOne(
  83. ['',
  84. '--header=name:value',
  85. '--header=name2:value2',
  86. 'development.ini',
  87. '/'])
  88. command.run()
  89. self.assertEqual(self._environ['HTTP_NAME'], 'value')
  90. self.assertEqual(self._environ['HTTP_NAME2'], 'value2')
  91. self.assertEqual(self._path_info, '/')
  92. self.assertEqual(self._spec, 'development.ini')
  93. self.assertEqual(self._app_name, None)
  94. self.assertEqual(self._out, ['abc'])
  95. def test_command_method_get(self):
  96. command = self._makeOne(['', '--method=GET', 'development.ini', '/'])
  97. command.run()
  98. self.assertEqual(self._environ['REQUEST_METHOD'], 'GET')
  99. self.assertEqual(self._path_info, '/')
  100. self.assertEqual(self._spec, 'development.ini')
  101. self.assertEqual(self._app_name, None)
  102. self.assertEqual(self._out, ['abc'])
  103. def test_command_method_post(self):
  104. from pyramid.compat import NativeIO
  105. command = self._makeOne(['', '--method=POST', 'development.ini', '/'])
  106. stdin = NativeIO()
  107. command.stdin = stdin
  108. command.run()
  109. self.assertEqual(self._environ['REQUEST_METHOD'], 'POST')
  110. self.assertEqual(self._environ['CONTENT_LENGTH'], '-1')
  111. self.assertEqual(self._environ['wsgi.input'], stdin)
  112. self.assertEqual(self._path_info, '/')
  113. self.assertEqual(self._spec, 'development.ini')
  114. self.assertEqual(self._app_name, None)
  115. self.assertEqual(self._out, ['abc'])
  116. def test_command_method_put(self):
  117. from pyramid.compat import NativeIO
  118. command = self._makeOne(['', '--method=PUT', 'development.ini', '/'])
  119. stdin = NativeIO()
  120. command.stdin = stdin
  121. command.run()
  122. self.assertEqual(self._environ['REQUEST_METHOD'], 'PUT')
  123. self.assertEqual(self._environ['CONTENT_LENGTH'], '-1')
  124. self.assertEqual(self._environ['wsgi.input'], stdin)
  125. self.assertEqual(self._path_info, '/')
  126. self.assertEqual(self._spec, 'development.ini')
  127. self.assertEqual(self._app_name, None)
  128. self.assertEqual(self._out, ['abc'])
  129. def test_command_method_patch(self):
  130. from pyramid.compat import NativeIO
  131. command = self._makeOne(['', '--method=PATCH', 'development.ini', '/'])
  132. stdin = NativeIO()
  133. command.stdin = stdin
  134. command.run()
  135. self.assertEqual(self._environ['REQUEST_METHOD'], 'PATCH')
  136. self.assertEqual(self._environ['CONTENT_LENGTH'], '-1')
  137. self.assertEqual(self._environ['wsgi.input'], stdin)
  138. self.assertEqual(self._path_info, '/')
  139. self.assertEqual(self._spec, 'development.ini')
  140. self.assertEqual(self._app_name, None)
  141. self.assertEqual(self._out, ['abc'])
  142. def test_command_method_propfind(self):
  143. from pyramid.compat import NativeIO
  144. command = self._makeOne(['', '--method=PROPFIND', 'development.ini',
  145. '/'])
  146. stdin = NativeIO()
  147. command.stdin = stdin
  148. command.run()
  149. self.assertEqual(self._environ['REQUEST_METHOD'], 'PROPFIND')
  150. self.assertEqual(self._path_info, '/')
  151. self.assertEqual(self._spec, 'development.ini')
  152. self.assertEqual(self._app_name, None)
  153. self.assertEqual(self._out, ['abc'])
  154. def test_command_method_options(self):
  155. from pyramid.compat import NativeIO
  156. command = self._makeOne(['', '--method=OPTIONS', 'development.ini',
  157. '/'])
  158. stdin = NativeIO()
  159. command.stdin = stdin
  160. command.run()
  161. self.assertEqual(self._environ['REQUEST_METHOD'], 'OPTIONS')
  162. self.assertEqual(self._path_info, '/')
  163. self.assertEqual(self._spec, 'development.ini')
  164. self.assertEqual(self._app_name, None)
  165. self.assertEqual(self._out, ['abc'])
  166. def test_command_with_query_string(self):
  167. command = self._makeOne(['', 'development.ini', '/abc?a=1&b=2&c'])
  168. command.run()
  169. self.assertEqual(self._environ['QUERY_STRING'], 'a=1&b=2&c')
  170. self.assertEqual(self._path_info, '/abc')
  171. self.assertEqual(self._spec, 'development.ini')
  172. self.assertEqual(self._app_name, None)
  173. self.assertEqual(self._out, ['abc'])
  174. def test_command_display_headers(self):
  175. command = self._makeOne(
  176. ['', '--display-headers', 'development.ini', '/'])
  177. command.run()
  178. self.assertEqual(self._path_info, '/')
  179. self.assertEqual(self._spec, 'development.ini')
  180. self.assertEqual(self._app_name, None)
  181. self.assertEqual(
  182. self._out,
  183. ['200 OK', 'Content-Type: text/html; charset=UTF-8', 'abc'])
  184. def test_command_response_has_no_charset(self):
  185. command = self._makeOne(['', '--method=GET', 'development.ini', '/'],
  186. headers=[('Content-Type', 'image/jpeg')])
  187. command.run()
  188. self.assertEqual(self._path_info, '/')
  189. self.assertEqual(self._spec, 'development.ini')
  190. self.assertEqual(self._app_name, None)
  191. self.assertEqual(self._out, [b'abc'])
  192. def test_command_method_configures_logging(self):
  193. command = self._makeOne(['', 'development.ini', '/'])
  194. called_args = []
  195. def configure_logging(app_spec):
  196. called_args.append(app_spec)
  197. command.configure_logging = configure_logging
  198. command.run()
  199. self.assertEqual(called_args, ['development.ini'])
  200. class Test_main(unittest.TestCase):
  201. def _callFUT(self, argv):
  202. from pyramid.scripts.prequest import main
  203. return main(argv, True)
  204. def test_it(self):
  205. result = self._callFUT(['prequest'])
  206. self.assertEqual(result, 2)