diff --git a/matemat/webserver/test/abstract_httpd_test.py b/matemat/webserver/test/abstract_httpd_test.py index b121dfd..4b61417 100644 --- a/matemat/webserver/test/abstract_httpd_test.py +++ b/matemat/webserver/test/abstract_httpd_test.py @@ -109,6 +109,8 @@ class MockServer: self.session_vars: Dict[str, Tuple[datetime, Dict[str, Any]]] = dict() # Webroot for statically served content self.webroot: str = webroot + # Variables to pass to pagelets + self.pagelet_variables: Dict[str, str] = dict() # Jinja environment with a single, static template self.jinja_env = jinja2.Environment( loader=jinja2.DictLoader({'test.txt': 'Hello, {{ what }}!'}) @@ -168,6 +170,7 @@ def test_pagelet(path: str): str, RequestArguments, Dict[str, Any], + Dict[str, str], Dict[str, str]], Union[bytes, str, Tuple[int, str]]]): @pagelet(path) @@ -175,9 +178,10 @@ def test_pagelet(path: str): path: str, args: RequestArguments, session_vars: Dict[str, Any], - headers: Dict[str, str]): + headers: Dict[str, str], + pagelet_variables: Dict[str, str]): headers['X-Test-Pagelet'] = fun.__name__ - result = fun(method, path, args, session_vars, headers) + result = fun(method, path, args, session_vars, headers, pagelet_variables) return result return testing_wrapper return with_testing_headers diff --git a/matemat/webserver/test/test_config.py b/matemat/webserver/test/test_config.py new file mode 100644 index 0000000..6ddcc83 --- /dev/null +++ b/matemat/webserver/test/test_config.py @@ -0,0 +1,63 @@ + +from unittest import TestCase +from unittest.mock import patch + +from io import StringIO + +from matemat.webserver import parse_config_file + +_EMPTY_CONFIG = '' + +_FULL_CONFIG = ''' +[Matemat] + +Address=fe80::0123:45ff:fe67:89ab +Port = 8080 + +StaticPath =/var/test/static +TemplatePath= /var/test/templates + +[Pagelets] +Name=Matemat + (Unit Test) +UploadDir= /var/test/static/upload +DatabaseFile=/var/test/db/test.db +''' + + +class TestConfig(TestCase): + + def test_parse_config_empty_defualt_values(self): + with patch('builtins.open', return_value=StringIO(_EMPTY_CONFIG)): + config = parse_config_file('test') + self.assertIn('listen', config) + self.assertIn('port', config) + self.assertIn('staticroot', config) + self.assertIn('templateroot', config) + self.assertIn('pagelet_variables', config) + self.assertEqual('::', config['listen']) + self.assertEqual(80, config['port']) + self.assertEqual('/var/matemat/static', config['staticroot']) + self.assertEqual('/var/matemat/templates', config['templateroot']) + self.assertIsInstance(config['pagelet_variables'], dict) + self.assertEqual(0, len(config['pagelet_variables'])) + + def test_parse_config_full(self): + with patch('builtins.open', return_value=StringIO(_FULL_CONFIG)): + config = parse_config_file('test') + self.assertIn('listen', config) + self.assertIn('port', config) + self.assertIn('staticroot', config) + self.assertIn('templateroot', config) + self.assertIn('pagelet_variables', config) + self.assertIn('Name', config['pagelet_variables']) + self.assertIn('UploadDir', config['pagelet_variables']) + self.assertIn('DatabaseFile', config['pagelet_variables']) + + self.assertEqual('fe80::0123:45ff:fe67:89ab', config['listen']) + self.assertEqual(8080, config['port']) + self.assertEqual('/var/test/static', config['staticroot']) + self.assertEqual('/var/test/templates', config['templateroot']) + self.assertEqual('Matemat\n(Unit Test)', config['pagelet_variables']['Name']) + self.assertEqual('/var/test/static/upload', config['pagelet_variables']['UploadDir']) + self.assertEqual('/var/test/db/test.db', config['pagelet_variables']['DatabaseFile']) diff --git a/matemat/webserver/test/test_post.py b/matemat/webserver/test/test_post.py index e105354..a006221 100644 --- a/matemat/webserver/test/test_post.py +++ b/matemat/webserver/test/test_post.py @@ -12,7 +12,8 @@ def post_test_pagelet(method: str, path: str, args: RequestArguments, session_vars: Dict[str, Any], - headers: Dict[str, str]): + headers: Dict[str, str], + pagelet_variables: Dict[str, str]): """ Test pagelet that simply prints the parsed arguments as response body. """ diff --git a/matemat/webserver/test/test_serve.py b/matemat/webserver/test/test_serve.py index 7b0b61d..32853de 100644 --- a/matemat/webserver/test/test_serve.py +++ b/matemat/webserver/test/test_serve.py @@ -13,7 +13,8 @@ def serve_test_pagelet_str(method: str, path: str, args: RequestArguments, session_vars: Dict[str, Any], - headers: Dict[str, str]) -> Union[bytes, str, PageletResponse]: + headers: Dict[str, str], + pagelet_variables: Dict[str, str]) -> Union[bytes, str, PageletResponse]: headers['Content-Type'] = 'text/plain' return 'serve test pagelet str' @@ -23,7 +24,8 @@ def serve_test_pagelet_bytes(method: str, path: str, args: RequestArguments, session_vars: Dict[str, Any], - headers: Dict[str, str]) -> Union[bytes, str, PageletResponse]: + headers: Dict[str, str], + pagelet_variables: Dict[str, str]) -> Union[bytes, str, PageletResponse]: headers['Content-Type'] = 'application/octet-stream' return b'serve\x80test\xffpagelet\xfebytes' @@ -33,7 +35,8 @@ def serve_test_pagelet_redirect(method: str, path: str, args: RequestArguments, session_vars: Dict[str, Any], - headers: Dict[str, str]) -> Union[bytes, str, PageletResponse]: + headers: Dict[str, str], + pagelet_variables: Dict[str, str]) -> Union[bytes, str, PageletResponse]: return RedirectResponse('/foo/bar') @@ -42,7 +45,8 @@ def serve_test_pagelet_template(method: str, path: str, args: RequestArguments, session_vars: Dict[str, Any], - headers: Dict[str, str]) -> Union[bytes, str, PageletResponse]: + headers: Dict[str, str], + pagelet_variables: Dict[str, str]) -> Union[bytes, str, PageletResponse]: headers['Content-Type'] = 'text/plain' return TemplateResponse('test.txt', what='World') @@ -53,7 +57,8 @@ def serve_test_pagelet_fail(method: str, path: str, args: RequestArguments, session_vars: Dict[str, Any], - headers: Dict[str, str]) -> Union[bytes, str, PageletResponse]: + headers: Dict[str, str], + pagelet_variables: Dict[str, str]) -> Union[bytes, str, PageletResponse]: session_vars['test'] = 'hello, world!' headers['Content-Type'] = 'text/plain' raise HttpException() diff --git a/matemat/webserver/test/test_session.py b/matemat/webserver/test/test_session.py index 2e64ceb..224d18f 100644 --- a/matemat/webserver/test/test_session.py +++ b/matemat/webserver/test/test_session.py @@ -13,7 +13,8 @@ def session_test_pagelet(method: str, path: str, args: RequestArguments, session_vars: Dict[str, Any], - headers: Dict[str, str]): + headers: Dict[str, str], + pagelet_variables: Dict[str, str]): session_vars['test'] = 'hello, world!' headers['Content-Type'] = 'text/plain' return 'session test'