summaryrefslogtreecommitdiff
path: root/tests/test_scripts/test_prequest.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_scripts/test_prequest.py')
-rw-r--r--tests/test_scripts/test_prequest.py214
1 files changed, 214 insertions, 0 deletions
diff --git a/tests/test_scripts/test_prequest.py b/tests/test_scripts/test_prequest.py
new file mode 100644
index 000000000..75d5cc198
--- /dev/null
+++ b/tests/test_scripts/test_prequest.py
@@ -0,0 +1,214 @@
+import unittest
+from pyramid.tests.test_scripts import dummy
+
+class TestPRequestCommand(unittest.TestCase):
+ def _getTargetClass(self):
+ from pyramid.scripts.prequest import PRequestCommand
+ return PRequestCommand
+
+ def _makeOne(self, argv, headers=None):
+ cmd = self._getTargetClass()(argv)
+
+ def helloworld(environ, start_request):
+ self._environ = environ
+ self._path_info = environ['PATH_INFO']
+ start_request('200 OK', headers or [])
+ return [b'abc']
+ self.loader = dummy.DummyLoader(app=helloworld)
+ self._out = []
+ cmd._get_config_loader = self.loader
+ cmd.out = self.out
+ return cmd
+
+ def out(self, msg):
+ self._out.append(msg)
+
+ def test_command_not_enough_args(self):
+ command = self._makeOne([])
+ command.run()
+ self.assertEqual(self._out, ['You must provide at least two arguments'])
+
+ def test_command_two_args(self):
+ command = self._makeOne(['', 'development.ini', '/'],
+ [('Content-Type', 'text/html; charset=UTF-8')])
+ command.run()
+ self.assertEqual(self._path_info, '/')
+ self.assertEqual(self.loader.uri.path, 'development.ini')
+ self.assertEqual(self.loader.calls[0]['op'], 'logging')
+ self.assertEqual(self.loader.calls[1]['op'], 'app')
+ self.assertEqual(self.loader.calls[1]['name'], None)
+ self.assertEqual(self._out, ['abc'])
+
+ def test_command_path_doesnt_start_with_slash(self):
+ command = self._makeOne(['', 'development.ini', 'abc'],
+ [('Content-Type', 'text/html; charset=UTF-8')])
+ command.run()
+ self.assertEqual(self._path_info, '/abc')
+ self.assertEqual(self.loader.uri.path, 'development.ini')
+ self.assertEqual(self._out, ['abc'])
+
+ def test_command_has_bad_config_header(self):
+ command = self._makeOne(
+ ['', '--header=name','development.ini', '/'])
+ command.run()
+ self.assertEqual(
+ self._out[0],
+ ("Bad --header=name option, value must be in the form "
+ "'name:value'"))
+
+ def test_command_has_good_header_var(self):
+ command = self._makeOne(
+ ['', '--header=name:value','development.ini', '/'],
+ [('Content-Type', 'text/html; charset=UTF-8')])
+ command.run()
+ self.assertEqual(self._environ['HTTP_NAME'], 'value')
+ self.assertEqual(self._path_info, '/')
+ self.assertEqual(self._out, ['abc'])
+
+ def test_command_w_basic_auth(self):
+ command = self._makeOne(
+ ['', '--login=user:password',
+ '--header=name:value','development.ini', '/'],
+ [('Content-Type', 'text/html; charset=UTF-8')])
+ command.run()
+ self.assertEqual(self._environ['HTTP_NAME'], 'value')
+ self.assertEqual(self._environ['HTTP_AUTHORIZATION'],
+ 'Basic dXNlcjpwYXNzd29yZA==')
+ self.assertEqual(self._path_info, '/')
+ self.assertEqual(self._out, ['abc'])
+
+ def test_command_has_content_type_header_var(self):
+ command = self._makeOne(
+ ['', '--header=content-type:app/foo','development.ini', '/'],
+ [('Content-Type', 'text/html; charset=UTF-8')])
+ command.run()
+ self.assertEqual(self._environ['CONTENT_TYPE'], 'app/foo')
+ self.assertEqual(self._path_info, '/')
+ self.assertEqual(self._out, ['abc'])
+
+ def test_command_has_multiple_header_vars(self):
+ command = self._makeOne(
+ ['',
+ '--header=name:value',
+ '--header=name2:value2',
+ 'development.ini',
+ '/'],
+ [('Content-Type', 'text/html; charset=UTF-8')]
+ )
+ command.run()
+ self.assertEqual(self._environ['HTTP_NAME'], 'value')
+ self.assertEqual(self._environ['HTTP_NAME2'], 'value2')
+ self.assertEqual(self._path_info, '/')
+ self.assertEqual(self._out, ['abc'])
+
+ def test_command_method_get(self):
+ command = self._makeOne(['', '--method=GET', 'development.ini', '/'],
+ [('Content-Type', 'text/html; charset=UTF-8')])
+ command.run()
+ self.assertEqual(self._environ['REQUEST_METHOD'], 'GET')
+ self.assertEqual(self._path_info, '/')
+ self.assertEqual(self._out, ['abc'])
+
+ def test_command_method_post(self):
+ from pyramid.compat import NativeIO
+ command = self._makeOne(['', '--method=POST', 'development.ini', '/'],
+ [('Content-Type', 'text/html; charset=UTF-8')])
+ stdin = NativeIO()
+ command.stdin = stdin
+ command.run()
+ self.assertEqual(self._environ['REQUEST_METHOD'], 'POST')
+ self.assertEqual(self._environ['CONTENT_LENGTH'], '-1')
+ self.assertEqual(self._environ['wsgi.input'], stdin)
+ self.assertEqual(self._path_info, '/')
+ self.assertEqual(self._out, ['abc'])
+
+ def test_command_method_put(self):
+ from pyramid.compat import NativeIO
+ command = self._makeOne(['', '--method=PUT', 'development.ini', '/'],
+ [('Content-Type', 'text/html; charset=UTF-8')])
+ stdin = NativeIO()
+ command.stdin = stdin
+ command.run()
+ self.assertEqual(self._environ['REQUEST_METHOD'], 'PUT')
+ self.assertEqual(self._environ['CONTENT_LENGTH'], '-1')
+ self.assertEqual(self._environ['wsgi.input'], stdin)
+ self.assertEqual(self._path_info, '/')
+ self.assertEqual(self._out, ['abc'])
+
+ def test_command_method_patch(self):
+ from pyramid.compat import NativeIO
+ command = self._makeOne(['', '--method=PATCH', 'development.ini', '/'],
+ [('Content-Type', 'text/html; charset=UTF-8')])
+ stdin = NativeIO()
+ command.stdin = stdin
+ command.run()
+ self.assertEqual(self._environ['REQUEST_METHOD'], 'PATCH')
+ self.assertEqual(self._environ['CONTENT_LENGTH'], '-1')
+ self.assertEqual(self._environ['wsgi.input'], stdin)
+ self.assertEqual(self._path_info, '/')
+ self.assertEqual(self._out, ['abc'])
+
+ def test_command_method_propfind(self):
+ from pyramid.compat import NativeIO
+ command = self._makeOne(['', '--method=PROPFIND', 'development.ini',
+ '/'],
+ [('Content-Type', 'text/html; charset=UTF-8')])
+ stdin = NativeIO()
+ command.stdin = stdin
+ command.run()
+ self.assertEqual(self._environ['REQUEST_METHOD'], 'PROPFIND')
+ self.assertEqual(self._path_info, '/')
+ self.assertEqual(self._out, ['abc'])
+
+ def test_command_method_options(self):
+ from pyramid.compat import NativeIO
+ command = self._makeOne(['', '--method=OPTIONS', 'development.ini',
+ '/'],
+ [('Content-Type', 'text/html; charset=UTF-8')])
+ stdin = NativeIO()
+ command.stdin = stdin
+ command.run()
+ self.assertEqual(self._environ['REQUEST_METHOD'], 'OPTIONS')
+ self.assertEqual(self._path_info, '/')
+ self.assertEqual(self._out, ['abc'])
+
+ def test_command_with_query_string(self):
+ command = self._makeOne(['', 'development.ini', '/abc?a=1&b=2&c'],
+ [('Content-Type', 'text/html; charset=UTF-8')])
+ command.run()
+ self.assertEqual(self._environ['QUERY_STRING'], 'a=1&b=2&c')
+ self.assertEqual(self._path_info, '/abc')
+ self.assertEqual(self._out, ['abc'])
+
+ def test_command_display_headers(self):
+ command = self._makeOne(
+ ['', '--display-headers', 'development.ini', '/'],
+ [('Content-Type', 'text/html; charset=UTF-8')])
+ command.run()
+ self.assertEqual(self._path_info, '/')
+ self.assertEqual(
+ self._out,
+ ['200 OK', 'Content-Type: text/html; charset=UTF-8', 'abc'])
+
+ def test_command_response_has_no_charset(self):
+ command = self._makeOne(['', '--method=GET', 'development.ini', '/'],
+ headers=[('Content-Type', 'image/jpeg')])
+ command.run()
+ self.assertEqual(self._path_info, '/')
+
+ self.assertEqual(self._out, [b'abc'])
+
+ def test_command_method_configures_logging(self):
+ command = self._makeOne(['', 'development.ini', '/'])
+ command.run()
+ self.assertEqual(self.loader.calls[0]['op'], 'logging')
+
+
+class Test_main(unittest.TestCase):
+ def _callFUT(self, argv):
+ from pyramid.scripts.prequest import main
+ return main(argv, True)
+
+ def test_it(self):
+ result = self._callFUT(['prequest'])
+ self.assertEqual(result, 2)