import unittest
|
from . 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)
|